Движение робота вперед-назад и осуществление поворотов
В качестве моторов для движения робота используются два двухпроводных мотора 393, установленные на левой и правой частях платформы соответственно. Подключение и управление ими осуществляется напрямую от аппаратной платформы, без использования внешних драйверов мотора. Для подключения моторов к аппаратной платформе необходимо соединить кабель правого мотора с клеммой М2, а левого с клеммой М1 аппаратной платформы с соблюдением полярности.
К каждой клемме подключено два порта с поддержкой ШИМ (PWM).
Направление вращения каждого мотора управляется подачей на один порт высокого уровня (HIGH), и на второй порт низкого уровня (LOW). Например, чтобы левый мотор начал вращаться, можно запрограммировать следующие команды:
digitalWrite (motorM1PinOne, LOW);
digitalWrite (motorM1PinTwo, HIGH);
А чтобы левый мотор начал вращаться в обратную сторону, потребуется поменять уровни на соответствующих портах следующими командами:
digitalWrite (motorM1PinOne, HIGH);
digitalWrite (motorM1PinTwo, LOW);
Обратите внимание, что в данном примере мы не управляем плавно мощностью двигателей, а даем команды мотору вращаться в нужном направлении на максимально возможной мощности.
Применим эти команды для управления движением робота Clawbot вперед-назад и влево-вправо по таймингу, т.е. задав направление движения робота и время для выполнения маневра.
Загрузите в контроллер из Arduino IDE следующий скеч:
//указываем пины, отвечающие за управление портом М1
const int motorM1PinOne = 6;
const int motorM1PinOne = 7;
//указываем пины, отвечающие за управление портом М2
const int motorM2PinOne = 6;
const int motorM2PinOne = 7;
void setup() {
//конфигурируем пины порта М1 на вывод сигнала
pinMode(motorM1PinOne, OUTPUT);
pinMode(motorM1PinTwo, OUTPUT);
//конфигурируем пины порта М2 на вывод сигнала
pinMode(motorM2PinOne, OUTPUT);
pinMode(motorM2PinTwo, OUTPUT);
//едем вперед в течение 2х секунд
Forvard ();
Delay(2000);
//поворот направо
Right ();
Delay(1000);
//поворот налево
Left();
Delay(1000);
//едем назад в течение 2 секунд
Reverse();
Delay(2000);
//останавливаемся
stopMove();
}
Void loop(){
}
Void forvard(){
//правый мотор
digitalWrite (motorM2PinOne, LOW);
digitalWrite (motorM2PinOne, HIGH);
//левый мотор
digitalWrite (motorM1PinOne, LOW);
digitalWrite (motorM1PinOne, HIGH);
}
Void right () {
//правый мотор
digitalWrite (motorM2PinOne, HIGH);
digitalWrite (motorM2PinOne, LOW);
//левый мотор
digitalWrite (motorM1PinOne, LOW);
digitalWrite (motorM1PinOne, HIGH);
}
Void left () {
//правй мотор
digitalWrite (motorM2PinOne, LOW);
digitalWrite (motorM2PinOne, HIGH);
//левый мотор
digitalWrite (motorM1PinOne, HIGH);
digitalWrite (motorM1PinOne, LOW);
}
Void reverse () {
//правый мотор
digitalWrite (motorM2PinOne, HIGH);
digitalWrite (motorM2PinOne, LOW);
//левый мотор
digitalWrite (motorM1PinOne, HIGH);
digitalWrite (motorM1PinOne, LOW);
}
Void stopMove () {
//правый мотор
digitalWrite (motorM2PinOne, LOW);
digitalWrite (motorM2PinOne, LOW);
//левый мотор
digitalWrite (motorM1PinOne, LOW);
digitalWrite (motorM1PinOne, LOW);
После загрузки на плату робот:
- Начнет движение вперед и будет двигаться в этом направлении в течение 2 секунд,
- Затем начнет двигаться сначала по часовой стрелке,
- Затем против часовой стрелки,
- После чего поедет назад и остановится.
В будущем для выполнения поворотов на определенный угол необходимо будет изменять значение времени, в течение которого робот двигается по часовой или против часовой стрелки, например:
//поворот направо
Right ();
Delay(1000); - в этом месте надо указать необходимое время движения в миллисекундах
Такое действие необходимо, поскольку в данном примере не используются энкодеры.
Дата: 2023-01-17   Автор: Админ   Просмотров: 679
Контакты
Если у Вас есть вопросы, мы с удовольствием на них ответим.
Адрес:
Мурманская область, г.Полярный ул. Красный Горн, д.16
Почта:
zatocdod@mail.ru
Телефон:
+7 (815-51) 7-59-64