Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Роботизированная рука, управляемая нунчук (с Arduino)

Компоненты и расходные материалы

Роботизированная рука с 6 степенями свободы
× 1
Нунчук
× 1
Arduino Mega 2560
× 1
Контрольный щит
× 1

Приложения и онлайн-сервисы

IDE Arduino

Об этом проекте

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

И теперь вы можете иметь более дешевую их версию у себя дома, в офисе или в лаборатории! Устали выполнять однообразную работу? Запрограммируйте собственного робота, чтобы он помог вам ... или все испортил! :D

В этом уроке я покажу вам, как установить роботизированную руку и как ее запрограммировать с помощью Arduino Mega. В этом проекте я также хотел испытать другой метод управления роботизированной рукой:с помощью Nintendo Nunchuk! Они дешевы, их легко найти, и в них есть множество датчиков.

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

Шаг 1. Инструменты и материалы

В этом проекте были использованы следующие инструменты и материалы:

Инструменты и материалы:

  • Припой и проволока. Мне пришлось припаять несколько клемм к проводам Нунчука, чтобы подключить его к Arduino;
  • Термоусадочная трубка . Некоторые куски термоусадочной трубки использовались для лучшей изоляции проводников;
  • Отвертка. Конструкция крепится с помощью нескольких болтов и гаек;
  • 6-осевой механический настольный робот-манипулятор (ссылка на сайт). Этот замечательный комплект уже состоит из нескольких компонентов, как описано ниже. Надежен и прост в сборке;
  • Блок питания 12 В (2 А и более);
  • Контроллер Nunchuk (ссылка на сайт). Он взаимодействует с платой Arduino и используется для управления роботизированной рукой;
  • "папа" перемычки (4 провода);
  • Arduino Mega (ссылка / ссылка / ссылка). Обратите внимание, что в комплект роботизированной руки, который я использовал, также входит комплект платы и контроллера, который уже идет в комплекте с этой платой Arduino. Если вы не используете один из этих наборов, вы можете использовать и другие платы Arduino;

Позже мне сообщили, что есть адаптер Nunchuk, который упрощает подключение к хлебной доске (ссылка / ссылка). Это хороший вариант, если вы хотите потратить некоторое время на пайку и не хотите разрушать исходный разъем, как описано в шаге 9.

6-осевой механический настольный кронштейн Sain Smart уже поставляется со следующими компонентами:

  • Arduino Mega 2560 R3 (ссылка)
  • Щит платы управления (ссылка)
  • Модуль беспроводного приемопередатчика NRF24L01 + (ссылка)
  • Трехосевой гироскоп MPU6050 и трехосевой акселерометр (ссылка)
  • Винт M3X8 71 x
  • Гайка 47 x M3
  • 2 U-образных кронштейна
  • 5 кронштейнов сервопривода
  • Сервопривод 4 x 9 кг (ссылка)
  • 2 сервопривода по 20 кг (ссылка)
  • 6 металлических сервоприводов.
  • 3 U-образных кронштейна
  • 21 прямоугольная скоба
  • 3 фланцевых подшипника
  • 1 захват

Вы можете найти другие комплекты роботизированных манипуляторов в Интернете или даже разработать свои собственные. Например, есть несколько классных проектов, которые можно напечатать на 3D-принтере.

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

На каждом этапе есть анимированный gif, показывающий, как была собрана моя роботизированная рука. Он работает только на настольной версии веб-сайта.

Шаг 2. Сборка роботизированной руки Pt1 - основание

Первая часть, которую нужно собрать, - это основание робота.

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

Шаг 3. Сборка роботизированной руки Pt2 - серво №1

Первый серводвигатель устанавливается перпендикулярно основанию с помощью кронштейна сервопривода. Этот профиль крепится к основанию с помощью четырех болтов и гаек M3, как показано на рисунках. Сервопривод №1 размещается сверху и крепится с помощью четырех болтов и гаек M3.

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

Шаг 4:Сборка роботизированного манипулятора Pt3 - серво №2

Другой кронштейн сервопривода устанавливается перпендикулярно предыдущему. Он соединен с рогом сервопривода №1 с помощью четырех болтов M3. Сервопривод №2 устанавливается с помощью четырех болтов и гаек M3, а также использует круглый металлический рупор.

Затем к рупору с помощью четырех болтов прикрепляется U-образный кронштейн. Обратите внимание, что вместо оси сервопривода используется болт M3. Придает устойчивость конструкции. На этот болт устанавливается подшипник, который фиксируется другой гайкой M3. Таким образом, U-образный кронштейн плотно прикреплен к центральной оси сервопривода №2.

Шаг 5:Сборка роботизированной руки Pt4 - серво №3

Другой U-образный кронштейн крепится с помощью четырех болтов и гаек M3.

На другом конце установлен сервопривод №3 с использованием круглого металлического рупора и четырех болтов. К сервомотору подсоединен кронштейн сервопривода, а L-образный профиль соединен с кронштейном сервопривода с помощью нескольких болтов и гаек.

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

Шаг 6:Сборка роботизированной руки Pt4 - серво №4

Другой U-образный кронштейн соединяется с L-образным профилем с помощью набора из четырех болтов M3 и гаек. Как и в предыдущем шаге, сервопривод № 4 монтируется к U-образному кронштейну с помощью четырех болтов. Другой кронштейн сервопривода соединен с сервоприводом.

Шаг 7. Сборка роботизированной руки Pt4 - серво №5

Пятый сервопривод соединен перпендикулярно сервоприводу №4 с помощью другого кронштейна сервопривода, установленного с помощью четырех болтов M3 и гайки.

Шаг 8:Сборка роботизированной руки Pt4 - серво №6

Затем захват подключается к оси сервопривода №5. Сверху сервопривод №6 подключен с помощью нескольких болтов, гаек и металлического рожка. Захват имеет несколько шестерен, которые превращают вращение сервопривода в линейное движение захвата.

Шаг 9:Подготовка контроллера Nunchuk

В этом проекте я решил использовать контроллер Nintendo Nunchuk по ряду причин:

  • Они дешевые! Реплики могут иметь худшее качество, но для этого проекта мне не нужен надежный контроллер;
  • Их легко найти! В сети есть несколько оригинальных и недорогих реплик.
  • У него много датчиков! Каждый контроллер имеет две кнопки (кнопки Z и C), двухосевой джойстик (X и Y) и трехосный акселерометр;
  • В нем есть библиотека Arduino. Роберт Эйзеле разработал удивительную и простую в использовании библиотеку для чтения сенсора Nunchuk. Проверьте это:https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

К сожалению, джойстики Nunchuk имеют сложный разъем, с которым трудно взаимодействовать с другой электроникой. Чтобы подключить его к Arduino, мне пришлось разрезать его кабель и обнажить провода. Таким образом, он больше не будет работать с Nintendo Wii ...:/

Сначала пришлось разрезать разъем джойстика и снять изоляцию с проводов. Используя мультиметр и основываясь на цвете каждого провода, я определил функцию каждого провода (Vcc, GND, SCL и SDA) на основе схемы разъема, показанной на рисунке. Цвет проводов не имеет стандарта. Я уже слышал о следующих возможностях:

Исходный:

  • SDA =зеленый
  • SCL =желтый
  • 3V3 =красный
  • GND =белый

Реплика №1:

  • SDA =желтый
  • SCL =белый
  • 3V3 =зеленый
  • GND =красный

Реплика № 2:

  • SDA =синий
  • SCL =белый
  • 3V3 =розовый
  • GND =зеленый

Я припаял провода к перемычке «папа», чтобы упростить подключение к плате Arduino. Для этого я использовал паяльник и термоусадочную трубку, как показано на фотографиях.

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

Шаг 10:Подключение цепей

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

Соедините компоненты следующим образом:

Нунчук:

  • Нунчук контакт 6 (SCL) => Arduino Mega Pin 21 (SCL) (на щите)
  • Вывод Nunchuk 1 (SDA) => Вывод 20 Arduino Mega (SDA) (на щите)
  • Нунчук контакт 3 (Vcc) => Ardino Mega Pin 3V3 (на щите)
  • Нунчук контакт 4 (Gnd) => Arduino Mega Pin Gnd (на щите)

Если вы используете Arduino Uno, выводы Nunchuk SCL и SDA должны быть подключены к разным выводам Arduino следующим образом:

  • Контакт Nunchuk 6 (SCL) => Контакт Arduino Uno A5
  • Вывод Nunchuk 1 (SDA) => Вывод Arduino Uno A4
  • Пин 3 Nunchuk (Vcc) => Пин 3V3 Ardino Uno
  • Контакт Nunchuk 4 (Gnd) => Контакт Arduino Uno, Gnd

Сервоприводы:

  • Клемма 11 экрана управления => Сервопривод №1
  • Клемма 12 экрана управления => Сервопривод №2
  • Клемма 13 экрана управления => Сервопривод №3
  • Клемма 8 экрана управления => Сервопривод №4
  • Клемма щита управления 9 => Сервопривод №5
  • Клемма щита управления 10 => Сервопривод №6

Если вы не используете экран управления, вам следует использовать следующую конфигурацию контактов:

  • Вывод 11 Arduino => Сервопривод №1 (Sgn)
  • Контакт 12 Arduino => Сервопривод №2 (Sgn)
  • Вывод 13 Arduino => Сервопривод №3 (Sgn)
  • Контакт 8 Arduino => Сервопривод №4 (Sgn)
  • Вывод 9 Arduino => Сервопривод 5 (Sgn)
  • Контакт 10 Arduino => Сервопривод №6 (Sgn)
  • Arduino Gnd => Земля сервоприводов
  • Источник питания 6 В => Сервоприводы Vcc

Вам также потребуется подключить внешний блок питания 12 В. Я предлагаю один с выходом более 2А. Сервоприводы потребляют много энергии, и если источник питания недостаточно мощный, сервоприводы будут вибрировать и сильно нагреваться. Они также потеряют свою силу.

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

Подключите USB-кабель к Arduino и переходите к следующему шагу.

Шаг 11:Установите Arduino IDE

Теперь, когда оборудование готово, пора поработать над кодом Arduino.

1. Загрузите и установите последнюю версию Arduino IDE Вы можете найти последнюю версию для Windows, Linux или MAC OSX на веб-сайте Arduino:https://www.arduino.cc/en/main/software

Загрузите его бесплатно, установите на свой компьютер и запустите.

2. Добавление библиотек

Для этого проекта я использовал удивительную библиотеку Nunchuk Arduino Роберта Эйзеля! Вы можете узнать об этом больше на его сайте:

https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/

Загрузите библиотеку по адресу https://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk

Перейдите в Sketch-> Включить библиотеку -> Управление библиотеками ... в вашей среде разработки Arduino для добавления библиотеки.

Как работает библиотека?

В библиотеке Nunchuk есть набор функций для чтения датчиков контроллера:

nunchuk_buttonZ () :возвращает 1, если кнопка Z нажата, или 0, если нет; nunchuk_buttonC () :возвращает 1, если кнопка C нажата, или 0, если нет; nunchuk_joystickX () :возвращает значение x джойстика (от -127 до 127); nunchuk_joystickY () :возвращает значение y джойстика (от -127 до 127); nunchuk_pitch () :возвращает угол регулятора в радианах (от -180º до 180º); nunchuk_roll () :возвращает угол крена регулятора в радианах (от -180º до 180º).

Углы возвращаются в радианах. Я преобразовал эти значения в градусы в моем коде Arduino.

Шаг 12:Код Arduino

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

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

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

Предупреждение:когда запускается код, робот-манипулятор очень быстро перемещается в исходное положение. Будьте осторожны, чтобы не получить травму и не повредить находящееся поблизости оборудование во время запуска!

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

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

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

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

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

  // Включаем библиотеки # include  #include  #include  // определяем переменные # define SERV1 8 // серво 1 на цифровом порте 8 # define SERV2 9 // серво 2 на цифровом порте 9 # определение SERV3 10 // серво 3 на цифровом порте 10 # определение SERV4 11 // серво 4 на цифровом порте 11 # определение SERV5 12 // серво 5 на цифровом порте 12 # определение SERV6 13 / / servo 6 на цифровом порту 13Servo s1; // серво 1Servo s2; // серво 2Servo s3; // сервопривод 3Servo s4; // сервопривод 4Servo s5; // серво 5Servo s6; // сервопривод 6 // определение начального угла для каждого сервопривода // выбор безопасного положения для старта // он будет пытаться мгновенно переместиться в это положение при включении! // эти углы будут зависеть от угла каждого сервопривода во время угол сборки1 =90; // текущий угол сервопривода 1int angle2 =30; // текущий угол сервопривода 2int angle3 =0; // текущий угол сервопривода 3int angle4 =90; // текущий угол сервопривода 4int angle5 =90; // текущий угол сервопривода 5int angle6 =45; // текущий угол сервопривода 6 int servo1_speed =3; // скорость сервопривода 1 servo2_speed =3; // скорость сервопривода 2 servo3_speed =3; // скорость сервопривода 3 servo4_speed =1; // скорость сервопривода 4 servo5_speed =1; // скорость сервопривода 5 // определение ограничений для каждого сервопривода // эти углы будут зависеть от угла каждого сервопривода во время сборки angle1min =0; // минимальный угол сервопривода 1int angle1max =180; // максимальный угол сервопривода 1int angle2min =0; // минимальный угол сервопривода 2int angle2max =180; // максимальный угол сервопривода 2int angle3min =0; // минимальный угол сервопривода 3int angle3max =180; // максимальный угол сервопривода 3int angle4min =0; // минимальный угол сервопривода 4int angle4max =180; // максимальный угол сервопривода 4int angle5min =0; // минимальный угол сервопривода 5int angle5max =180; // максимальный угол сервопривода 5int angle6min =0; // минимальный угол сервопривода 6int angle6max =180; // максимальный угол сервопривода 6boolean display_angles =true; // логическое значение, используемое для обновления угла каждого сервопривода на последовательном мониторе  

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

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

  // SETUPvoid ​​setup () {// прикрепляем каждый сервопривод к выводу и запускаем его позицию s1.attach (SERV1); s1.write (угол1); s2.attach (SERV2); s2.write (angle2); s3.attach (SERV3); s3.write (angle3); s4.attach (SERV4); s4.write (angle4); s5.attach (SERV5); s5.write (angle5); s6.attach (SERV6); s6.write (angle6); // запускаем последовательную связь Serial.begin (9600); // запускаем Nunchuk Wire.begin (); nunchuk_init ();}  

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

  void loop () {// считываем датчики Nunchuk if (nunchuk_read ()) {int x =nunchuk_joystickX (); // положение джойстика по оси X int y =nunchuk_joystickY (); // положение джойстика по оси Y boolean z =nunchuk_buttonZ (); // статус кнопки z boolean c =nunchuk_buttonC (); // статус кнопки c float pitch =nunchuk_pitch (); // угол тангажа float roll =nunchuk_roll (); // угол крена  

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

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

  // Поворачиваем влево / вправо (с фиксированной скоростью) // Поворачиваем налево if (x> 90) {angle1 - =servo1_speed; display_angles =true; если (угол1 <угол1мин) {угол1 =угол1мин; }} // Поворачиваем направо, если (x <-90) {angle1 + =servo1_speed; display_angles =true; если (угол1> угол1макс) {угол1 =угол1макс; }} s1.write (angle1); // обновляем положение сервопривода  

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

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

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

  // Включить акселерометр только при нажатии кнопок // Повернуть захват (нажата только кнопка Z) if (c &&! z) {roll =roll * 57.0 + 90.0; // конвертируем в градусы servo5_speed =abs (angle5 - roll) / 10 + 1; // скорость пропорциональна делает ошибку между фактическим и желаемым углом if (roll> angle5) {angle5 + =servo5_speed; display_angles =true; } if (roll  

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

  // Открыть / закрыть захват (обе кнопки нажаты) if (z &&c) {s6.write (90); // закрывающий захват display_angles =true; } еще {s6.write (45); // открытый захват}  

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

nunchuk.ino

Шаг 13:Использование

Теперь, когда все готово, включите робота и получайте удовольствие!

Нунчук используется для управления пятью движениями, показанными на рисунках:вращением вправо / влево, движением вверх / вниз, вращением захвата, движением захвата вверх / вниз и движениями открытия / закрытия захвата. Вы можете комбинировать эти движения для выполнения разных задач.

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

Код

  • nunchuk.ino
nunchuk.ino Arduino
 Нет предварительного просмотра (только загрузка). 
Github
https://github.com/infusion/Fritzing/tree/master/Wii-Nunchukhttps://github.com/infusion/Fritzing/tree/master/Wii-Nunchuk

Производственный процесс

  1. Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi
  2. Управление монетоприемником с помощью Arduino
  3. Использование Интернета вещей для удаленного управления манипулятором
  4. Радиоуправляемая машина с джойстиком
  5. Arduino с Bluetooth для управления светодиодом!
  6. Роботизированная рука, напечатанная на 3D-принтере Arduino
  7. Робот, управляемый речью
  8. Рука робота, управляемая через Ethernet
  9. Устройства с голосовым управлением Bluetooth с OK Google
  10. Простая и умная роботизированная рука с использованием Arduino