Движение робота вперед-назад
Перед тем, как начать работу с датчиками попробуем просто научить нашего робота двигаться.
Первый эксперимент проведем с простой программой. Попеременное движение робота вперед и назад.
В гнезда блока управления R-5 устанавливается контроллер Arduino nano. Поэтому и в настройках среды разработки Arduino IDE необходимо выбрать именно этот контроллер с процессором ATmega328.
Так же надо не забыть в среде Arduino IDE выбрать СОМ порт.
Теперь уже приступаем непосредственно к программированию.
Программа для контроллера Ардуино обычно состоит из 3-х частей.
В первой части, как в обычной математической задаче описываются исходные данные. Мы присваиваем названия, назначение, функционал контактов контроллера. Записываем, какие библиотеки мы будем использовать в ходе выполнения программы.
Во второй части с названием Setup пишем уже непосредственно код программы. Но этот код исполняется только один раз за время работы программы. Это необходимо для того, что бы запрограммировать выходы, входы контроллера на все время действия программы
И третья часть программы loop представляет собой команды, которые исполняются процессором в течение всего периода работы процессора.
Рассмотрим простой пример кода для движения робота.
В первой части кода мы определяем, какими контактами платы Ардуино мы будем управлять драйвером и соответственно электромоторами, придумаем название команд, что бы нам было понятно их назначение.
В блоке R-5 контакты Ардуино для управления электоромоторами жестко подключены к входам драйвера.
Давайте посмотрим на рисунок ниже:
Назначение входов драйвера электромоторов.
M_R_IN – вход драйвера, управляющий направлением вращения правого электромотора. Высокий уровень (HIGHT) – вращение вперед.
M_R_EN – вход драйвера, разрешающий вращение правого электромотора. Высокий уровень (HIGHT) разрешает вращение. При подаче на вход сигнала с широтно-импульсной модуляцией (ШИМ, PWM) вход управляет скоростью вращения.
M_L_IN – вход драйвера, управляющий направлением вращения левого электромотора. Высокий уровень (HIGHT) – вращение вперед.
M_L_EN – вход драйвера, разрешающий вращение левого электромотора. Высокий уровень (HIGHT) разрешает вращение. При подаче на вход сигнала с широтно-импульсной модуляцией (ШИМ, PWM) вход управляет скоростью вращения.
И у нас получается следующее:
Контакт Ардуино 2 – направление вращения правого мотора
Контакт Арудино 3 – разрешение вращения правого мотора. При работе ШИМ – регулировка скорости вращения.
Контакт Ардуино 4 – направление вращения левого мотора.
Контакт Ардуино 5 – разрешение вращения левого мотора. При работе ШИМ – регулировка скорости вращения.
Напишем код.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#define DIR_R 2 // управлять направлением вращения правого мотора будем с контакта 2
#define SPEED_R 3 // управлять разрешением вращения и скоростью вращения правого //мотора будем с контакта 3
#define DIR_L 4 //управлять направлением вращения левого мотора будем с контакта 4
#define SPEED_L 5 // управлять разрешением вращения и скоростью вращения левого //мотора будем с контакта 5
//В этой части кода больше не будем задавать ни каких параметров
// приступаем ко второй части программы. Мы знаем, что в этой части кода команды //исполняются только один раз
void setup()
{
pinMode (DIR_R, OUTPUT); // Драйвер управляется выходными сигналами с Ардуино.
//Поэтому мы определяем все контакты , как OUTPUT
pinMode (SPEED_R, OUTPUT);
pinMode (DIR_L, OUTPUT);
pinMode (SPEED_L, OUTPUT);
}
// И в третьей части кода мы уже пишем алгоритм работы. Т.е. то, что наш робот долженвыполнять
void loop()
{
digitalWrite (DIR_R, HIGH); // Команда digitalWrite устанавливает на контакте 2 высокий
//уровень. Для драйвера моторов это означает то, что мотор будет вращаться вперед
digitalWrite (SPEED_R, HIGH); // высокий уровень на контакте 3 разрешает драйверу
//вращать электромотор
digitalWrite (DIR_L, HIGH);
digitalWrite (SPEED_L, HIGH);
delay(1000); // Вращаем 1 сек
digitalWrite (DIR_R, HIGH);
digitalWrite (SPEED_R, LOW); // Низкий уровень запрещает вращение моторов
digitalWrite (DIR_L, HIGH);
digitalWrite (SPEED_L, LOW);
|
Скопируйте текст программы и вставьте его в Arduino IDE.
После копирования обязательно проверьте, что бы комментарии в каждой строчке начинались с двух символов //.
После проверки загрузите код в контроллер. Установите плату Ардуино нано в блок R-5 и включите питание робота.
Наш робот, исполняя написанный выше скетч, должен в течение одной секунды ехать вперед, затем на секунду остановиться и начать движение назад. И так как команда
loop исполняется постоянно, то робот будет выполнять эти команды пока включено питание.