Рука манипулятор — это потрясающее устройство! Во всем мире их используют заводы, они красят, припаивают и перемещают вещи. Их также можно увидеть в космических исследованиях, подводных машинах и даже в медицинских целях!
И теперь у Вас есть возможность собрать дешёвую версию в вашем собственном доме, офисе или лаборатории! Устали делать повторяющуюся работу? Программируйте свой манипулятор, чтобы манипулятор решал за Вас эти задачи….
В этом уроке мы покажем Вам, как собрать роботизированную руку и как ее запрограммировать с помощью Arduino Mega. Для этого проекта мы также испытаем другой метод управления манипулятором: используя контроллеры - Nintendo Nunchuk! Они дешевы, легкие в поиске и имеют множество датчиков.
Существует несколько способов использования этого урока. Если у вас нет набора для манипулятора (и Вы не хотите его покупать или создавать), Вы все равно можете прочитать урок, чтобы узнать что-то о программировании Arduino и о том, как связать контроллер Wii Nunchuk с Вашими собственными проектами. Урок так же поможет, в практике навыков сборки электроники.
Шаг 1. Инструменты и материалы
В этом проекте Вам понадобятся следующие инструменты и материалы:
- Припой и проволока. Нам пришлось припаять несколько контактов к проводам контроллера, чтобы подключить их к Arduino;
- Термоусадочная трубка. Термоусадочная трубка использовались для лучшей изоляции проводников;
- Отвертка. Конструкция собирается с использованием болтов и гаек;
- 6-осевая механическая настольная роботизированная рука https://www.sainsmart.com/collections/robotics-cnc/products/6-axis-mechanical-desktop-robotic-arm Этот комплект уже поставляется с несколькими компонентами, (имеется бесплатная доставка по миру при стоимости более 50$);
- Источник питания 12 В (2А и более) - DC12V AC100-240V ;
- Контроллер Nunchuk ( Nunchuk ). Он взаимодействует с платой Arduino и используется для управления манипулятором;
- Перемычки Папа (4 провода);
- Arduino Mega (Ссылка ).Обратите внимание, что комплект манипулятора, который я предлагал выше, имеет комплект, которая уже поставляется с платой Arduino. Если вы не используете этот наборы, вы можете использовать другие платы Arduino;
Информируем, что есть адаптер для контроллера Nunchuk, который упрощает подключение к плате ( WiiChuck Nunchuck Adapter shield Module Board For Arduino) Это хороший вариант, если Вы хотите подключить контроллер и не хотите разрушать оригинальный разъем, как описано на шаге 9.
Готовый набор манипулятор уже поставляется со следующими компонентами:
- Arduino Mega 2560 R3 – 7,25$
- 1 шт. - Arduino Mega 2560 R3 – 7,25$
- 1 шт. - Robotics Control Shield for Arduino Mega 2560 R3 – 11.99$
- 1 шт. - NRF24L01+ Модуль беспроводного приемопередатчика – 1.99$
- 1 шт. - MPU6050 3-осевой гироскоп и 3-осевой акселерометр - 0.99$
- 71 шт. - Винты M3 X 8 – 2.79$ 47 шт. - Гайки M3
- 14 шт. - Механические части корпуса манипулятора – 56.86$
- 4 шт. - Сервопривод 9 кг – 12.99$
- 2 шт. - Сервопривод 20 кг – 12.99$
На следующих 7 этапах мы покажем Вам как собрать комплект перед подключением электроники. Если у Вас нет подобного набора, не расстраиваетесь. Вы можете использовать другой комплект манипулятора, собрать его и сразу перейти к электронике и шагам по программированию
Шаг 2. Сборка Манипулятора ч.1 - Основание
Первая часть, которую мы соберём, будет – основа робота.
Основа выполнена из двух U-образных кронштейнов, соединенных спина к спине, для соединения используйте четыре болта M3 и гайки, как показано на рисунках. Это самая простая часть монтажа.
Шаг 3. Сборка Манипулятора ч.2 – Сервопривод #1
Первый серводвигатель монтируется перпендикулярно основанию с помощью сервопривода. Этот профиль крепится к основанию с помощью четырех болтов и гаек M3, как показано на рисунках. Серво № 1 находится на вершине и крепится с помощью четырех болтов и гаек M3.
К оси сервопривода прикреплен круговой металлический рожок. В комплект входят несколько пластиковых площадок. Они не будут использоваться для сборки робота.
Шаг 4. Сборка Манипулятора ч.3 – Сервопривод #2
Другой кронштейн сервопривода установлен перпендикулярно предыдущему. Он подключен к Серводвигателю №1 с использованием четырех болтов M3. Серво № 2 установлен с четырьмя болтами и гайками M3, а также используется круглый металлический рожок.
Затем кронштейн U крепится с помощью четырех болтов. Обратите внимание, что болт M3 используется опорой оси сервопривода. Это дает стабильность структуре. Подшипник подходит для этого болта, для фиксирования на месте, используйте другую гайку M3. Таким образом, кронштейн U плотно прикреплен к центральной оси сервопривода № 2.
Шаг 5. Сборка Манипулятора ч.4 – Сервопривод #3
Другой U-образный кронштейн монтируется с использованием четырех болтов M3 и гаек.
На другом конце установлен сервопривод №3 с использованием круглого металлического рожка и четырех болтов. Сервопривод подключен к сервомотору, а профили L-образной формы соединены с кронштейном сервопривода с помощью нескольких болтов и гаек.
Обратите внимание, что другой подшипник используется к оси сервопривода, как описано выше.
Шаг 6. Сборка Манипулятора ч.5 – Сервопривод #4
Другой U-образный кронштейн соединен с профилем L-образной формы с помощью набора из четырех болтов M3 и гаек. Как и в предыдущем шаге, сервомеханизм № 4 монтируется к кронштейну U с использованием четырех болтов. К сервоусилителю подключен другой кронштейн.
Шаг 7. Сборка Манипулятора ч.6 – Сервопривод #5
Пятый сервопривод подключается перпендикулярно сервоусилителю №4 с помощью другого кронштейна сервопривода, установленного с использованием четырех болтов М3 и гайки.
Шаг 8. Сборка Манипулятора ч.7 – Сервопривод #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 = blue
- SCL = white
- 3V3 = pink
- GND = green
Мы припаяли провода к перемычке (папа), чтобы легче было подключиться к плате Arduino. Для этого использовали паяльник и термоусадочную трубку, как показано на рисунках.
Позднее нам сообщили, что есть адаптер Nunchuk, который упрощает подключение к плате ( WiiChuck Nunchuck Adapter shield Module Board For Arduino). Это хороший вариант, если Вы хотите, сэкономить время на пайке и не хотите разрушать оригинальный разъем.
Шаг 10. Схема подключения
Как только Вы соберёте манипулятор, и подготовите разъем Nunchuk, Вы будете готовы что бы собрать электросхему. Мы использовали щит платы управления, который был в комплекте вместе с комплектом манипулятора. Это упрощает подключение компонентов, поскольку в нем уже имеются специальные разъемы для сервомоторов, источника питания и т. д.
Подключите компоненты следующим образом:
Контроллер:
- Контроллер контакт 6 (SCL) => Arduino Mega Контакт 21 (SCL) (на плате)
- Контроллер контакт 1 (SDA) => Arduino Mega Контакт 20 (SDA) (на плате)
- Контроллер контакт 3 (Vcc) => Ardino Mega Контакт 3V3 (на плате)
- Контроллер контакт 4 (Gnd) => Arduino Mega Контакт Gnd (на плате)
Если вы используете Arduino Uno, контакты Nunchuk SCL и SDA должны быть подключены к контактам Arduino следующим образом:
- Контроллер контакт 6 (SCL) => Arduino Uno контакт A5
- Контроллер контакт 1 (SDA) => Arduino Uno контакт A4
- Контроллер контакт 3 (Vcc) => Ardino Uno контакт 3V3
- Контроллер контакт 4 (Gnd) => Arduino Uno контакт Gnd
Сервопривод:
- Контакт Платы управления 11 => Сервопривод № 1
- Контакт Платы управления 12 => Сервопривод №2
- Контакт Платы управления 13 => Сервопривод № 3
- Контакт Платы управления 8 => Сервопривод № 4
- Контакт Платы управления 9 => Сервопривод №5
- Контакт Платы управления 10 => Сервопривод №6
Если вы не используете плату управления, Вы должны использовать следующую конфигурацию контактов:
- Arduino Контакт 11 => Серво #1 (Sgn)
- Arduino Контакт 12 => Серво #2 (Sgn)
- Arduino Контакт 13 => Серво #3 (Sgn)
- Arduino Контакт 8 => Серво #4 (Sgn)
- Arduino Контакт 9 => Серво #5 (Sgn)
- Arduino Контакт 10 => Серво #6 (Sgn)
- Arduino Контакт Gnd => Серво Gnd
- 6В Контакт питания => Серво Vcc
Вам также необходимо подключить внешний источник питания 12 В. Мы предлогаем использовать один блок с выходом более 2A. Сервоприводы потребляют много энергии, и если блок питания недостаточно мощный, сервоприводы будут вибрировать и перегреваться. Они также потеряют свою мощность.
Не подключайте источник питания до тех пор, пока Вы не загрузите код Arduino (см. Дальнейшие шаги). На плате есть кнопка питания. Держите её в выключенном положении.
Подключите USB-кабель к Arduino и перейдите к следующему шагу.
Шаг 11 Настройка Arduino IDE
Теперь, когда оборудование готово, пришло время поработать над кодом Arduino.
- Скачайте и установите новую версию Arduino IDE
Вы можете найти последнюю версию для Windows, Linux или MAC OSX на веб-сайте Arduino: https://www.arduino.cc/en/main/software
- Добавление библиотек
Для этого проекта я использовал потрясающую библиотеку Nunchuk Arduino Роберта Эйзеля! Подробнее Вы можете узнать на его сайте:
https://www.xarg.org/2016/12/using-a-wii-nunchuk-with-arduino/
Скачайте библиотеку - https://github.com/robotoss/Nunchuk
Перейдите в Sketch-> Include Library -> Manage Libraries... на вашей Arduino IDE для добавления библиотеки.
Перейдите в Скетч-> Подключить Библиотеку -> Добавить Библиотеку... на вашей Arduino IDE для добавления библиотеки.
Как работает библиотека?
В библиотеке 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-порту вашего компьютера и загрузите код. Загрузка кода занимает время, Вам нужно проявить терпение.
После полной загрузки, отсоедините USB-кабель, подключите источник питания к Arduino и включите кнопку питания. Код начнет работать моментально.
Предупреждение: При запуске кода, манипулятор быстро переместится в исходное положение. Будьте осторожны, чтобы не пораниться или повредить оборудование во время запуска!
Вам, возможно, придется заменить начальный угол каждого серводвигателя в зависимости от того, как Ваши сервоприводы монтируются.
Объяснение кода:
Перед установкой кода импортируте библиотеки, используемые в эскизе (nunchuk.h, wire.h и servo.h).
Далее определяются используемые контакты и объявляются глобальные переменные. Целочисленные переменные angle# (угла) сохраняют начальную позицию для каждого сервопривода. Если Вы хотите, чтобы Ваш робот начал работать в другой позиции, измените значения этих переменных.
Переменные servo # _speed определяют скорость движения каждого сервопривода. Если вы хотите, чтобы определенный сервопривод двигался быстрее, увеличьте его значение. Угол # min и угол # max используются для ограничения максимального и минимального угла для каждого сервопривода. Вы можете установить эти переменные, чтобы избежать коллизий между последовательными суставами робота.
//Include libraries
#include
#include
#include
//define variables
#define SERV1 8 //servo 1 on digital port 8
#define SERV2 9 //servo 2 on digital port 9
#define SERV3 10 //servo 3 on digital port 10
#define SERV4 11 //servo 4 on digital port 11
#define SERV5 12 //servo 5 on digital port 12
#define SERV6 13 //servo 6 on digital port 13
Servo s1; //servo 1
Servo s2; //servo 2
Servo s3; //servo 3
Servo s4; //servo 4
Servo s5; //servo 5
Servo s6; //servo 6
//define starting angle for each servo
//choose a safe position to start from
//it will try to move instantaniously to that position when powered up!
//those angles will depend on the angle of each servo during the assemble
int angle1 = 90; //servo 1 current angle
int angle2 = 30; //servo 2 current angle
int angle3 = 0; //servo 3 current angle
int angle4 = 90; //servo 4 current angle
int angle5 = 90; //servo 5 current angle
int angle6 = 45; //servo 6 current angle
int servo1_speed = 3; //servo 1 speed
int servo2_speed = 3; //servo 2 speed
int servo3_speed = 3; //servo 3 speed
int servo4_speed = 1; //servo 4 speed
int servo5_speed = 1; //servo 5 speed
//define restrictions for each servo
//those angles will depend on the angle of each servo during the assemble
int angle1min = 0; //servo 1 minimum angle
int angle1max = 180; //servo 1 maximum angle
int angle2min = 0; //servo 2 minimum angle
int angle2max = 180; //servo 2 maximum angle
int angle3min = 0; //servo 3 minimum angle
int angle3max = 180; //servo 3 maximum angle
int angle4min = 0; //servo 4 minimum angle
int angle4max = 180; //servo 4 maximum angle
int angle5min = 0; //servo 5 minimum angle
int angle5max = 180; //servo 5 maximum angle
int angle6min = 0; //servo 6 minimum angle
int angle6max = 180; //servo 6 maximum angle
boolean display_angles = true; //boolean used to update the angle of each servo on Serial Monitor
Во время настройки каждый сервопривод подключается к определенному выводу, и его положение запускается.
Здесь также запускается последовательная связь (с последовательным монитором) и связь I2C с Nunchuck.
//SETUP
void setup() {
//attach each servo to a pin and start its position
s1.attach(SERV1);
s1.write(angle1);
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);
//start serial communication
Serial.begin(9600);
//start Nunchuk
Wire.begin();
nunchuk_init();
}
Основной цикл повторяется снова и снова. Статус Nunchuk читается в каждом цикле. В зависимости от показаний выполняются разные команды.
void loop() {
//read Nunchuk sensors
if (nunchuk_read()) {
int x = nunchuk_joystickX(); //joystick X position
int y = nunchuk_joystickY(); //joystick Y position
boolean z = nunchuk_buttonZ(); //z button status
boolean c = nunchuk_buttonC(); //c button status
float pitch = nunchuk_pitch(); //pitch angle
float roll = nunchuk_roll(); //roll angle
Джойстик X будет использоваться для перемещения серво #1.
Был использован следующий блок кода. Сначала он проверяет, достаточно ли значение джойстика. Таким образом, шум и небольшие вариации не учитываются. Если значение соответствует требованиям, угол сервомашины будет увеличен / уменьшен с заданной скоростью.
//Turn left/right (at a fixed speed)
//Turn left
if (x > 90) {
angle1 -= servo1_speed;
display_angles = true;
if (angle1 < angle1min) {
angle1 = angle1min;
}
}
//Turn right
if (x < -90) {
angle1 += servo1_speed;
display_angles = true;
if (angle1 > angle1max) {
angle1 = angle1max;
}
}
s1.write(angle1); //update servo position
Аналогичный блок используется для джойстика Y. Он используется для изменения угла Серво #3. Серво #2 сохраняется в этом коде.
Вращение захвата задается углы рулона и тангажа контроллера, измеренные его акселерометром. Чтобы облегчить управление рукой, угол захвата обновляется только при нажатии кнопок C или Z.
Когда нажимается только кнопка C, код считывает угол поворота и использует его как заданное значение. Серво #5 вращается до достижения заданного значения. Это скорость пропорциональна ошибке между фактическим и желаемым положением. Аналогичный код используется для сервоуправления №4, который отслеживает угол наклона контроллера.
// Enable accelerometer only when the buttons are pressed
// Rotate gripper (only Z button pressed)
if (c && !z) {
roll = roll * 57.0 + 90.0; //convert do degrees
servo5_speed = abs(angle5 - roll)/10 + 1; //speed proportional do the error between actual and desired angle
if (roll > angle5) {
angle5 += servo5_speed;
display_angles = true;
}
if (roll < angle5) {
angle5 -=servo5_speed;
display_angles = true;
}
s5.write(angle5); //update servo position
}
Захват закрывается всякий раз, когда нажимаются кнопки C и Z. Когда какая-либо из этих кнопок будет не нажата, манипулятор откроет захват.
//Open/close gripper (both buttons pressed)
if(z && c) {
s6.write(90); //close gripper
display_angles = true;
}
else {
s6.write(45); //open gripper
}
К концу эскиза есть блок кода. Он отобразит на Serial Monitor фактический угол каждого сервомотора. Может быть полезно выбрать начальный угол каждого двигателя.
Шаг 13. Использование
Загрузите скетч файл Arduino.
Теперь, когда все готово, запустите манипулятор и получайте удовольствие!
Nunchuk используется для управления пятью движениями, показанными на рисунках: вращение вправо / влево, движение вверх / вниз, вращение захвата, захват вверх / вниз и захват / открытие. Вы можете комбинировать эти движения для выполнения различных задач.
Вы можете изменить код для разных движений на основе комбинации кнопок и углов джойстика.