Робо-рука с дистанционным управлением от перчатки и arduino

Добавляем леску

Добавить леску — это, наверное, самая сложная и ответсвенная часть проекта робо-руки. На сайте InMoov есть инструкция на этот счет. Концепция простая, но реализовать ее практически не так то просто

Обратите внимание, что эта часть проекта требует сосредоточения и терпения. Единственное отличие моего варианта от конструкции на InMoov — использование клея

Благодаря этому мы можем получить возможность более губкой настройки при калибровке серв. Для этого достаточно расплавить клей и подтянуть нужные нам болты. Хотя, конечно же, надежность конструкции падает. В конце-концов, после окончательной настройки и калибровки, мы в любой момент можем использовать другой вариант фиксации.

Для калибровки сервомоторов, проверните роторы так, чтобы пальцы робо-руки лежали на столе. Подключите ваш Arduino и источник питания. Выставьте качалки приводов таким образом, чтобы в полностью «лежащем» состоянии руки натяжение было максимальным.

Объяснить процесс калибровки достаточно сложно. Кроме того, инструкция с InMoov мне, например, не подошла. То есть, при крепеже вам надо проявить фантазию и подстроиться под ваши реалии — как то: тип качалок, тип лески или ниток, погрешности конструкции и сборки, расстояние установки сервомоторов относительно суставов робо-руки.

К счастью — это последний этап проекта!

Программирование и первый запуск

Для управления использовано 5 потенциометров (вполне можно заменить это на 1 потенциометр и два джойстика). Схема подключения с потенциометрами приведена в предыдущей части. Скетч для Arduino находится здесь.

Снизу представлены несколько видео робота-манипулятора в работе. Надеюсь, вам понравится.

На видео сверху представлены последние модификации арма. Пришлось немного изменить конструкцию и заменить несколько деталей. Оказалось, что сервы futuba s3003 слабоваты. Их получилось использовать только для схвата или поворота руки. Так что виесто них были установлены mg995. Ну а mg946 вообще будут отличным вариантом.

Подключаем датчики изгиба к Arduino

Для подключения датчиков изгиба к Arduino нам в схему надо включить делитель напряжения. Датчики изгиба по сути являются переменным резистором. При использовании в паре с постоянным резистором, можно отслеживать разницу в напряжении двух резисторов. Отследить разницу можно с помощью аналоговых контактов Arduino. Схема подключения приведена ниже (красный коннектор — это напряжение, черный — земля, голубой — коннектор самого сигнала, который подключается к аналоговому входу Arduino).

Резисторы на фото имеют номинал 22 кОм. Цвета проводов соответствуют цветам, приведенным на схеме подключения.

Все контакты GND от датчиков соединены в общую Землю. Земля идет к пину GND на Arduino. +5V на Arduino подключается к общему контакту питания от всех датчиков. Каждый голубой коннектор сигнала подключается к отдельному аналоговому входу на микроконтроллере.

Я собрал схему на небольшой монтажной плате. Размеры платы желательно выбрать поменьше, чтобы в дальнейшем закрепить на перчатку. Закрепить на перчатке нашу собранную схему можно с помощью элементарной нити и иголки. Кроме того, не поленитесь и сразу же используйте изоленту на оголенных контактах.

Конструкция

Набравшись вдохновения и смелости, я заказал несколько китайских сервоприводов и в ожидании посылки занялся проработкой конструкции. С 3D-печатью в то время были сложности (было реально дорого), поэтому я решил сделать конструкцию из дерева. Для этого понадобились пара деревянных дощечек, черенок от детской лопаты, толстая леска, немного крепежа и несколько вечеров, когда я, забыв про все на свете, строгал свое будущее творение.

Кисть вместе со всеми пальцами я сделал по образцу вышеупомянутого художника. А конструкцию предплечья уже разрабатывал самостоятельно с подгонкой под имеющиеся материалы и технические возможности. Здесь приведу модель этого узла.Микроконтроллер взял взаймы у коллег по работе. Мне попалась отладочная плата с МК STM32L152. Для моих целей этого было более чем достаточно. Навыков программирования такого железа я не имел, поэтому вооружившись интернетом удалось на базе IDE Cocos создать рабочий алгоритм для управления механической рукой. Суть алгоритма проста: 5 входов контроллера настроены как аналоговые входы и при изменении сигнала на входе соответствующим образом меняют ширину управляющего импульса для сервопривода.Для таких целей этот модуль подходит с избытком по необходимой периферии. Но другого под рукой просто не было.

В качестве сервоприводов были выбраны MG995 с металлическим редуктором и с достаточно высоким вращательным моментом порядка 10 кг/см. Диапазон ширины импульса такого привода составил — 500 … 2500 мкс, угол поворота -90 … +90°.

Управление рукой

Соблюдая все традиции дистанционного управления, я решил сделать для своей кибернетической руки управляющую перчатку. Чтобы рука повторяла все движения перчатки. Весь вопрос был в том, что использовать в качестве датчика. Покупной тензометрический датчик изгиба мне показался тогда дороговатым решением. Проработав разные варианты, я захотел самостоятельно изготовить оптический датчик изгиба. Для этого потребовался кусок силиконовой трубки, светодиод, фототранзистор и пара резисторов (для одного датчика).

Принцип работы следующий: с одной стороны трубки устанавливается светодиод, а с другой — фотоэлемент. Сопротивление фотоэлемента зависит от светового потока, попадающего на него и соответственно от угла сгиба трубки. Таким образом, сгибая палец, мы меняем уровень аналогового сигнала на входе контроллера, который в свою очередь, с помощью сервопривода поворачивает палец на механической руке на нужный угол.

Механическая рука очень хорошо повторяла все движения перчатки, а также позволяла захватывать разные предметы, например, маленький мячик. Коллеги и друзья были приятно удивлены получившейся робототехнической игрушкой.

К сожалению, дальше я забросил этот проект, переключившись на более интересные темы. Но этот первый опыт, тот детский восторг, когда ты собираешь это своими руками, навсегда останется в моей памяти. С тех времен осталось только одно любительское видео, которое я даже раньше и не планировал публиковать.

С тех пор я перепробовал много разных технических направлений. Но робототехника покорила меня навеки. В следующих публикациях (например, Робот-муравей) вы увидите мои новые, более интересные творения!

Шаг 1. Детали, которые понадобятся

Создание роботов очень популярный и вполне забавный процесс среди любителей, но управлять любым роботом очень нелегко.

К вопросу создания роботов нужно подходить постепенно, поэтому мы начнем с создания роботизированной руки, которую можно контролировать, используя только ваш смартфон или планшет на Android.

Хорошая новость заключается в том, что нужно только собрать руку, запрограммировать Arduino, а приложение уже доступно для загрузки бесплатно.

  1. Серводвигатели — 4 штуки
  2. Нарезанный кусок картона — сделать «тело».
  3. USB OTG (на фото ниже, выбрать любой).
  4. И, конечно, плата Arduino (любая).
  5. Несколько перемычек, чтобы сделать соединения.
  6. Для питания серводвигателей используется 9-вольтная батарея.

В уроке использованы микросерверы SG90, но любая модель или размер вполне подойдут. Вы можете использовать до 5 сервоприводов для этого робота, у нас всего 4.

USB On-the-Go или просто OTG – это адаптер, который позволяет подключать к вашему смартфону переферийные устройства, такие как клавиатура, мышь, контроллеры, жесткие диски и прочее. Этот переходник фактически превращает ваше устройство в компьютер.

Устанавливаем сенсоры на перчатке

Можем приступать к установке датчиков и нашей монтажной платы на саму перчатку. Сначала просверлите небольшое отверстие в пластике датчиков. Отверстия сверлятся в местах, где чувствительный элемент закончился

ВАЖНО! Ни в коем случае не сверлите отверстие в чувствительном материале. После этого оденьте перчатку

Сделайте отметки карандашом или ручкой на вершине каждого сустава. Эти места вы будете использовать для крепежа сенсоров. Датчики изгиба крепятся обычной ниткой. Пришейте сенсоры к перчатке. Используйте отверстие, которые вы сделали на концах датчика. В местах, где отмечены суставы сенсоры «прихватываются» нитью поверх. Более детально все это показано на фото ниже. Монтажная плата пришивается к перчатке аналогично сенсорам. Учтите, что для движения пальцев надо оставить определенный запас длины проводников. Это надо учесть при установке нашей монтажной платы и выборе длины коннекторов от нее к датчикам.

Проверка сервомоторов

На этом этапе сервы уже должны быть установлены в задней части вашей робо-руки. Для подключения серв к Arduino и источнику питания, я использовал небольшую макетную плату. Подключите каждый позитивный контакт серводвигателя (красный) к одной рельсе макетной платы, а негативный (черный или коричневый) — к другой рельсе.

ВАЖНО! Не забудьте подключить контакт Arduino к рельсе с отрицательным зарядом: помните, что все контакты Земля должны быть соединены между собой. Контакт VCC может подключаться к различным источникам питания, но GND должен быть одинаковым

Загрузите программу на Arduino (файл с программой прилагается). Убедитесь, что подключение сенсоров, сервомоторов и т.п. Было правильным. Наденьте перчатку и включите Arduino. Серводвигатели должны вращаться в зависимости от того, каким пальцем вы будете двигать. Если сервы двигаются, значит все работает!

Если вы более искушенный пользователь Arduino и знаете как проверить текущие значения с датчиков изгиба, можете настроить диапазон в программе под ваши реалии. Предполагаю, что все сенсоры изгиба примерно одинаковые, но если это не так, калибровка датчиков вам однозначно поможет.

Если сервомоторы отрабатывают неправильно, убедитесь, что вы их правильно подключили (например, когда я работал над этим проектом, я, как обычно, забыл соединить пин GND Arduino с GND источника питания и всех серв. В этом случае работать ничего не будет). Убедитесь, что все отрабатывает перед тем, как двигаться дальше.

Шаг 7. Программирование Arduino

Вы можете скачать или скопировать код ниже:

# include <Servo.h>
//PWM OUTPUT VARIABLES
Servo pin2;
Servo pin3;
Servo pin4;
Servo pin5;
Servo pin6;
//SERIAL USB BUFFER
char inData; // Allocate some space for the string
char inChar; // Where to store the character read
byte index = 0 ; // Index into array; where to store the character
void setup () {
//START PIN OUTPUT
pin2. attach ( 2); // attaches the servo on pin 9 to the servo object
pin3. attach ( 3);
pin4. attach ( 4);
pin5. attach ( 5);
pin6. attach ( 6);
//SEND MINIMAL VAUE 1000, REGUIRED FOR ESC TO ARM (max is 2000)
pin2. writeMicroseconds (1000 );
pin3. writeMicroseconds (1000 );
pin4. writeMicroseconds (1000 );
pin5. writeMicroseconds (1000 );
pin6. writeMicroseconds (1000 );
//INIT SERIAL COMMUNICATION WITH ANDROID
Serial. begin (115200 );
}
void loop () {
if (Serial. available () > 0 ){
//WAIT FOR INCOMMING DATA BUFFER TO FILL
if (index < 24){
inChar = Serial. read (); // Read a character
inData = inChar; // Store it
index ++; // Increment where to write next
if (inChar == 'X' )
index = 0 ;
inData = '\0' ; // Null terminate the string
}
}
if (index ==24 ){
index = 0;
//STRING LOOKS LIKE "A100B96C20D0E" WHERE LETTERS ACT AS DELIMINATOR
//STRING CAN CONTAIN SINGLE VALUE LIKE "B96C"
String buf = String (inData);
int ia = buf. indexOf ( "A", 0);
int ib = buf. indexOf ( "B", 0);
int ic = buf. indexOf ( "C", 0);
int id = buf. indexOf ( "D", 0);
int ie = buf. indexOf ( "E", 0);
int iff = buf. indexOf ("F" , 0 );
Serial. print ("|" );
//A?B
if (ia!=- 1 && ib!=- 1){
//1. CONVERT VALUE TO INTEGER
//2. CONVERT 0-100 TO 1000 - 2000
//3. WRITE TO ARDUINO PIN NUMBER 2
pin2. writeMicroseconds (map (buf. substring (ia+ 1, ib). toInt (), 1, 100 , 1000 , 2000 ));
//SEND RESPONSE TO ANDROID
Serial. print ( "RESPONSE:OK" );
}
//B?C
if (ib!=- 1 && ic!=- 1){
pin3. writeMicroseconds (map (buf. substring (ib+ 1, ic). toInt (), 1, 100 , 1000 , 2000 ));
//Serial.print("PIN3 OK");
}
//C?D
if (ic!=- 1 && id!=- 1){
pin4. writeMicroseconds (map (buf. substring (ic+ 1, id). toInt (), 1, 100 , 1000 , 2000 ));
//Serial.print("PIN4 OK");
}
//D?E
if (id!=- 1 && ie!=- 1){
pin5. writeMicroseconds (map (buf. substring (id+ 1, ie). toInt (), 1, 100 , 1000 , 2000 ));
//Serial.print("PIN5 OK");
}
//E?F
if (ie!=- 1 && iff!=- 1){
pin5. writeMicroseconds (map (buf. substring (ie+ 1, iff). toInt (), 1 , 100 , 1000 , 2000 ));
//Serial.print("PIN6 OK");
}
Serial. print ("|00" );
Serial. print ("\n" );
}
}
void logg (){
}

Первая в мире управляемая силой мысли роботизированная рука

Используя новые методы сенсорных технологий и машинного обучения Хе вместе со своей командой смог получить доступ к глубинным сигналам мозга, достигнув высокой точности управления роборукой. Благодаря неинвазивной нейровизуализации и новой парадигме непрерывного преследования, система научилась преодолевать шумные сигналы ЭЭГ, что привело к значительному улучшению нейронного декодирования и облегчило непрерывное управление роботизированными устройствами в режиме реального времени.

Используя неинвазивный BCI для управления роботизированной рукой, которая отслеживает курсор на экране компьютера, Хе с командой впервые продемонстрировал, что манипулятор теперь может непрерывно следовать за курсором. Ранее подобные устройства следовали за движением курсора резкими, дискретными движениями, как будто пытались «догнать» команды мозга – теперь конечность следует за курсором плавно и непрерывно.

В статье, опубликованной в журнале Science Robotics, команда описывает создание новой платформы, которая направлена на улучшение «мозговых» и «компьютерных» компонентов BCI за счет повышения вовлеченности пользователей и их обучения, а также усовершенствования пространственного разрешения неинвазивных нейронных данных посредством визуализации источников ЭЭГ.

В статье указано, что уникальный подход команды к решению этой проблемы улучшил систему обучения BCI почти на 60 процентов для традиционных задач центрирования, а также повысил качество непрерывного отслеживания компьютерного курсора более чем на 500 процентов.

К настоящему моменту система была проверена с участием 68 работоспособных людей (до 10 сеансов для каждого), людях (до 10 сеансов для каждого субъекта), включая управление виртуальным устройством и управление роботизированной рукой для непрерывного преследования. Клинические испытания технологии с участием настоящих пациентов ученые планируют начать проводить в самом ближайшем будущем.

Видео одного из участников эксперимента, использующего виртуальный курсор с помощью нейрокомпьютерного интерфейса, а также роботизированной руки, управляемой силой мысли для выполнения задачи по непрерывному контролю случайно двигающейся цели

Обсудить новость можно в нашем Telegram-чате.

Необходимые материалы

Для проекта вам понадобятся:

  • 5 серводвигателей MG946R (или аналогичных — MG995 или MG996. При разработке руки у меня возникли некоторые проблемы с диапазоном перемещений. Так что лучше использовать сервы с большим углом поворота ). Сервы, которые использованы в этом проекте, покупались на hobbyking.com, но можно заказать на eBey или Aliexpress, подождать посылку недельки две-три и прилично сэкономить.
  • 5 датчиков изгиба 4.5 дюймов.
  • 1 плата Arduino Uno или ее аналог.
  • 5 резисторов на 22 кОм.
  • 1 6.0-7.2В батарейка (для серводвигателей).
  • 1 монтажная плата (breadboard).
  • 1 коннектор для батарейки.
  • Коннекторы для макетки.
  • 1 маленькая монтажная плата для распайки.
  • 1 перчатка. Максимально подходящая по размеру руки.
  • 1 длинный болт 8 мм в диаметре. Длина 55 мм.
  • 1 длинный болт 8 мм в диаметре. Длина 60 мм.
  • 1 длинный болт 8 мм в диаметре. Длина 80 мм.
  • 14 болтов 3 мм в диаметре. Длина 20 мм.
  • 20 болтов 4 мм в диаметре. Длина в диапазоне от 7 до 30 мм.
  • Около 5 метров лески или нитей или веревок (надо подобрать такую, чтобы не порвалась)
  • Супер клей
  • Наждачная бумага
  • Нитка и нить
  • Дрель
  • Паяльник
  • Доступ к 3-D принтеру

…все! Вы можете начинать ваш проект робо-руки!

Сборка механической части

Перед началом разработки механической части манипулятора, стоит отметить, что чертежей у меня нет. Все узлы делались «на коленке». Но принцип очень простой. У вас есть два звена из акрила, между которыми надо установить серводвигатели. И другие два звенья. Тоже для установки двигателей. Ну и сам схват. Подобный схват проще всего купить в интеренете. Практически все устанавливается с помощью винтов.

Длина первой части около 19 см; второй — около 17.5; длина переднего звена около 5.5 см. Остальные габариты подбирайте в соответсвии с размерами вашего проекта. В принципе, размеры остальных узлов не так важны.

Механическая рука должна обеспечивать угол поворота 180 градусов в основании. Так что мы должны установить снизу серводвигатель. В данном случае он устанавливается в тот самый диско-шар. В вашем случае это может быть любой подходящий бокс. Робот устанавливается на этот серводвигатель. Можно, как это показано на рисунке, установить дополнительное металлическое кольцо-фланец. Можно обойтись и без него.

Для установки ультразвукового датчика, используется акрил толщиной 2 мм. Тут же снизу можно установить светодиод.

Детально объяснить как именно сконструировать подобный манипулятор сложно. Многое зависит от тех узлов и частей, которые есть у вас в наличии или вы приобретаете. Например, если габариты ваших сервоприводов отличаются, звенья арма из акрила тоже изменятся. Если изменятся габариты, калибровка манипулятора тоже будет отличаться.

Вам точно придется после завершения разработки механической части манипулятора удлинить кабели серводвигателей. Для этих целей в данном проекте использовались провода из интернет-кабеля. Для того, чтобы все это имело вид, не поленитесь и установите на свободные концы удлиненных кабелей переходники — мама или папа, в зависимости от выходов вашей платы Arduino, шилда или источника питания.

После сборки механической части, мы можем перейти к «мозгам» нашего манипулятора.

Шаг 12. Код Arduino

Загрузите скетч файл Arduino.

Подключите USB-кабель к USB-порту вашего компьютера и загрузите код. Загрузка кода занимает время, Вам нужно проявить терпение.

После полной загрузки, отсоедините USB-кабель, подключите источник питания к Arduino и включите кнопку питания. Код начнет работать моментально.

Вам, возможно, придется заменить начальный угол каждого серводвигателя в зависимости от того, как Ваши сервоприводы монтируются.

Объяснение кода:

Перед установкой кода импортируте библиотеки, используемые в эскизе (nunchuk.h, wire.h и servo.h).

Далее определяются используемые контакты и объявляются глобальные переменные. Целочисленные переменные angle# (угла) сохраняют начальную позицию для каждого сервопривода. Если Вы хотите, чтобы Ваш робот начал работать в другой позиции, измените значения этих переменных.

Переменные servo # _speed определяют скорость движения каждого сервопривода. Если вы хотите, чтобы определенный сервопривод двигался быстрее, увеличьте его значение. Угол # min и угол # max используются для ограничения максимального и минимального угла для каждого сервопривода. Вы можете установить эти переменные, чтобы избежать коллизий между последовательными суставами робота.

Во время настройки каждый сервопривод подключается к определенному выводу, и его положение запускается.

Здесь также запускается последовательная связь (с последовательным монитором) и связь I2C с Nunchuck.

Основной цикл повторяется снова и снова. Статус Nunchuk читается в каждом цикле. В зависимости от показаний выполняются разные команды.

Джойстик X будет использоваться для перемещения серво #1.

Был использован следующий блок кода. Сначала он проверяет, достаточно ли значение джойстика. Таким образом, шум и небольшие вариации не учитываются. Если значение соответствует требованиям, угол сервомашины будет увеличен / уменьшен с заданной скоростью.

Аналогичный блок используется для джойстика Y. Он используется для изменения угла Серво #3. Серво #2 сохраняется в этом коде.

Вращение захвата задается углы рулона и тангажа контроллера, измеренные его акселерометром. Чтобы облегчить управление рукой, угол захвата обновляется только при нажатии кнопок C или Z.

Когда нажимается только кнопка C, код считывает угол поворота и использует его как заданное значение. Серво #5 вращается до достижения заданного значения. Это скорость пропорциональна ошибке между фактическим и желаемым положением. Аналогичный код используется для сервоуправления №4, который отслеживает угол наклона контроллера.

Захват закрывается всякий раз, когда нажимаются кнопки C и Z. Когда какая-либо из этих кнопок будет не нажата, манипулятор откроет захват.

К концу эскиза есть блок кода. Он отобразит на Serial Monitor фактический угол каждого сервомотора. Может быть полезно выбрать начальный угол каждого двигателя.

Конструктор рука робота для детей от восьми лет

В красочной коробке с игрушкой рука робота находится 229 деталей, дополненных инструкцией, с помощью которой можно собрать гидравлического робота руку Bondibon. Инструкция очень подробная, состоит из 87 листов, на которых имеются иллюстрации, значительно облегчающие сборочный процесс.

Пластиковые детали собраны в панели, каждая из них аккуратно вырезается ножницами. Для облегчения поиска необходимого элемента панели имеют буквенное обозначение, а на деталях нанесены цифры

Это делает процесс сборки не слишком сложным, важно только быть аккуратным и внимательным. Помощь может потребоваться лишь при заправке водой гидравлической системы

В итоге кропотливой работы будет собран гидравлический робот рука которого способна захватывать небольшие предметы и перемещать их на некоторое расстояние. Для управления hand hydraulic предусмотрен пульт, оснащенный пятью рычагами. Роботизированный манипулятор совершает действия, напоминающие движения человеческой руки.

Возможности гидравлического робота Bondibon

Гидравлическая рука, собранная в соответствии с приложенной к деталям инструкцией, обладает подвижными суставами, позволяющими модели поворачиваться, фиксировать предметы, захватывая и поднимая их. Подъемный механизм рассчитан на подъем груза не более 50 грамм. Для фиксации груза используется зажим.

Действия гидравлической руки имеет сходство с работой подъемного крана, но захват груза выполняется специальным механизмом, работающим с помощью гидравлической системы. Наличие в конструкции гидравлики, позволяет устройству не использовать внешних источников энергии. Модели не требуются ни батарейки, ни электродвигатель.

Дети, имеющие склонность к техническому творчеству, с удовольствием проводят время за сборкой оригинального устройства. Такой конструктор важен для развития пространственного мышления, внимательности и терпения. Эти качества смогут помочь ребенку правильно выбрать будущую профессию.

Для многих детское увлечение сборкой простейших конструкторов постепенно перерастает в увлечение робототехникой, одной из перспективных отраслей развития современной науки. Даже если в будущем профессия ребенка будет далека от конструирования, детские наборы для сборки роботов являются идеальным способом тренировки координации движений и развития логики.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector