Технология. 9 класс. Авторский коллектив: Е. С. Глозман, Е. Н. Кулакова, Ю. Л. Хотунцев, О. А. Кожина, И. В. Воронин, В. В. Воронина, А. Е. Глозман




§ 56. Плата контроллера R-5, Arduino Nano. Управляем моторами



Итак, установка контроллера R-5, оборудованного Arduino Nano, на платформу с колёсами завершена. Можно провести серию экспериментов по программному управлению роботизированной платформой теперь уже под управлением Arduino Nano. Подумайте, какие команды из тех, что нам известны, должны быть включены в скетч.



Для начала стоит научить машинку просто ездить. Познакомимся с программным управлением для самых простых движений: вперёд-назад и повороты.

Напомним, что программа для контроллера Arduino обычно состоит из трёх частей:

• в первой части, как в обычной математической задаче, описываются исходные данные. Мы присваиваем названия, назначение, функционал контактов контроллера. Записываем, какие библиотеки мы будем использовать в ходе выполнения программы; 

• во второй части с названием Setup пишем уже непосредственно код программы. Но этот код исполняется только один раз за время работы программы. Это необходимо для того, чтобы запрограммировать выходы, входы контроллера на всё время действия программы;

• третья часть программы loop представляет собой команды, которые исполняются процессором в течение всего периода работы.

В первой части кода следует определить, какими контактами платы Arduino вы будете управлять драйвером и соответственно электромоторами, придумать такие название команд, чтобы было понятно их назначение. В блоке R-5 контакты Arduino жёстко подключены к входам драйвера.

• Цифровые и аналоговые контакты платы Arduino Nano выведены на соответствующие разъёмы J2, J3.

• Цифровые контакты D2, D3, D4, D5 с контроллера идут на разъём J8. В разъёме J8 джамперами выходы контроллера подключаются или к разъёму J2, или к драйверу электромоторов.

• Если блок управления R-5 используется для управления роботом, то джамперы необходимо установить в нижнее положение, чтобы выходы Arduino соединились со входами драйвера.

• Если блок R-5 используется для других экспериментов, то джамперы необходимо установить в верхнее положение.

• Когда вы подключаете мотор и даёте команду на вращение мотора, то, чтобы закрутить его в другую сторону, вам, скорее всего, придётся изменить полярность подключения. Помните, у батареек есть плюс и минус? А вот для управления скоростью вращения мотора, как правило, используется широтно-импульсная модуляция (ШИМ).

Давайте посмотрим на рисунок 9.35:

M_R_IN — вход драйвера, управляющий направлением вращения правого электромотора. Высокий уровень (HlGHT) — вращение вперёд;

M_R_EN — вход драйвера, разрешающий вращение правого электромотора. Высокий уровень (HlGHT) разрешает вращение. При подаче на вход сигнала с широтноимпульсной модуляцией вход управляет скоростью вращения;

M_L_IN — вход драйвера, управляющий направлением вращения левого электромотора. Высокий уровень (HIGHT) — вращение вперёд;

M_L_EN — вход драйвера, разрешающий вращение левого электромотора. Высокий уровень (HIGHT) разрешает вращение. При подаче на вход сигнала с широтно-импульсной модуляцией (ШИМ, PWM) вход управляет скоростью вращения.

То есть для того чтобы мы могли управлять моторами робота, необходимо соединить джамперами средние и нижние контакты разъёма J8.

В итоге получается следующее:

контакт Arduino 2 (D2) — направление вращения правого мотора; контакт Arduino 3 (D3) — разрешение вращения правого мотора. При работе ШИМ — регулировка скорости вращения;

контакт Arduino 4 (D4) — направление вращения левого мотора;

контакт Arduino 5 (D5) — разрешение вращения левого мотора. При работе ШИМ — регулировка скорости вращения.

Код управления моторами будет выглядеть следующим образом:

#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); // Драйвер управляется выходными сигналами с Arduino.

//Поэтому мы определяем все контакты как 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);

delay(1000); //останов 1 с



Практическая работа № 44

«Модификация программы движения робота»

Цель работы: проанализировать программу движения робота, подключить платформу к компьютеру, задать роботу программу движения.

Оборудование и материалы: компьютер, блок R-5, плата Arduino, SmartCar.

Порядок выполнения работы

1. Скопируйте текст программы и вставьте его в Arduino IDE. После копирования обязательно проверьте, чтобы комментарии в каждой строке начинались с двух символов //.

2. Загрузите код в контроллер.

3. Включите питание робота.

4. Определите, как должен двигаться робот в соответствии с заданной программой.

5. Сделайте вывод о соответствии движения робота заданной программе.




Полезная информация

• Широтно-импульсная модуляция (ШИМ, PWM) — это способ задания аналогового сигнала цифровым методом, т. е. из цифрового выхода, дающего только нули и единицы, получить плавно меняющиеся величины.

• Проиллюстрировать это можно на примере тяжёлого маховика, который вращается двигателем. Причём двигатель то включается, то выключается. Если включить двигатель, то маховик раскрутится до максимального значения и так и будет крутиться. Если выключить, то он остановится за счёт сил трения.

• А вот если двигатель включать на 10 с каждую минуту, то маховик раскрутится, но далеко не на полную скорость — большая инерция сгладит рывки от включающегося двигателя, а сопротивление от трения не даст ему крутиться бесконечно долго. Чем больше продолжительность включения двигателя в минуту, тем быстрее будет крутиться маховик.

• При ШИМ мы подаём на выход сигнал, состоящий из высоких и низких уровней (применительно к нашей аналогии — включаем и выключаем двигатель), т. е. единиц и нулей. А затем это всё суммируется. Таким образом, если на выходе сплошные единицы, то на выходе будет напряжение высокого уровня, если нули — то ноль.




Основные понятия и термины:

широтно-импульсная модуляция (ШИМ, PWM).



Вопросы и задания:


1. Их каких базовых частей состоит программа для Arduino?

2. Перечислите назначение входов драйвера электромотора.

3. Если на левый и правый моторы подать низкий уровень сигнала и дать разрешение ему вращаться, платформа поедет вперёд, назад или останется на месте?

4. Для чего используется ШИМ?


Задание 1


Измените программу, чтобы платформа начала движение назад. Для этого на левый и правый моторы подайте низкий уровень сигнала и дайте разрешение вращаться.


Задание 2


Измените первоначальную программу, запрограммировав поворот направо.

Указание. Для того чтобы повернуть направо, нужно вращать вперёд правое колесо, а левое можно не вращать или вообще задать для него вращение в обратную сторону.

Откалибровать угол поворота можно, меняя время задержки команды delay.


Задание 3


Задайте роботу программу: в течение 1 с ехать вперёд, затем на 1 с остановиться и двигаться назад 1 с. Так как команда loop исполняется постоянно, то робот будет выполнять эти команды, пока включено питание.


Задание 4


Используя фрагменты полученных кодов, составьте программу движения по сложной траектории. Траекторию задайте самостоятельно.




Наверх