Вконтакте Facebook Twitter Лента RSS

Робот рука манипулятор на шаговых двигателях. Настольная робо-рука манипулятор из оргстекла на сервоприводах своими руками или реверс-инжиниринг uArm. Программа управления и пояснения к ней

Привет, гиктаймс!

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

Сейчас моя робо-рука выглядит так:

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

Пробы и ошибки

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

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

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

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

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

Меня удручает то, что я не смог привнести ничего принципиально нового в проект uArm. К тому времени, как я начал рисовать финальную версию, они уже выкатили 3D-модели на GrabCad. В итоге я только немного упростил клешню, подготовил файлы в удобном формате и применил очень простые и стандартные комплектующие.

Особенности манипулятора

До появления uArm, настольные манипуляторы подобного класса выглядели достаточно уныло. У них либо не было электроники вообще, либо было какое-нибудь управление с резисторами, либо было свое проприетарное ПО. Во-вторых, они как правило не имели системы параллельных шарниров и сам захват менял свое положение в процессе работы. Если собрать все достоинства моего манипулятора, то получается достаточно длинный список:
  1. Система тяг, позволяющих разместить мощные я тяжелые двигатели в основании манипулятора, а также удерживающие захват параллельно или перпендикулярно основанию
  2. Простой набор комплектующих, которые легко купить или вырезать из оргстекла
  3. Подшипники почти во всех узлах манипулятора
  4. Простота сборки. Это оказалось действительно сложной задачей. Особенно трудно было продумать процесс сборки основания
  5. Положение захвата можно менять на 90 градусов
  6. Открытые исходники и документация. Все подготовлено в доступных форматах. Я дам ссылки для скачивания на 3D-модели, файлы для резки, список материалов, электронику и софт
  7. Arduino-совместимость. Есть много противников Arduino, но я считаю, что это возможность расширения аудитории. Профессионалы вполне могут написать свой софт на C - это же обычный контроллер от Atmel!

Механика

Для сборки необходимо вырезать детали из оргстекла толщиной 5мм:

С меня за резку всех этих деталей взяли около $10.

Основание монтируется на большом подшипнике:

Особенно трудно было продумать основание с точки зрения процесса сборки, но я подглядывал за инженерами из uArm. Качалки сидят на штифте диаметром 6мм. Надо отметить, что тяга локтя у меня держится на П-образном держателе, а у uFactory на Г-образном. Трудно объяснить в чем разница, но я считаю у меня получилось лучше.

Захват собирается отдельно. Он может поворачиваться вокруг своей оси. Сама клешня сидит прямо на валу двигателя:

В конце статьи я дам ссылку на суперподробную инструкцию по сборке в фотографиях. За пару часов можно уверенно все это скрутить, если все необходимое есть под рукой. Также я подготовил 3D-модель в бесплатной программе SketchUp. Её можно скачать, покрутить и посмотреть что и как собрано.

Электроника

Чтобы заставить руку работать достаточно всего навсего подключить пять сервоприводов к Arduino и подать на них питание с хорошего источника. У uArm использованы какие-то двигатели с обратной связью. Я поставил три обычных двигателя MG995 и два маленьких двигателя с металлическим редуктором для управления захватом.

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

Этот шилд на самом деле очень простой. На нем четыре переменных резистора, две кнопки, пять разъемов для сервопривода и разъем питания. Это очень удобно с точки зрения отладки. Можно загрузить тестовый скетч и записать какой-нибудь макрос для управления или что-нибудь вроде того. Ссылку для скачивания файла платы я тоже дам в конце статьи, но она подготовлена для изготовления с металлизацией отверстий, так что мало пригодна для домашнего производства.

Программирование

Самое интересное, это управление манипулятором с компьютера. У uArm есть удобное приложение для управления манипулятором и протокол для работы с ним. Компьютер отправляет в COM-порт 11 байт. Первый из них всегда 0xFF, второй 0xAA и некоторые из оставшихся - сигналы для сервоприводов. Далее эти данные нормализуются и отдаются на отработку двигателям. У меня сервоприводы подключены к цифровым входам/выходам 9-12, но это легко можно поменять.

Терминальная программа от uArm позволяет изменять пять параметров при управлении мышью. При движении мыши по поверхности изменяется положение манипулятора в плоскости XY. Вращение колесика - изменение высоты. ЛКМ/ПКМ - сжать/разжать клешню. ПКМ + колесико - поворот захвата. На самом деле очень удобно. При желании можно написать любой терминальный софт, который будет общаться с манипулятором по такому же протоколу.

Я не буду здесь приводить скетчи - скачать их можно будет в конце статьи.

Видео работы

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

Ссылки

Файлы для резки оргстекла, 3D-модели, список для покупки, чертежи платы и софт можно скачать в конце моей

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

Помощник №1 – робот-манипулятор

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

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

Как устроен промышленный робот

Робот-манипулятор выглядит как огромная автоматизированная «рука» под контролем системы электроуправления. В конструкции устройств отсутствует пневматика или гидравлика, все построено на электромеханике. Это позволило сократить стоимость роботов и повысить их долговечность.

Промышленные роботы могут быть 4-х осевыми (используются для укладки и фасовки) и 6-ти осевыми (для остальных видов работ). Кроме того, роботы отличаются и в зависимости от степени свободы: от 2 до 6. Чем он выше, тем точнее манипулятор воссоздает движение человеческой руки: вращение, перемещение, сжатие/разжатие, наклоны и прочее.
Принцип действия устройства зависит от его программного обеспечения и оснащения, и если в начале своего развития основная цель была освобождение работников от тяжелого и опасного вида работ, то сегодня спектр выполняемых задач значительно возрос.

Использование роботизированных помощников позволяет справляться одновременно с несколькими задачами:

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

В Японии, Китае, США, Германии на предприятиях работает минимум сотрудников, обязанностью которых является лишь контроль работы манипуляторов и качество изготавливаемой продукции. Стоит отметить, что промышленный робот-манипулятор – это не только функциональный помощник в машиностроении или сварочном деле. Автоматизированные устройства представлены в широком ассортименте и используются в металлургии, легкой и пищевой промышленности. В зависимости от потребностей предприятия можно подобрать манипулятор, соответствующий функциональным обязанностям и бюджету.

Виды промышленных роботов-манипуляторов

На сегодняшний день существует около 30 видов роботизированных рук: от универсальных моделей до узкоспециализированных помощников. В зависимости от выполняемых функций, механизмы манипуляторов могут отличаться: так например, это могут быть сварочные работы, резка, сверление, гибка, сортировка, укладка и упаковка товаров.

В отличие от существующего стереотипа о дороговизне роботизированной техники, каждое, даже небольшое предприятие, сможет приобрести подобный механизм. Небольшие универсальные роботы-манипуляторы с небольшой грузоподъемностью (до 5кг) ABB, и FANUC будут стоить от 2 до 4 тысяч долларов.
Несмотря на компактность устройств, они способны увеличить скорость работы и качество обработки изделий. Под каждого робота будет написано уникальное ПО, которое в точности координирует работу агрегата.

Узкоспециализированные модели

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

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

Сварщики
Самыми распространенными вариантами являются сварочные роботы. Их производительность и точность в 8 раз выше, чем у человека. Такие модели могут выполнять несколько видов сварки: дуговая или точечная (в зависимости от ПО).

Лидерами в данной области считаются промышленные роботы-манипуляторы Kuka. Стоимость от 5 до 300 тысяч долларов (в зависимости от грузоподъемности и функций).

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

Производители ABB, KUKA, и Epson предлагают воспользоваться устройствами для подъема тяжелых грузов весом больше 1 тонны и транспортировку от склада к месту погрузки.

Производители промышленных роботов манипуляторов

Бесспорными лидерами в данной отрасли считаются Япония и Германия. На их долю приходится более 50% всей роботизированной техники. Конкурировать с гигантами, непросто, однако, и в странах СНГ постепенно появляются собственные производители и стартапы.

KNN Systems. Украинская компания является партнером немецкой Kuka и занимается разработкой проектов по роботизации процессов сварки, фрезеровки, плазменной резки и паллетизации. Благодаря их ПО промышленный робот может быть перенастроен под новый вид задач всего за один день.

Rozum Robotics (Беларусь). Специалисты компании разработали промышленный робот-манипулятор PULSE, отличающийся своей легкостью и простотой в использовании. Устройство подходит для сборки, упаковки, склеиванию и перестановки деталей. Цена робота в районе 500 долларов.

«АРКОДИМ-Про» (Россия). Занимается выпуском линейных роботов-манипуляторов (двигаются по линейным осям), используемых для литья пластика под давлением. Кроме того, роботы ARKODIM могут работать, как часть конвейерной системы, и выполнять функции сварщика или упаковщика.

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

В целом и общем

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

Технические характеристики результата

Будет рассматриваться образец с параметрами длины/высоты/ширины соответственно 228/380/160 миллиметров. Вес сделанной, будет составлять примерно 1 килограмм. Для управления используется проводной дистанционный пульт. Ориентировочное время сборки при наличии опыта - около 6-8 часов. Если его нет, то могут уйти дни, недели, а при попустительстве и месяцы, чтобы была собрана рука-манипулятор. Своими руками и одному в таких случаях стоит делать разве что для своего собственного интереса. Для движения составляющих используются коллекторные моторы. Приложив достаточно усилий, можно сделать прибор, который будет поворачиваться на 360 градусов. Также для удобства работы, кроме стандартного инструментария вроде паяльника и припоя, необходимо запастись:

  1. Удлинёнными плоскогубцами.
  2. Боковыми кусачками.
  3. Крестовой отверткой.
  4. 4-мя батарейками типа D.

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

Мелкие детали

Для регуляции количества оборотов можно использовать переходные колесики. Они позволят сделать движение руки-манипулятора плавными.

Также необходимо позаботится о том, чтобы провода не усложняли её движения. Оптимальным будет проложить их внутри конструкции. Можно сделать всё и извне, такой подход сэкономит время, но потенциально может привести к сложностям в перемещении отдельных узлов или всего устройства. А теперь: как сделать манипулятор?

Сборка в общих чертах

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

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

Какой из предложенных вариантов выбрать, зависит исключительно от вас. Далее делается основная конструкция. Для комфорта работы необходимо два «сустава». Прикреплённый к платформе должен уметь наклоняться в разные стороны, что решается с помощью двигателей, размещённых в его основании. Ещё один или пару следует разместить в месте локтевого изгиба, чтобы часть захвата можно было перемещать по горизонтальной и вертикальной линии системы координат. Далее, при желании получить максимальные возможности, можно установить ещё двигатель в месте запястья. Далее наиболее необходимое, без чего не представляется рука-манипулятор. Своими руками предстоит сделать само устройство захвата. Тут существует множество вариантов реализации. Можно дать наводку по двум самым популярным:

  1. Используется только два пальца, которые одновременно сжимают и разжимают объект захвата. Является самой простой реализацией, которая, правда, обычно не может похвастаться значительной грузоподъёмностью.
  2. Создаётся прототип человеческой руки. Тут для всех пальцев может использоваться один двигатель, с помощью которого будет осуществляться сгиб/разгиб. Но можно сделать и конструкцию сложней. Так, можно к каждому пальцу подсоединить по двигателю и управлять ими отдельно.

Далее остаётся сделать пульт, с помощью которого будет оказываться влияние на отдельные двигатели и темпы их работы. И можно приступать к экспериментам, используя робот-манипулятор, своими руками сделанный.

Возможные схематические изображения результата

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

Любая представленная схема манипулятора может быть усовершенствована.

Заключение

Важным в робототехнике является то, что практически не существует ограничения по функциональному улучшению. Поэтому при желании создать настоящее произведение искусства не составит труда. Говоря о возможных путях дополнительного улучшения, следует отметить кран-манипулятор. Своими руками сделать такое устройство не составит труда, одновременно оно позволит приучить детей к творческому труду, науке и конструировании. А это в свою очередь позитивно может сказаться на их будущей жизни. Сложно ли будет сделать кран-манипулятор своими руками? Это не так проблемно, как может показаться на первый взгляд. Разве что стоит позаботиться о наличии дополнительных мелких деталей вроде троса и колёс, по которым он будет крутиться.


Подключение:

Если Вы собрали детали манипулятора в соответствии с инструкцией, то можно приступить к сборке электронной схемы. Мы предлагаем подключить сервоприводы манипулятора к Arduino UNO через Trerma-Power Shield , а управлять сервоприводами используя Trema-потенциометры .

  • Поворот ручки первого Trema-потенциометра приведёт к повороту основания.
  • Поворот ручки второго Trema-потенциометра приведёт к повороту левого плеча.
  • Поворот ручки третьего Trema-потенциометра приведёт к повороту правого плеча.
  • Поворот ручки четвёртого Trema-потенциометра приведёт в движение захват.

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

Код программы:

Если вы подадите питание, до калибровки, манипулятор может начать двигаться неадекватно! Сначала выполните все шаги калибровки.

#include // Подключаем библиотеку Servo для работы с сервоприводами Servo servo1; // Объявляем объект servo1 для работы с сервоприводом основания Servo servo2; // Объявляем объект servo2 для работы с сервоприводом левого плеча Servo servo3; // Объявляем объект servo3 для работы с сервоприводом правого плеча Servo servo4; // Объявляем объект servo4 для работы с сервоприводом захвата int valR1, valR2, valR3, valR4; // Объявляем переменные для хранения значений потенциометров // Назначаем выводы: const uint8_t pinR1 = A2; // Определяем константу с № вывода потенциометра управл. основанием const uint8_t pinR2 = A3; // Определяем константу с № вывода потенциометра управл. левым плечом const uint8_t pinR3 = A4; // Определяем константу с № вывода потенциометра управл. правым плечом const uint8_t pinR4 = A5; // Определяем константу с № вывода потенциометра управл. захватом const uint8_t pinS1 = 10; // Определяем константу с № вывода сервопривода основания const uint8_t pinS2 = 9; // Определяем константу с № вывода сервопривода левого плеча const uint8_t pinS3 = 8; // Определяем константу с № вывода сервопривода правого плеча const uint8_t pinS4 = 7; // Определяем константу с № вывода сервопривода захвата void setup(){ // Код функции setup выполняется однократно: Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта servo1.attach(pinS1); // Назначаем объекту servo1 управление сервоприводом 1 servo2.attach(pinS2); // Назначаем объекту servo2 управление сервоприводом 2 servo3.attach(pinS3); // Назначаем объекту servo3 управление сервоприводом 3 servo4.attach(pinS4); // Назначаем объекту servo4 управление сервоприводом 4 } void loop(){ // Код функции loop выполняется постоянно: valR1=map(analogRead(pinR1), 0, 1024, 10, 170); servo1.write(valR1); // Вращаем основанием Указанные в данной строке углы: 10 и 170 возможно потребуется изменить (откалибровать) valR2=map(analogRead(pinR2), 0, 1024, 80, 170); servo2.write(valR2); // Управляем левым плечом Указанные в данной строке углы: 80 и 170 возможно потребуется изменить (откалибровать) valR3=map(analogRead(pinR3), 0, 1024, 60, 170); servo3.write(valR3); // Управляем правым плечом Указанные в данной строке углы: 60 и 170 возможно потребуется изменить (откалибровать) valR4=map(analogRead(pinR4), 0, 1024, 40, 70); servo4.write(valR4); // Управляем захватом Указанные в данной строке углы: 40 и 70 возможно потребуется изменить (откалибровать) Serial.println((String) "A1 = "+valR1+",\t A2 = "+valR2+", \t A3 = "+valR3+", \t A4 = "+valR4); // Выводим углы в монитор }

Калибровка:

Перед началом работы с манипулятором, его нужно откалибровать!

    Калибровка заключается в указании крайних значений угла поворота для каждого сервопривода, так чтобы детали не мешали их движениям.
  • Отсоедините все сервоприводы от Trema-Power Shield, загрузите скетч и подключите питание.
  • Откройте монитор последовательного порта.
  • В мониторе будут отображаться углы поворота каждого сервопривода (в градусах).
  • Подключите первый сервопривод (управляющий вращением основания) к выводу D10.
  • Поворот ручки первого Trema-потенциометра (вывод A2) приведёт к повороту первого сервопривода (вывод D10), а в мониторе изменится значение текущего угла этого сервопривода (значение: A1 = ...). Крайние положения первого сервопривода будут лежать в диапазоне, от 10 до 170 градусов (как написано в первой строке кода loop). Этот диапазон можно изменить, заменив значения последних двух аргументов функции map() в первой строке кода loop, на новые. Например, заменив 170 на 180, Вы увеличите крайнее положение сервопривода в данном направлении. А заменив 10 на 20, Вы уменьшите другое крайнее положение того же сервопривода.
  • Если Вы заменили значения, то нужно заново загрузить скетч. Теперь сервопривод будет поворачиваться в новых, заданных Вами, пределах.
  • Подключите второй сервопривод (управляющий поворотом левого плеча) к выводу D9.
  • Поворот ручки второго Trema-потенциометра (вывод A3) приведёт к повороту второго сервопривода (вывод D9), а в мониторе изменится значение текущего угла этого сервопривода (значение: A2 = ...). Крайние положения второго сервопривода будут лежать в диапазоне, от 80 до 170 градусов (как написано во второй строке кода loop скетча). Этот диапазон изменяется так же как и для первого сервопривода.
  • Если Вы заменили значения, то нужно заново загрузить скетч.
  • Подключите третий сервопривод (управляющий поворотом правого плеча) к выводу D8. и аналогичным образом осуществите его калибровку.
  • Подключите четвертый сервопривод (управляющий захватом) к выводу D7. и аналогичным образом осуществите его калибровку.

Калибровку достаточно выполнить 1 раз, после сборки манипулятора. Внесённые Вами изменения (значения предельных углов) сохранятся в файле скетча.

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

Резать основание будем из акрила. В качестве двигателей используем сервопривода.

Общее описание проекта робота-манипулятора

В проекте использовано 6 серводвигателей. Для механической части использован акрил толщиной 2 миллиметра. В качестве штатива пригодилось основание от диско-шара (один из двигателей вмонтирован внутрь). Также использован ультразвуковой датчик расстояния и светодиод диаметром 10 мм.

Для управления роботом используется Arduino плата питания. Сам источник питания - блок питания компьютера.

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

Основные узлы для проекта манипулятора

Давайте начнем разработку. Вам понадобятся:

  • 6 серводвигателей (я использовал 2 модели mg946, 2 mg995 , 2 futuba s3003 (mg995/mg946 по характеристикам лучше, чем futuba s3003, но последние намного дешевле);
  • акрил толщиной 2 миллиметра (и небольшой кусок толщиной 4 мм);
  • ультразвуковой датчик расстояния hc-sr04 ;
  • светодиды 10 мм (цвет - на ваше усмотрение);
  • штатив (используется в качестве основания);
  • схват аллюминиевый (стоит около 10-15 долларов).

Для управления:

  • Плата Arduino Uno (в проекте использована самодельная плата, которая полностью аналогична Arduino);
  • плата питания (вам придется ее сделать самим, к этому вопросу мы вернемся позже, он требует отдельного внимания);
  • блок питания (в данном случае используется блок питания компьютера);
  • компьютер для программирования вашего манипулятора (если вы используете для программирования Arduino, значит, среда Arduino IDE)

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

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

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

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

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

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

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

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

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

Схват манипулятора

Для установки схвата вам понадобится серводвигатель и несколько винтов.

Итак, что именно необходимо сделать.

Берете качалку от сервы и укорачиваете, пока она не подойдет к вашему схвату. После этого закручиваете два маленьких винта.

После установки сервы, проворачиваете ее в крайнее левое положение и сжимаете губки схвата.

Теперь можно установить серву на 4 болта. При этом следите, чтобы двигатель был все так же в крайнем левом положении, а губки схвата закрыты.

Можно подключить сервопривод к плате Arduino и проверить работоспособность схвата.

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

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

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

Места для установки светодиодов зависят от вашего креатива и фантазии.

Электросхема

Можно использовать вместо резистора R1 потенциометр на 100 кОм для регулировки яркости вручную. В качестве сопротивлени R2 использовались резисторы на 118 Ом.

Перечень основных узлов, которые использовались:

  • R1 - резистор на 100 кОм
  • R2 - резистор на 118 Ом
  • Транзистор bc547
  • Фоторезистор
  • 7 светодиодов
  • Переключатель
  • Подключение к плате Arduino

В качестве микроконтроллера использовалась плата Arduino. В качестве питания использовался блок питания от персонального компьютера. Подключив мультиметр к красному и черному кабелям, вы увидите 5 вольт (которые используются для серводвигателей и ультразвукового датчика расстояния). Желтый и черный дадут вам 12 вольт (для Arduino). Делаем 5 коннекторов для сервомоторов, параллельно подключаем позитивные к 5 В, а негативные - к земле. Аналогично с датчиком расстояния.

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

Кроме того, на плате питания был установлен светодиод-индикатор питания. Реализуется это несложно. Дополнительно использовался резистор на 100 Ом между 5 В и землей.

10 миллиметровый светодиод на роботе тоже подключен к Arduino. Резистор на 100 Ом идет от 13 пина к к позитивной ноге светодиода. Негативный - к земле. В программе его можно отключить.

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

Повторюсь, что в качестве питания используется блок питания от персонального компьютера. Либо, конечно, вы можете приобрести отдельный источник питания. Но с учетом, того, что у нас 6 приводов, каждый из которых может потреблять около 2 А, подобный мощный блок питания обойдется недешево.

Обратите внимание, что коннекторы от серв подключаются к ШИМ-выходам Arduino. Возле каждого такого пина на плате есть условное обозначение ~. Ультразвуковой датчик расттояния можно подключить к пинам 6, 7. Светодиод - к 13 пину и земле. Это все пины, которые нам понадобятся.

Теперь мы можем перейти к программированию Arduino.

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

На схеме подключения видно, что были добавлены потенциометры для управления сервами. Потенциометры не являются обязательным звеном, но приведенный код не будет работать без них. Потенциометры можно подключить к пинам 0,1,2,3 и 4.

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

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

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

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

Программа управления и пояснения к ней

// управляются привода с помощью переменных резисторов - потенциометров.

int potpin = 0; // аналоговый пин для подключения потенциометра

int val; // переменная для считывания данных с аналогового пина

myservo1.attach(3);

myservo2.attach(5);

myservo3.attach(9);

myservo4.attach(10);

myservo5.attach(11);

pinMode(led, OUTPUT);

{ //servo 1 analog pin 0

val = analogRead(potpin); // считывает значение потенциометра (значение между 0 и 1023)

// масштабирует полученное значение для использования с сервами (получаем значение в диапазоне от 0 до 180)

myservo1.write(val); // выводит серву в позицию в соответствии с рассчитанным значением

delay(15); // ждет, пока серводвигатель выйдет в заданное положение

val = analogRead(potpin1); // серва 2 на аналоговом пине 1

val = map(val, 0, 1023, 0, 179);

myservo2.write(val);

val = analogRead(potpin2); // серва 3 на аналоговом пине 2

val = map(val, 0, 1023, 0, 179);

myservo3.write(val);

val = analogRead(potpin3); // серва 4 на аналоговом пине 3

val = map(val, 0, 1023, 0, 179);

myservo4.write(val);

val = analogRead(potpin4); //серва 5 на аналоговом пине 4

val = map(val, 0, 1023, 0, 179);

myservo5.write(val);

Скетч с использованием ультразвукового датчика расстояния

Это, наверное, одна из самых эффектных частей проекта. На манипулятор устанавливается датчик расстояния, который реагирует на препятствия вокруг.

Основные пояснения к коду представлены ниже

#define trigPin 7

Следующий кусок кода:

Мы присвоили всем 5-ти сигналам (для 6 приводов) названия (могут быть любыми)

Следующее:

Serial.begin (9600);

pinMode(trigPin, OUTPUT);

pinMode(echoPin, INPUT);

pinMode(led, OUTPUT);

myservo1.attach(3);

myservo2.attach(5);

myservo3.attach(9);

myservo4.attach(10);

myservo5.attach(11);

Мы сообщаем плате Arduino к каким пинам подключены светодиоды, серводвигатели и датчик расстояния. Изменять здесь ничего не стоит.

void position1(){

digitalWrite(led, HIGH);

myservo2.writeMicroseconds(1300);

myservo4.writeMicroseconds(800);

myservo5.writeMicroseconds(1000);

Здесь кое-что можно менять. Я задал позицию и назвал ее position1. Она будет использована в дальнейшей программе. Если вы хотите обеспечить другое движение, измените значения в скобках в диапазоне от 0 до 3000.

После этого:

void position2(){

digitalWrite(led,LOW);

myservo2.writeMicroseconds(1200);

myservo3.writeMicroseconds(1300);

myservo4.writeMicroseconds(1400);

myservo5.writeMicroseconds(2200);

Аналогично предыдущему куску, только в данном случае это position2. По такому же принципу вы можете добавлять новые положения для перемещения.

long duration, distance;

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

duration = pulseIn(echoPin, HIGH);

distance = (duration/2) / 29.1;

Теперь начинает отрабатывать основной код программы. Не стоит его изменять. Основная задача приведенных выше строк - настройка датчика расстояния.

После этого:

if (distance <= 30) {

if (distance < 10) {

myservo5.writeMicroseconds(2200); //открыть схват

myservo5.writeMicroseconds(1000); //закрыть схват

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

if(distance <=30){ // данная строка обеспечивает переход в position1, если расстояние меньше 30 см.

position1(); //по сути арм отработает все, что вы зададите между скобками { }

else{ // если расстояние больше 30 см, переход в position2

position()2 // аналогично предыдущей строке

Можно в коде поменять расстояние ну и творить все, что вы пожелаете.

Последние строки кода

if (distance > 30 || distance <= 0){

Serial.println("Out of range"); //вывод в серийном монитеоре сообщения, что мы вышли за заданный диапазон

Serial.print(distance);

Serial.println(" cm"); //расстояние в сантиметрах

delay(500); //задержка в 0.5 секунды

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

Вот, собственно и все. Наслаждайтесь, модернизируйте свои собственные манипуляторы, делитесь идеями и резутатами!

© 2024 Про уют в доме. Счетчики газа. Система отопления. Водоснабжение. Система вентиляции