КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Подключение и управление манипулятором

Введение:

Робот-платформа «Манипулятор» - позволяет собрать манипулятор для захвата и перемещения небольших предметов. В набор входит подробная инструкция по его сборке и наладке, а также пример скетча для управления манипулятором при помощи не входящих в состав набора, одной Arduino UNO, одного Trerma-Power Shield и четырёх Trema-потенциометров.

Видео:

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

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

Схема подключения манипулятора

Питание:

У Trerma-Power Shield есть возможность выбора схемы питания установкой джампера (перемычки) на его плате в одно из двух положений: «Общ.Vin» или «Общ.5V». Манипулятор будет работать при любой схеме подключения питания:

  • Если у Вас имеется источник питания на 7 - 12 В с проводом на конце которого имеется штекер, то его нужно подключить к Arduino UNO и установить джампер в положение «Общ.Vin».
  • Если у Вас имеется источник питания на 7 - 12 В с проводом без штекера, то его нужно подключить к коннектору Trerma-Power Shield и установить джампер в положение «Общ.Vin».
  • Если у Вас имеется источник питания на 7 - 30 В с проводом без штекера, то его нужно подключить к коннектору Trerma-Power Shield и установить джампер в положение «Общ.5V».
  • Если Вы собираетесь манипулировать относительно тяжёлыми грузами, или используете более мощные сервоприводы (не из набора), то снимите джампер и подключите два источника питания (7 - 30 В к Trerma-Power Shield, а 7 - 12 В к Arduino UNO).

В приведённом выше примере подключения, используется вторая схема выбора питания: источник питания на 7 - 9 В подключён к клеммнику Trerma-Power Shield, а джампер (перемычка) установлен в положение «Общ.Vin».

Работа манипулятора:

Алгоритм программы (скетча) прост: поворот ручки Trema-потенциометра приводит в движение сервопривод.

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

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

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

#include <Servo.h>                                                       // Подключаем библиотеку 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 раз, после сборки манипулятора. Внесённые Вами изменения (значения предельных углов) сохранятся в файле скетча.

Ссылки:




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями