В этом небольшом уроке для начинающих мы создадим устройство-контроллер и руку робота для разных целей.
Что хотим получить
Мы в этом скромном уроке мы сделаем контроллер, который будет зеркально управлять рукой робота. Такие полезные технические решения могут применяться в различных областях и несут в себе огромную пользу.
Часто подобными устройствами пользуются, например, военные при разминировании различных взрывных устройств.
Также, вполне возможно, что такого рода проекты могут дать толчек в развитии обучения искусственного интеллекта, когда робот обучается на основе действий человека, а после может сам повторять и применять полученные навыки.
Комплектующие
Ниже перечислим комплектующие, используемые в проекте:
- Arduino UNO
- Сервоприводы MG995
- Сервоприводы DS3115
- Поворотные потенциометры, 10 кОм
Программное обеспечение:
Рука робота использует три обычных сервопривода ШИМ, а каждый угол управляется переменным резистором. Два серводвигателя DS3115 используются в вертикальном направлении, а сервопривод MG995 используется при вращении.
Схема соединения
Соединяем все комплектующие согласно схеме ниже.
Делаем руку робота
Мы делаем корпус контроллера на 3D-принтере. Скачать файлы .stl можно в архиве ниже:
Предусмотрены отверстие и позиционирующее отверстие для завинчивания ручки поворотного потенциометра, а также выемка для вставки ручки.
Соберите вместе изготовленные детали и три поворотных потенциометра.
Поворотный потенциометр теперь расположен в том же направлении, что и ось вращения серводвигателя манипулятора робота.
Код Ардуино
Этот простой код ниже просто считывает значение вращающегося потенциометра с помощью аналогового пина, преобразует его в угол и передает на соответствующий сервопривод.
#include <Servo.h> Servo myservo1, myservo2, myservo3; float th1=90.0,th2=90.0,th3=90.0; float val1, val2, val3; void setup() { Serial.begin(9600); myservo1.attach(9, 500, 2420); // MG995 myservo2.attach(10, 820, 2140); // DS3115 myservo3.attach(11, 820, 2140); // DS3115 set_servo(); } void loop() { val1 = analogRead(A1); val2 = analogRead(A2); val3 = analogRead(A3); th1 = map(val1, 170.0, 880.0, 0.0, 180.0); if(th1 >= 180.0){ th1 = 180.0; }else if(th1 <= 0.0){ th1 = 0.0; } th2 = map(val2, 150.0, 860.0, 0.0, 180.0); if(th2 >= 180.0){ th2 = 180.0; }else if(th2 <= 0.0){ th2 = 0.0; } th3 = map(val3, 860.0, 160.0, 0.0, 180.0); if(th3 >= 180.0){ th3 = 180.0; }else if(th3 <= 45.0){ th3 = 45.0; } set_servo(); } void set_servo(){ myservo1.write(th1); myservo2.write(th2); myservo3.write(th3); }
В завершение подключите поворотный потенциометр и подключите всё к Arduino.
На этом всё.