Иван Иванов   21 января в 02:29

Создаем руку робота и контроллер-манипулятор

В этом небольшом уроке для начинающих мы создадим устройство-контроллер и руку робота для разных целей.

Что хотим получить

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

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

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

Комплектующие

Ниже перечислим комплектующие, используемые в проекте:

  • 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.

На этом всё.