Управление мобильным роботом ардуино Повороты мобильного робота 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);
}

 






















































































































Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: