Робо-рука с дистанционным управлением от перчатки и Arduino
Идея этого проекта появилась и увлекла меня во время отпуска.
Мысль была примерно следующая: "Было бы классно иметь робо-руку, которая управлялась бы моей собственной!". И через некоторое время я принялся за разработку и реализацию этого проекта. Надеюсь, вам будет интересно!
Основные узлы проекта - перчатка и сама робо-рука. В качестве контроллера использовался Arduino. Движение робо-руки обеспечивается сервомоторами. На перчатке установлены датчики изгиба: переменные резисторы, которые меняют свое сопротивление пи изгибе. Они подключены к одной стороне делителя напряжения и постоянным резисторам. Arduino считывает изменение напряжения при изгибе датчиков и передает сигнал серводвигателям, которые пропорционально поворачиваются. Видео рабочего проекта приведено ниже.
Конструкция руки взята из open-source проекта InMoov. На странице проекта можно загрузить 3-D модели всех узлов и напечатать их на 3-D принтере.
Ниже приведены все шаги для реализации вашей собственной робо-руки с управлением от перчатки.
Необходимые материалы
Для проекта вам понадобятся:
- 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 принтеру


...все! Вы можете начинать ваш проект робо-руки!
Печатаем руку
Рука является частью open-source проекта под названием InMoov. Это робот, который печатается на 3-D принтере. Рука - это лишь отдельный узел общей конструкции. Скачайте с этой страницы и напечатайте следующие детали:
robpart1.stl*
robpart4V2.stl
robpart5V2.stl
Auriculaire3.stl
Index3.stl
Majeure3.stl
ringfinger3.stl
WristsmallV3.stl
thumb5.stl
Wristlarge.stl
На всякий случай прилагаю кликабельный список деталей, потому-что некоторые из них удалены со страницы основного проекта.
И с этой страницы
RobCableFrontV1.stl
RobRingV3.stl (в этой детали пришлось сделать дополнительные отверстия, чтобы подошли мои сервы)
RobCableBackV2.stl
RobServoBedV4.stl
robpart3V3.stl
robpart4V3.stl
(Это две детали "обшивки" - они не обязательны с точки зрения жесткости конструкции и ее функционирования)

В общей сложности понадобилось около 13-15 часов для печати. Зависит от качества печати. Я использовал MakerBot Replicator 2X. Рекомендую печатать детали пальцев на стандартном или высоком разрешении, чтобы избежать нежелательного трения в конструкции.

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

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



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



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





Собираем робо-руку
Я не буду детально останавливаться на этом шаге. Он очень подробно раскрыт на веб-сайте InMoov (в разделе "Assembly Sketches" и "Assembly Help"):
Когда соберете руку, убедитесь, что узлы установлены правильно с точки зрения ориентации в пространстве. Не забудьте рассверлить отверстия в пальцах робо-руки под крепеж 3 мм, чтобы уменьшить трение между сочленениями. С наружной стороны я залил болты клеем.

Не спешите устанавливать леску. Сначала проверьте работоспособность серводвигателей.
Проверка сервомоторов
На этом этапе сервы уже должны быть установлены в задней части вашей робо-руки. Для подключения серв к Arduino и источнику питания, я использовал небольшую макетную плату. Подключите каждый позитивный контакт серводвигателя (красный) к одной рельсе макетной платы, а негативный (черный или коричневый) - к другой рельсе.
ВАЖНО! Не забудьте подключить контакт Arduino к рельсе с отрицательным зарядом: помните, что все контакты Земля должны быть соединены между собой. Контакт VCC может подключаться к различным источникам питания, но GND должен быть одинаковым.
Загрузите программу на Arduino (файл с программой прилагается). Убедитесь, что подключение сенсоров, сервомоторов и т.п. Было правильным. Наденьте перчатку и включите Arduino. Серводвигатели должны вращаться в зависимости от того, каким пальцем вы будете двигать. Если сервы двигаются, значит все работает!

Если вы более искушенный пользователь Arduino и знаете как проверить текущие значения с датчиков изгиба, можете настроить диапазон в программе под ваши реалии. Предполагаю, что все сенсоры изгиба примерно одинаковые, но если это не так, калибровка датчиков вам однозначно поможет.
Если сервомоторы отрабатывают неправильно, убедитесь, что вы их правильно подключили (например, когда я работал над этим проектом, я, как обычно, забыл соединить пин GND Arduino с GND источника питания и всех серв. В этом случае работать ничего не будет). Убедитесь, что все отрабатывает перед тем, как двигаться дальше.
Добавляем леску
Добавить леску - это, наверное, самая сложная и ответсвенная часть проекта робо-руки. На сайте InMoov есть инструкция на этот счет. Концепция простая, но реализовать ее практически не так то просто. Обратите внимание, что эта часть проекта требует сосредоточения и терпения. Единственное отличие моего варианта от конструкции на InMoov - использование клея. Благодаря этому мы можем получить возможность более губкой настройки при калибровке серв. Для этого достаточно расплавить клей и подтянуть нужные нам болты. Хотя, конечно же, надежность конструкции падает. В конце-концов, после окончательной настройки и калибровки, мы в любой момент можем использовать другой вариант фиксации.
Для калибровки сервомоторов, проверните роторы так, чтобы пальцы робо-руки лежали на столе. Подключите ваш Arduino и источник питания. Выставьте качалки приводов таким образом, чтобы в полностью "лежащем" состоянии руки натяжение было максимальным.

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

Несмотря на то, что существуют гораздо более сложные и точные (и дорогие в том числе) конструкции, приведенный проект очень интересен и имеет отличный потенциал для практического применения. Подобные конструкции не стоит использовать при непосредственном контакте с человеком, ввиду недостаточной точности самого концепта. Но промышленности, медицине и т.п. для задач без повышенных требований к точности перемещений суставов, наша робо-рука вполне подойдет. Ну а с точки зрения дальнейшего "апгрейда" руки - тут поле вообще непаханое. Начиная от беспроводного управления, заканчивая заменой приводов, габаритов, разработки дополнительных степеней свободы.
Именно за это я люблю Arduino: вы можете очень быстро и за небольшие деньги собрать макет или прототип устройства, которое не только просто программируется, но и может выполнять реальные интересные задачи.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!