Занятие 12 Драйверы двигателей, управление роботами
.docКурс «Основы робототехники». Занятие 12 Подключение моторов робота через драйвер двигателя на микросхеме L298N
Довольно часто возникает ситуация, когда нужно управлять не только скоростью, но и направлением вращения двигателя. В этом случае используется схема, называемая H-мост, на четырех транзисторах или реле. Такую схему можно самостоятельно собрать из транзисторов, но есть уже готовые микросхемы, содержащие ее, в частности, L298N, на которой собран используемый в роботах модуль.
Приведена схема для управления одним мотором:
Моторы подключаются к двум клеммникам справа и слева модуля
На контакт +12 В (+UП) подключается напряжение питания моторов (в роботах туда подключены аккумуляторы)
Контакт Gnd подключается к Gnd источника питания и Gnd Arduino
Модуль имеет четыре управляющих входа In1, In2, In3, In4. Каждая пара управляет своим мотором:
При подаче сигнала HIGH (логической 1) на вход In1 мотор М1 движется в одном направлении, при подаче HIGH на In2 мотор вращается в другом направлении:
In1 |
In2 |
Результат |
0 |
0 |
Мотор 1 не вращается |
1 |
0 |
Мотор 1 вращается в одну сторону |
0 |
1 |
Мотор 1 вращается в другую сторону |
1 |
1 |
Мотор 1 в режиме торможения, лучше избегать такого состояния |
Аналогично управляется мотор M2 через контакты In3 и In4
Таким образом, можно составить следующую таблицу управляющих сигналов для движений робота:
In1 |
In2 |
In3 |
In4 |
Результат |
0 |
0 |
0 |
0 |
Робот стоит на месте |
1 |
0 |
1 |
0 |
Робот едет вперед |
0 |
1 |
0 |
1 |
Робот едет назад |
1 |
0 |
0 |
1 |
Робот разворачивается на месте в одну сторону |
0 |
1 |
0 |
1 |
Робот разворачивается на месте в другую сторону |
Данные сигналы можно подавать командами digitalWrite или, если нужно управлять скоростью, analogWrite
Роботы клуба на сделанной клубом печатной плате имеют следующую нумерацию контактов:
Контакт |
Цифровой пин Arduino |
In1 |
6 |
In2 |
9 |
In3 |
10 |
In4 |
11 |
Примечание: нумерация может быть другой, в этом случае достаточно просто подать по очереди на каждый пин высокий уровень (например, используя программу Blink, меняя там номер пина), чтобы определить, какой пин каким колесом и направлением управляет
Практическое занятие 1. Управление одним колесом робота
Примечание: если на драйвер двигателя подано питание (кнопка на роботе нажата, светодиода горят даже без подключения к USB компьютера) работу с ним проводить только при наличии приподнятых колес или на полу, чтобы предотвратить падение со стола
-
Подключение Arduino Nano к компьютеру осуществляется маленьким разъемом USB. Переключите в среде Arduino тип контроллера: Сервис / Плата / Arduino Nano
-
Откройте программу Файл / Примеры / Basic / Blink
-
Исправьте номер пина int led = 13; на пин, соответствующий управляющему контакту In1: int In1 = 6;. Соответственно, замените переменную led везде в программе на переменную In1
-
Загрузите программу в робота, поставьте его на пол и нажмите кнопку включения. Колесо должно крутиться одну секунду, затем останавливаться, снова крутиться и т.д.
Примечание: иногда контакты робота могут не соответствовать приведенной выше таблице. Чтобы установить соответствие, можно в данной программе попробовать различные номера контактов (In1=9, In1=10, In1=11) и посмотреть, как движутся колеса
Практическое занятие 2. Робот едет вперед
-
Добавьте в программу еще один контакт – In3, который включает езду второго колеса вперед. Добавьте к включению первого включение и второго мотора:
digitalWrite(In1, HIGH);
digitalWrite(In3, HIGH);
и, соответственно, выключение:
digitalWrite(In1, LOW);
digitalWrite(In3, LOW);
-
Загрузите программу в робота, поставьте его на пол и нажмите кнопку включения. Робот должен поехать вперед, остановиться, снова поехать вперед и т.д.
Практическое занятие 3. Робот едет вперед и назад
-
Добавьте в программу еще два контакта – In2 и In4. Напишите программу для реализации следующего алгоритма работы (см. таблицу управляющих сигналов):
-
Робот едет вперед 1 секунду
-
Ожидание 1 секунда
-
Робот едет назад 1 секунду
-
Ожидание 1 секунда
Загрузите программу в робота, поставьте его на пол и нажмите кнопку включения. Продемонстрируйте результат преподавателю
Практическое занятие 3. Робот едет по заданной траектории
-
Напишите программу, реализующую следующий алгоритм:
-
Робот едет вперед 1 секунду
-
Ожидание 0,5 секунды
-
Робот поворачивается на месте 0,5 секунды
-
Ожидание 0,5 секунды
-
Загрузите программу в робота, поставьте его на пол и нажмите кнопку включения. Продемонстрируйте результат преподавателю
Практическое занятие 4. Произвольные движения
Придумайте и напишите программу движений для робота (например, танец, езда по кругу, езда по спирали и т.д.)
Практическое занятие 5. Движение по линии
-
Напишем программу для движения робота по черной линии на белом фоне. Программа использует код из примера AnalogInOutSerial для опроса аналогового датчика и вывода результата в Монитор порта и код из примера Button для управления моторами. Программа приведена в приложении
-
Возможно, скорость робота получилась слишком большой и с линии он съезжает. Для снижения скорости нужно провести следующую замену:
digitalWrite(In1, HIGH); → analogWrite(In1, 150); digitalWrite(In3, HIGH); → analogWrite(In3, 150); digitalWrite(In1, LOW); → analogWrite(In1, 0); digitalWrite(In3, LOW); → analogWrite(In3, 0); |
В данному случае число в analogWrite – скорость вращения мотора робота, от 0 (мотор стоит) до 255 (максимальная скорость, такая же выдается при команде digitalWrite HIGH). Скорость 150 дана для примера, подбирается оптимум между скоростью и точностью, чтобы с одной стороны, робот не съезжал с линии, с другой стороны, проходил ее как можно быстрее
Для повышения скорости и точности используют различные программные приемы (например, включение двух моторов с разной скоростью, торможение на поворотах) и увеличение количества датчиков для более точного слежения за линией (2-4 датчика)
Практическое занятие 6. Робот, следующий за ладонью
-
Откройте программу, написанную на занятии 9, практическом занятии 7 «Робот, следующий за ладонью»
-
Измените номера пинов светодиодов на номера контактов In1 и In3 (запускающих движение робота вперед)
-
Измените контакты ультразвукового датчика расстояния на контакты платы робота: Echo – 2, Trig – 3
-
Загрузите программу в робота и убедитесь, что она работает
Домашнее задание:
1. Написать или скачать какую-нибудь интересную программу для робота, на следующем занятии загрузить в робота и продемонстрировать
2. Начать готовиться к соревнованиям движения по линии (один или два аналоговых датчика освещенности на роботе, черная линия). Искать или писать более совершенную программу. Состязание будет проведено на занятии 15