Суббота, 07 июля 2018 13:13

Манипулятор рука на Arduino.

Оцените материал
(4 голосов)

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

И теперь у Вас есть возможность собрать дешёвую версию в вашем собственном доме, офисе или лаборатории! Устали делать повторяющуюся работу? Программируйте свой манипулятор, чтобы манипулятор решал за Вас эти задачи….

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

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

 

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

F2KBKAAJD4UIL3TLARGE
FKD2C9QJD4UILHSLARGE
FF9KFYKJD4UIL4CLARGE
FTMPY2XJD4UIL49LARGE
F7YTNRSJD4UIL3ZLARGE

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

  • Припой и проволока. Нам пришлось припаять несколько контактов к проводам контроллера, чтобы подключить их к 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.

Готовый набор манипулятор уже поставляется со следующими компонентами:

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

 

Шаг 2. Сборка Манипулятора ч.1 - Основание

FU26JBYJDF2GEFU.ANIMATED.LARGE

FDDR88NJDF2GANULARGE
FJDXGLTJDF2GAL9LARGE

Первая часть, которую мы соберём, будет – основа робота.

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

 

Шаг 3. Сборка Манипулятора ч.2 – Сервопривод #1

F05FA52JDF2GHGS.ANIMATED.LARGE

F8FZBYJJDF2HC38.ANIMATED.LARGE

FGG1LS9JDF2GANVLARGE
FXX2USEJDF2GARKLARGE
F8P8H89JDF2GAT1LARGE

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

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

 

Шаг 4. Сборка Манипулятора ч.3 – Сервопривод #2

F3NU92LJDF2HFL2.ANIMATED.LARGE

FUSGFDCJDF2HHCG.ANIMATED.LARGE

F1OUAYFJDF2GAUILARGE
F2S94XSJDF2GAVZLARGE
FMO8IM2JDF2GB0DLARGE
FEJRI99JDF2GAYWLARGE
FSDLCYQJDKKD7KELARGE

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

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

 

Шаг 5. Сборка Манипулятора ч.4 – Сервопривод #3

FTAJZU0JDF2HEYP.ANIMATED.LARGE

FIVWEG6JDKKE20F.ANIMATED.LARGE

FUDDM7AJDF2GD6ZLARGE
F61ENUJJDF2GD76LARGE
FI1M315JDKKD67WLARGE
FAK81CLJDKKD65YLARGE

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

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

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

 

Шаг 6. Сборка Манипулятора ч.5 – Сервопривод #4

FWPBN74JDKKDDAM.LARGE

FPTHQ6HJDKKD692LARGE
FVYTJ5FJDKKE6RXLARGE

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

 

Шаг 7. Сборка Манипулятора ч.6 – Сервопривод #5

FIV8N6XJDKKDAF6.ANIMATED.LARGE

F29CKY3JDKKD69QLARGE
FLJOJY2JDKKE6TSLARGE

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

 

Шаг 8. Сборка Манипулятора ч.7 – Сервопривод #6

FYFXGUDJDKKDAI1.ANIMATED.LARGE

F5EOUMLJDKKD6DXLARGE
FRVFQ5RJDKKD6MZLARGE

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

 

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

FGFEI1OJDKKD6ZOLARGE
FU731ZKJDKKD76OLARGE
FG8NRV6JDKKKYCMLARGE
F5U6DJVJDKKD776LARGE
F1I18AQJDKKD78ULARGE

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

  1. Они дешевые! Реплики могут иметь низкое качество, но нам не нужен надежный контроллер для этого проекта;
  2. Их легко найти! В Интернете есть несколько оригинальных и недорогих реплик.
  3. В нем много датчиков! Каждый контроллер имеет две кнопки (кнопки Z и C), двухосный джойстик (X и Y) и трехосный акселерометр;
  4. Для него есть библиотека на 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. Схема подключения

FSTNSW9JDKKOE3WLARGE
FJ86TQ9JDKKLQ5KLARGE
FQW7WDOJDKKLQ9OLARGE

Как только Вы соберёте манипулятор, и подготовите разъем 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

FZQXW7BJ8QGFW94.LARGE

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

  1. Скачайте и установите новую версию Arduino IDE

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

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

Для этого проекта я использовал потрясающую библиотеку 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

FZQXW7BJ8QGFW94LARGE
FAMMALKJDKKLR8PLARGE
FNK1C8LJDKKLR8SLARGE
FPPWE45JDKKLR8ULARGE
F5DZE9HJDKKLR8VLARGE
F43ZR7XJDKKLR8WLARGE

Загрузите скетч файл 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 фактический угол каждого сервомотора. Может быть полезно выбрать начальный угол каждого двигателя.

nunchuk.ino

 

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

 FY7K561JDKKLPM3.ANIMATED.LARGEFF96NDRJDKKLQXH.ANIMATEDF2PPKNLJDKKLPK9.ANIMATED.LARGEF4EKLJFJDKKLPKR.ANIMATED.LARGEFW43Y30JDKKLPL7.ANIMATED.LARGE

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

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

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

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

 

Источник

Author

Bender

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

Комментарии (0)

There are no comments posted here yet

Оставьте свой комментарий

  1. Posting comment as a guest. Sign up or login to your account.
Вложения (0 / 3)
Share Your Location

О нас

Основой деятельностью портала является показ и объяснение что представляет собой выражени "Робот", "Робототехника", "Законы робототехники", "Мехатроника", "Искусственный интеллект(ИИ)". 

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