Управление мобильным роботом ардуино Повороты мобильного робота arduino

Мобильный робот arduino ( http://itrobo.ru/robototehnika/arduino/sborka-i-programmirovanie-mobilnogo-robo.html )

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

Принципиальная схема мобильного робота ардуино

Существует множество платформ для мобильных роботов ардуино, предлагаем начинать с двух колесной платформы. Мы соберем платформу на базе двух желтых моторов с редуктором. В наборе с платформой идет комплект креплений и подробная инструкция сборки подвижной платформы, следуя ей установите моторы на платформе.
Чтобы управлять моторами необходимо установить поверх платы ардуино специальную плату мотор шилд Motor Shield Мотор шилд это специальная плата расширения, предназначенная для управления моторами их скоростью и направлением вращения Аккуратно одеваем на плату ардуино плату мотор шилд при этом необходимо, чтобы ножки мотор шилда вошли в соответствующие порты платы ардуино, каждый порт мотор шилда вошел в порт платы ардуино. Прикрепляем провода от правого мотора в слот М1 от левого мотора в слот M2. Подсоединяем отсек с источником питания к клеммам питания мотор шилда ,необходимо правильно соблюдать полярность: плюс отсека питания к клемме + мотор шида. Минус отсека питания к клемме – мотор шилда

Программирование мобильного робота арудино

Для начала напишем простую программу для робота движения вперед. На следующем уроке мы разберем как управлять роботом программировать повороты направо, налево мобильного Arduino робота
В самом начале программы мы должны определить пины через которые мы будем управлять скоростью и направлением вращения моторов
#define SPEED_1 6 //Пин для управления скоростью первого мотора
#define DIR_1 7 //Пин для управления направлением первого мотора
#define SPEED_2 5 // Пин для управления скоростью второго мотора
#define DIR_2 4 // Пин для управления направлением второго мотора
В блоке setup необходимо установить пины отвечающие за управлением моторами в режим OUTPUT Подробнее об управлением через пины ардуино
void setup() {
Serial.begin(9600);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
В основной программе loop запрограммируем движение вперед мобильного робота ардуино.Для этого необходимо перевести пины отвечающие за направление в режим HIGH (в зависимости от подключения моторов у Вас за движение мотора вперед может быть режим LOW) Это цифорвые пины , поэтому используется команда digitalWrite(номерпина, HIGH)
digitalWrite(DIR_1,HIGH);
digitalWrite(DIR_2, HIGH);
Установим скорости моторов с помощью записи в пины отвечающие за скорость уровня скорости вращения. Это аналоговые пины, поэтому используем команду analogWrite(номерпина, скорость). Скорость может изменяться в диапазоне от 1 до 255
analogWrite(SPEED_1, 100);
analogWrite(SPEED_2,100);
И в конце установим время, сколько будет робот двигаться в таком режиме с помощью команды
delay(время в миллисекундах);
После движения необходимо остановить моторы, для этого скорость устанавливается в ноль
digitalWrite(DIR_1,HIGH);
digitalWrite(DIR_2, HIGH);
analogWrite(SPEED_1, 0);
analogWrite(SPEED_2,0);
delay(время остановки в миллисекундах);
Полная версия программы для движения мобильного робота ардуино вперед
#define SPEED_1 6 // скорость первого мотора
#define DIR_1 7 // направление первого мотора
#define DIR_2 4 // направление второго мотора
#define SPEED_2 5 // скорость второго мотора
void setup() {
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
void loop() {
analogWrite(SPEED_1, 100);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,100);
digitalWrite(DIR_2, HIGH);
delay(1000);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(10000);
}

Управление мобильным роботом ардуино Повороты мобильного робота arduino

В этой статье мы познакомимся с программированием поворотов мобильного робота ардуино.
Для поворотов напишем процедуры. Подробно о процедурах в си вы можете познакомиться в статье процедуры в си. У каждой процедуры в си есть имя и параметры. Общий вид процедуры в си
void Имя процедуры (параметры)
{
}
Мобильный робот ардуино будет совершать повороты, при которых один мотор вращается вперед другой мотор назад В качестве параметров будем передавать мощности моторов и длительность поворота в миллисекундах. Для каждого поворота напишем свою процедуру. Чтобы мотор вращался вперед необходимо на пин который отвечает за направление вращения передать значение HIGH , чтобы мотор мобильного робота ардуино вращался назад, необходимо передать значение LOW. После поворота необходимо остановить моторы, для этого мы послыаем значение 0 на пины отвечающие за скорость. Тогда процедура поворота будет выглядеть следующим образом
void vpravo(int p, int pt, int d) {
analogWrite(SPEED_1, p);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,pt);
digitalWrite(DIR_2, LOW);
delay(d);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, LOW);
delay(100);
}
Аналогично будет процедура поворота мобильного робота ардуино налево в ней лишь поменяются местами моторы, теперь правый будет двигаться вперед, левый мотор назад
void vlevo(int l, int lt, int d) {
analogWrite(SPEED_1, lt);
digitalWrite(DIR_1,LOW);
analogWrite(SPEED_2,l);
digitalWrite(DIR_2, HIGH);
delay(d);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1, LOW);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(100);
}
В процедуре движения вперед оба мотора должны двигаться вперед, значение на пины, отвечающие за направление, будет HIGH
void vpered(int s, int d) {
analogWrite(SPEED_1, s);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,s);
digitalWrite(DIR_2, HIGH);
delay(d);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(100);
}
Полезная процедура остановки в ней мы останавливаем оба мотора на заданное время, скорости обоих моторов 0.
void st(int d) {
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(d);
}
Теперь в программе можем вызывать процедуры, отвечающие за движение мобильного робота. Пример программы движение по квадрату мобильного робота. В программе предварительно определены пины, отвечающие за направление и скорость моторов, в блоке setup все пины отвечающие за управлением моторами в режим OUTPUT
#define SPEED_1 6 // скорость первого мотора
#define DIR_1 7 // направление первого мотора
#define DIR_2 4 // направление второго мотора
#define SPEED_2 5 // скорость второго мотора
void setup() {
Serial.begin(9600);
// подключение пинов для управления моторами
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
}
// процедура движения вперед
void vpered(int s, int d) {
analogWrite(SPEED_1, s);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,s);
digitalWrite(DIR_2, HIGH);
delay(d);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(100);
}
// процедура поворота направо
void vpravo(int p, int pt, int d) {
analogWrite(SPEED_1, p);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,pt);
digitalWrite(DIR_2, LOW);
delay(d);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(100);
}
// процедура поворота налево
void vlevo(int l, int lt, int d) {
analogWrite(SPEED_1, lt);
digitalWrite(DIR_1,LOW);
analogWrite(SPEED_2,l);
digitalWrite(DIR_2, HIGH);
delay(d);
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(100);
}
// процедура остановки
void st(int d) {
analogWrite(SPEED_1,0);
digitalWrite(DIR_1,HIGH);
analogWrite(SPEED_2,0);
digitalWrite(DIR_2, HIGH);
delay(d);
}
void loop() {
vlevo(60, 60, 500);
vpered (60,500);
st(1000);
}

 


Дата добавления: 2021-04-15; просмотров: 118; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!