Статья:

Изготовление передвижного робота с манипулятором

Конференция: III Студенческая международная научно-практическая конференция «Технические и математические науки. Студенческий научный форум»

Секция: Технические науки

Выходные данные
Сморкачев А.А. Изготовление передвижного робота с манипулятором // Технические и математические науки. Студенческий научный форум: электр. сб. ст. по мат. III междунар. студ. науч.-практ. конф. № 3(3). URL: https://nauchforum.ru/archive/SNF_tech/3(3).pdf (дата обращения: 26.12.2024)
Лауреаты определены. Конференция завершена
Эта статья набрала 0 голосов
Мне нравится
Дипломы
лауреатов
Сертификаты
участников
Дипломы
лауреатов
Сертификаты
участников
на печатьскачать .pdfподелиться

Изготовление передвижного робота с манипулятором

Сморкачев Алексей Александрович
студент Армавирского механико-технологического института, филиал ФГБОУ ВО Куб ГТУ, РФ, г. Армавир
Моногаров Сергей Иванович
научный руководитель, канд. техн. наук, Армавирский механико-технологический институт, РФ, г. Армавир

 

Введение

Одно из ведущих направлений современной науки является робототехника. По всей России и всему миру проводятся состязания и конкурсы роботов для студентов, школьников и просто заинтересованных в этой сфере людей. Робототехника – это прикладная наука, опирающаяся на такие дисциплины, как информатика, электроника, математика, физика и механика. Целью данной работы является создание робота с дистанционным управлением на базе платформы Arduino.

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

·     Проектирование

·     Подготовка нужных комплектующих

·     Сборка

·     Программирование

Проектирование

Основной задачей в проекте было сделать дистанционное управление роботом. Для этого разделим наш проект на две части: передатчик (пульт управления) и приемник (передвижная платформа с манипулятором). В качестве «мозгов» решено было взять платы Arduino. Для приемника Arduino MEGA, так как он обладает большим количеством выходов, как аналоговых, так и цифровых, большим объёмом памяти в чипе контроллера. А для передатчика была взята Arduino NANO. Что бы осуществить дистанционный обмен информацией между платами был взят модуль беспроводной связи NRF24L01. Для управления угла поворота сервоприводов руки манипулятора решено было взять 4 потенциометра, и преобразовывая аналоговое значение изменения сопротивления в цифровое, отправлять цифровые данные на приемник. Управление моторами платформы происходит по аналогичному принципу, только в качестве контроллера выступает модуль с джойстиком. Так как напрямую к плате Arduino подключать моторы не имеет смысла, для управления их скоростью и направлением вращения решено было взять драйвер двигателя постоянного тока L298n.

Сборка робота

Для изготовления передвижного робота с манипулятором, в качестве платформы была выбрана четырехколесная база с двигателями постоянного тока. Рука манипулятор имеет 4 сервопривода SG90. Так как сервоприводам нужно отдельное питание, то было решено использовать литий-ионную батарею 18650 на 3400 мАч. Все плюсы сервоприводов спаиваем и подключаем к плюсу батареи, а минусы сервоприводов подключаем к минусу батареи и соединяем с общим минусом. Моторы и плата Arduino MEGA были запитаны от литий-полимерного аккумулятора с напряжением 7.4В и емкостью 610 мАч.

 

Рисунок 1. Схема сборки приемника

 

Драйвер двигателя постоянного тока L298n имеет 2 входа для двигателей, поэтому на левой и правой стороне соединяем плюсы и минусы двух моторов и после этого подключаем к L298n. Так же в процессе сборки выяснилось, что крепление захвата у манипулятора сделано некачественно, и болт постоянно откручивается при вращении. Поэтому пришлось изменить конструкцию крепления и установить подшипник.

 

Рисунок 2. Передвижной робот с манипулятором

 

Сборка пульта управления (передатчика)

Так как в пульте управления используется 6 аналоговых и 5 цифровых входов, было решено использовать небольшую плату Arduino NANO. Питание джойстика и потенциометров происходит от разъёма 5V расположенного на плате. Модуль беспроводной связи NRF24L01 питается от 3.3В. Однако в результате экспериментов было выявлено, что Arduino NANO не выдает данного напряжения на выходе 3.3V, и из-за этого передача информации происходит нестабильно. Для решения данной проблемы был куплен адаптер nrf24l01, который преобразовывает напряжение 5В в 3.3В, и затем подключим его к общему проводу питания для потенциометров. Питание всей этой схемы происходит от литий-полимерного аккумулятора с напряжением 7.4В и емкостью 610 мАч, плюс которого мы припаяли к двухпозиционному переключателю, для включения и выключения пульта. Подключение управляющих входов указано на рисунке 3.

 

Рисунок 3. Схема сборки передатчика

 

Для удобства использования пульта управления, он был помещен в пластиковый контейнер. При этом вывел наружу все потенциометры, джойстик и двухпозиционный переключатель, а все провода, платы и батарею оставили внутри.

 

Рисунок 4. Пульт дистанционного управления

 

Программирование передатчика

Язык программирования устройств Ардуино основан на C/C++. Он прост в освоении, и на данный момент Arduino — это, пожалуй, самый удобный способ программирования устройств на микроконтроллерах.

Рассмотрим программный код, загруженный на плату, т.к. это важная составляющая данного проекта:

#include <SPI.h>

#include "RF24.h"

RF24 radio(9,10);

const uint64_t pipe = 0xF0F0F0F000LL; int msg[3];

int pot_1 = A5; int mas_1; int pot_2 = A6; int mas_2; int pot_3 = A7; int mas_3;

int pot_4 = A4; int mas_4; int pot_5 = A3; int mas_5; int pot_6 = A2; int mas_6;

void setup(void) { radio.begin(); // запуск радио

radio.openWritingPipe(pipe); // открываем трубу на передачу

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX

radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS }

void loop() {mas_1 = analogRead(potpin_1),mas_1 = map(mas_1, 0, 1023, 0, 21),msg[0] = mas_1,radio.write(msg, 1); //Считываем аналоговое значение и переделываем в цифру

mas_4 = analogRead(potpin_4),mas_4 = map(mas_4, 0, 1023, 22, 43),msg[0] = mas_4,radio.write(msg, 1); //отправляем данные и указываем сколько байт пакет

mas_5 = analogRead(potpin_5),mas_5 = map(mas_5, 0, 1023, 44, 65),msg[0] = mas_5,radio.write(msg, 1);

mas_6 = analogRead(potpin_6),mas_6 = map(mas_6, 0, 1023, 66, 87),msg[0] = mas_6,radio.write(msg, 1);

mas_2 = analogRead(potpin_2),mas_2 = map(mas_2, 0, 1023, 128, 192),msg[0] = mas_2,radio.write(msg, 1); //джосйтик

mas_3 = analogRead(potpin_3),mas_3 = map(mas_3, 0, 1023, 193, 255),msg[0] = mas_3,radio.write(msg, 1); //джосйтик }

В данном коде каждый потенциометр и оси джойстика имеют свой цифровой диапазон. В зависимости от того, какие именно цифровые данные мы отправляем, должен поворачиваться определенный сервопривод.

Программирование приемника

Рассмотрим программный код, загруженный на плату приемника:

#include <servo.h>

#include <SPI.h>

#include "RF24.h"

Servo serprv1; Servo serprv2; Servo serprv3; Servo serprv4;//Имена Сервоприводов

RF24 radio(40,42); // Подключаем NRF24 к pin 40,42

const uint64_t pipe = 0xF0F0F0F000LL;

int msg[3]; //Переменная управления

int data; int data1; int pos;

int fspeed; int bspeed; int fspeed1; int bspeed1; // переменные управления скорости

const int in1 = 14; const int in2 = 15; const int in3 = 6; const int in4 = 5;

const int ena = 4; // PWM pin изменение скорости

const int enb = 7; // PWM pin изменение скорости

void setup() { pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(ena, OUTPUT); pinMode(in3, OUTPUT); pinMode(in4, OUTPUT); pinMode(enb, OUTPUT); // connection to L298n

serprv1.attach(8); serprv2.attach(9); serprv3.attach(10); serprv4.attach(11); // подключение сервоприводов к цифровым пинам 8,9,10,11 соответственно.

radio.begin(); //активировать модуль

radio.openReadingPipe(1,pipe); //хотим слушать трубу

radio.startListening(); //начинаем слушать эфир, мы приёмный модуль

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика. На выбор RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX

radio.setDataRate (RF24_250KBPS); //скорость обмена. На выбор RF24_2MBPS, RF24_1MBPS, RF24_250KBPS }

void loop() { if (radio.available())radio.read(msg, 1); // проверяем что пришло в буфер // if (msg[0] <21 && msg[0] >-1)data = msg[0], pos = map(data, 0, 21, 10, 170),serprv1.write(pos); //Если мы получаем данные от 0 до 21(что соответствует первому потенциометру), то поворачивается первый сервопривод

 if (msg[0] <43 && msg[0] >22)data = msg[0], pos = map(data, 22, 43, 10, 170),serprv2.write(pos); if (msg[0] <65 && msg[0] >44)data = msg[0], pos = map(data, 44, 65, 10, 170),serprv3.write(pos); if (msg[0] <87 && msg[0] >66)data = msg[0], pos = map(data, 66, 87, 10, 170),serprv4.write(pos); if (msg[0] >=128 && msg[0] <=156)data = msg[0], bspeed = map(data, 192, 164, -255, 255), backward(bspeed); //джосйтик

 if (msg[0] >=164 && msg[0] <=192)data = msg[0], fspeed = map(data, 156, 128, -255, 255), forward(fspeed); //джосйтик

 if (msg[0] >157 && msg[0] <163)data = msg[0], stop(); if (msg[0] >=193 && msg[0] <=221)data1 = msg[0], bspeed1 = map(data1, 255, 227, -255, 255), backward1(bspeed1); //джосйтик

if (msg[0] >=227 && msg[0] <=255)data1 = msg[0], fspeed1 = map(data1, 193, 221, -255, 255), forward1(fspeed1); //джосйтик }

void stop() { analogWrite(ena, 0); digitalWrite(in1, LOW); digitalWrite(in2, LOW); analogWrite(enb, 0); digitalWrite(in3, LOW); digitalWrite(in4, LOW); }

void forward(int fspeed) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, bspeed); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, bspeed); }

void backward(int bspeed) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, fspeed); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, fspeed); }

void forward1(int fspeed1) { digitalWrite(in1, HIGH); digitalWrite(in2, LOW); analogWrite(ena, fspeed1); digitalWrite(in3, LOW); digitalWrite(in4, HIGH); analogWrite(enb, fspeed1); }

void backward1(int bspeed1) { digitalWrite(in1, LOW); digitalWrite(in2, HIGH); analogWrite(ena, bspeed1); digitalWrite(in3, HIGH); digitalWrite(in4, LOW); analogWrite(enb, bspeed1); }

Заключение

Собранный робот-манипулятор на дистанционном управлении может передвигаться по различным типам поверхности. А также может поднимать и перевозить небольшие предметы. Для предотвращения выскальзывания из руки манипулятора, в дальнейшем предполагается наклейка шероховатой поверхности.

 

Список литературы:
1. «Обзор и анализ готовых платформ для создания роботов»// Международная студенческая научная конференция [Электронный ресурс]. – URL: http://www.scienceforum.ru/2018/15/5644
2. Интернет форум, посвященный Arduino [Электронный ресурс]. – URL: http://arduino.ru/Reference 
3. "Программирование микроконтроллерных плат Arduino\Freduino "/ У.Соммер // Санкт- Петербург. "БХВ-Петербург" 2017