Программирование ARDUINO

КВАНТОЛАБ г. Полярный



Движение робота вперед-назад и осуществление поворотов

В качестве моторов для движения робота используются два двухпроводных мотора 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);

После загрузки на плату робот:

  1. Начнет движение вперед и будет двигаться в этом направлении в течение 2 секунд,
  2. Затем начнет двигаться сначала по часовой стрелке,
  3. Затем против часовой стрелки,
  4. После чего поедет назад и остановится.

В будущем для выполнения поворотов на определенный угол необходимо будет изменять значение времени, в течение которого робот двигается по часовой или против часовой стрелки, например:

//поворот направо

Right ();

Delay(1000); - в этом месте надо указать необходимое время движения в миллисекундах

Такое действие необходимо, поскольку в данном примере не используются энкодеры.



Дата: 2023-01-17   Автор: Админ   Просмотров: 679





Контакты

Если у Вас есть вопросы, мы с удовольствием на них ответим.

Адрес:

Мурманская область, г.Полярный ул. Красный Горн, д.16

Телефон:

+7 (815-51) 7-59-64