Управление мобильным роботом ардуино
Управление мобильным роботом ардуино Повороты мобильного робота 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);
}
Вернуться к содержанию Следующая тема Движение робота ардуино по черной линии
Полезно почитать по теме мобильные роботы arduino
Сборка мобильного робота arduino
Правильное питание мобильного робота arduino
Поделиться:
Нет комментариев. Ваш будет первым!