Набор предназначен для самостоятельной сборки манипулятора на 2 степени свободы с механическим захватом. Первая степень отвечает за наклон захвата, вторая непосредственно отвечает за работу захвата. С помощью захвата можно перемещать различные предметы. Максимальная рабочая ширина захвата 55 мм. Манипулятор может быть установлен на шасси робота.
Манипулятор приводится в движение с помощью сервоприводов. Всего в данном манипуляторе их используется 2. Чем мощнее сервоприводы, тем больший груз сможет переместить манипулятор. Например, при использовании сервоприводов с крутящим моментом около 10 кг⋅см - грузоподъемность захвата будет около 300 грамм. Мы специально не стали добавлять сервоприводы в данный набор, чтобы каждый смог подобрать их под свои индивидуальные требования.
Для работы с манипулятором подойдут сервоприводы стандартного типоразмера 54х20 мм с 4 посадочными отверстиями 50х10 мм. К таковым относятся MG995, MG996R, S3003, DS04-NFC 360, TD8120 и многие другие. Подбор сервоприводов должен осуществляться на основе необходимых требований к грузоподъемности, причем чем больше рабочее плечо, тем мощнее должен быть сервопривод. Например, для работы захвата может быть использован менее мощный сервопривод, а для его наклона потребуется наоборот более мощный, поскольку рабочее плечо уже будет больше.
Максимальная длина манипулятора составляет 21 см.
Манипулятор выполнен из сплава алюминия с нанесенным защитным покрытием. Общий вес манипулятора без сервоприводов составляет 140 г.
Набор для сборки манипулятора выполнен в формате конструктора, все его детали можно комбинировать друг с другом в различном порядке и последовательности, отличном от стандартной конструкции. Вы сможете добавить дополнительные новые элементы или наоборот убрать ненужные.
Обратите внимание, что при использовании мощных сервоприводов потребуется внешнее питание - подключать все сервоприводы напрямую к контроллеру небезопасно. Требуемая мощность источника тока определяется на основе выбранных вами сервоприводов.
Для управления манипулятором можно использовать любой контроллер, в том числе и Arduino. Для удобства работы с Arduino Uno и Arduino Mega используйте модуль джойстика - с его помощью можно управлять манипулятором вручную. Также вы можете задать программно определенный алгоритм работы манипулятора без ручного управления.
Описание: В примере управление сервоприводами манипулятора производится с помощью модуля джойстика. Каждое изменение положения джойстика, влияет на поворот сервопривода.
Для примера понадобится:
Что нужно | Количество |
---|---|
Контроллер | 1 |
Sensor shield | 1 |
Манипулятор 2 DOF | 1 |
Сервопривод TD8120MG | 2 |
#include <Servo.h> // подключение библиотеки для работы с сервоприводом
#define SERVOS_COUNT 2 // количество сервоприводов
Servo myservos[SERVOS_COUNT]; // создание объектов для работы с сервоприводами
int servos_pins[SERVOS_COUNT] = {6, 5}; // выводы подключения сервоприводов
int joy_pins[SERVOS_COUNT] = {A0, A1}; // выводы подключения джойстика
void setup() {
for (byte i = 0; i < SERVOS_COUNT; i++) { // цикл по количеству сервоприводов
myservos[i].attach(servos_pins[i], 500, 2500); // подключение и инициализация сервоприводов
}
}
void loop() {
for (byte i = 0; i < SERVOS_COUNT; i++) { // в цикле:
int ang = analogRead(joy_pins[i]); // получить текущее значение от джойстика
ang = map(ang, 0, 1024, 0, 180); // ограничить значение от 0 до 180
myservos[i].write(ang); // повернуть сервопривод на полученное значение
}
}
Минусом данного варианта управления джойстиком является то, что когда джойстик возвращается «домой», сервопривод повторяет его движение. Таким образом невозможно зафиксировать положение манипулятора. Исправить эту особенность мы постараемся в примере №2.
Описание: В примере управление сервоприводами манипулятора производится с помощью модуля джойстика. Каждое изменение положения джойстика, влияет на поворот сервопривода, но при этом одно сервопривод фиксируется в определённом положении. Каждое движение джойстика, поворачивает сервопривод на ту или иную позицию.
Для примера понадобится:
Что нужно | Количество |
---|---|
Контроллер | 1 |
Sensor shield | 1 |
Манипулятор 2 DOF | 1 |
Сервопривод TD8120MG | 2 |
#include <Servo.h> // подключение библиотеки для работы с сервоприводом
#define SERVOS_COUNT 2 // количество сервоприводов
Servo myservos[SERVOS_COUNT]; // создание объектов для работы с сервоприводами
int servos_pins[SERVOS_COUNT] = {6, 5}; // выводы подключения сервоприводов
int joy_pins[SERVOS_COUNT] = {A0, A1}; // выводы подключения джойстика
int angs[SERVOS_COUNT] = {90, 90}; // хранение текущих углов поворота
void setup() {
Serial.begin(9600); // инициализация сериал порта для вывода отладочной информации
for (byte i = 0; i < SERVOS_COUNT; i++) { // в цикле
myservos[i].attach(servos_pins[i], 500, 2500); // подключение сервопривода
}
}
void loop() {
for (byte i = 0; i < SERVOS_COUNT; i++) { // в цикле (по количеству сервоприводов)
int x = analogRead(joy_pins[i]); // получение текущей позиции джойстика
int new_ang = angs[i]; // чтение текущего угла поворота сервопривода
if (x < 100) { // если значение джойстика меньше 100
new_ang += 1; // увеличить угол на 1 градус
} else if (x > 924) { // если значение джойстика больше 924
new_ang -= 1; // уменьшить угол на 1 градус
} else { // иначе
continue; // считается что джойстик не двигался
}
if (i == 0) { // если это первый сервопривод (сам захват)
new_ang = constrain(new_ang, 80, 145); // то ограничить угол между 80 и 145 градусами
} else { // иначе
new_ang = constrain(new_ang, 0, 180); // ограничить между 0 и 180
}
if (new_ang != angs[i]) { // если новый угол отличается от старого
angs[i] = new_ang; // зафиксировать новое значение
Serial.print("New ang joy #"); // вывести отладочную информацию
Serial.print(i); // вывести отладочную информацию
Serial.print(" is "); // вывести отладочную информацию
Serial.println(new_ang); // вывести отладочную информацию
myservos[i].write(new_ang); // повернуть сервопривод на новый угол
}
}
}