Муниципальное бюджетное учреждение
дополнительного образования «Станция юных техников»
города Каменск-Шахтинский
Принята на методическом совете
Протокол №______ от «___» _________ 20___г
Уроки программирования на Arduino
Часть 2
Методическая разработка
(Для учащихся 1 года обучения робототехнических объединений учреждений дополнительного образования)
Автор: Барышев Е. В.
педагог дополнительного образования.
2022
Содержание
| 1. | Пояснительная записка. | 3 |
| 2. | Основная часть. | 4 |
| | Урок 6. Управление двигателем. | 6 |
| 3. | Заключение. | 11 |
| 4. | Источники информации. | 12 |
1. Пояснительная записка
Данная методическая разработка является продолжением изучению начальных навыков программирования платформ Arduino и предназначена для изучения учащимися 1 года обучения. Содержание методической разработки, продолжает изучать описания платформ Arduino, содержит описание синтаксиса наиболее общих элементов языка и иллюстрирует их использование в примерах и фрагментах кода с пояснениями.
Методическая разработка является 2 частью приложения к образовательной программе «Робототехника», рассчитана на учащихся 12 – 13 лет и направлена на достижение следующих целей и задач:
Образовательные:
• ознакомить учащихся с описанием структуры программы языка программирования;
• научить учащихся подключать различное периферийное оборудование к платформе Arduino.
Развивающие:
• развитие интереса и склонностей в области программирования;
• развитие навыков при работе в открытой среде программирования Arduino IDE.
Воспитывающие:
• воспитание всестороннего интереса к технике, творческого отношения к труду;
• воспитание чувства взаимоуважения между кружковцами.
Для освоения руководства уроков по программирования и изучения открытой среды программирования Arduino IDE предлагается следующая методика изучения:
• повторение знаний физических основ электричества в рамках школьного курса по физике;
• использование персонального компьютера;
• самостоятельно собирать электрические схемы на макетной плате;
• применение команд управления исполнительными устройствами и считывания информации с датчиков, подключенных к контроллеру.
Сохраняя общую направленность материала, определяемую предлагаемой методической разработкой, преподаватель, должен иметь свой авторский демонстрационный материал (готовые проекты, фото и видео материал). Учащийся может использовать данную методическую разработку как шаблон, для создания своей научно - исследовательской работы в области программирования платформ Arduino.
Arduino — небольшая плата с собственным процессором и памятью, которая плотно взаимодействует с окружающей средой. Это отличает данный «микрокомпьютер» от персональных компьютеров, которые не выходят за рамки виртуальности. Кроме того, Arduino может работать автономно или взаимодействовать с компьютером.
На плате Arduino есть десятки контактов, к которым можно подключать всевозможные компоненты: светодиоды, датчики, моторы и платы расширения. В процессор можно загрузить программу для Ардуино (ее называют скетч), которая будет принимать показания датчиков и управлять всеми устройствами по заданному алгоритму.
2. Основная часть
На занятиях рассмотрим, силовую электронику для Arduino, как подключить электродвигатель, реле, сервопривод. Разберем сборку электрических схем с помощью макетной платы. И соберем простую схему управления двигателем на Arduino, чтобы понять, как программировать микропроцессор на плате Ардуино через компьютер.
Для уроков нам понадобиться следующий комплект модулей и радиодеталей (рисунки 1 и 2).
Рисунок 1.
Рисунок 2.
Урок 6. Управление двигателем
На уроке подключим к Arduino заводской модуль L293D, который очень широко представлен в робототехнике. Микросхема включает в себя сразу два драйвера для управления слаботочными моторами. Для дальнейшего удобства условно обозначим их как правый борт и левый борт.
Ниже приведена схема микросхемы L293D (рисунок 3).
Рисунок 3.
Несомненным плюсом данной микросхемы является раздельное питание логической части микросхемы, напряжение питания которой лежит в приделах 4.5-5 вольт (Vcc 1), и силовой части питания двигателей (Vcc 2).
Используя данную микросхему, мы можем управлять двигателями с довольно широким диапазоном питающего напряжения от 4.5 до 36 вольт, но при этом, L293D может выдать всего лишь 600mА продолжительного тока нагрузки на каждый канал. Пиковый (максимальный) ток может кратковременно подскочить до 1.2A.
Так же из положительных сторон данной микросхемы следует отметить её непривередливость к напряжению входных сигналов подаваемых на выводы INPUT.
Логический "0" распознается микросхемой, когда входное напряжение
Логическая "1" появляется при входном напряжении, лежащем в пределах от 2.3 до 7Вольт.
Вывод ENABLE1 это главная фигура в управлении левым каналом, без лога единицы на его выводе (или ШИМ, об этом чуть позже) ничего работать не будет, вне зависимости от того что творится на выводах INPUT1 и INPUT2.
Выводы INPUT1 и INPUT2 задают направление вращения мотора. Их можно сравнить с рулем машины, тем более что в данном случае сравнение подходит идеально, ведь мы не можем повернуть руль сразу в две стороны, а необходимо выбирать одну из двух. Из вышесказанного следует, что для поворота нам надо подать логическую единицу на вывод INPUT1, а на INPUT2 подать логический ноль. Для смены направления поменять местами INPUT1 "0", INPUT2 "1".
Контакты GND соединяются с отрицательным полюсом источника питания (земля).
Оставшиеся выводы OUTPUT1 и OUTPUT2 служат непосредственно для подключения мотора. Правый канал работает абсолютно идентично.
Рассмотрим самый простой вариант подключения L293D (рисунок 4). Скорость вращения при таком варианте двигателя нерегулируемая, вывод ENABLE1 подключен напрямую к +5V. Питание мотора также берется от стабилизатора, установленного на Arduino.
Рисунок 4.
Заставим моторчик вращаться "вправо" 4 секунды, остановиться на 0.5 секунды, вращаться "влево" 4 секунды, остановка 5 секунд и снова цикл повторяется (таблица 1).
Таблица 1. Пример программного кода.
| // Двигатель меняет направление вращения int IN1 = 8; // Input1 подключен к выводу 8 int IN2 = 7; // Input2 подключен к выводу 7 void setup() { pinMode (IN2, OUTPUT); pinMode (IN1, OUTPUT); } void loop() { digitalWrite (IN2, HIGH); digitalWrite (IN1, LOW); delay(4000); digitalWrite (IN2, LOW); delay(500); digitalWrite (IN1, HIGH); delay(4000); digitalWrite (IN1, LOW); delay(5000); } |
Теперь усложним нашу схему, возьмем большой моторчик (рисунок 5). При использовании такого мотора настоятельно рекомендуем использовать внешний источник питания силовой части. Также, в данном варианте, подсоединим вывод INPUT1 к ШИМ (ENABLE1) выводу Ардуино под номером 9.
Рисунок 5.
В данном примере мы подсоединили вывод ENABLE1 к выводу ШИМ. Задействуем возможность драйвера управлять скоростью, меняя скважность посылаемого ШИМ сигнала. Значения скважности задаются функцией analogWrite(pin, число); где число изменяется от 0 до 255, прямо пропорционально скважности сигнала. Для наглядности, были подобраны четыре значения, при которых двигатель стартует с низких оборотов, набирает средние, выходит на максимальные и останавливается.
Таблица 2.Пример программного кода
| //Двигатель плавно набирает обороты int IN1 = 8; //input1 подключен к выводу 8 int IN2 = 7; int EN1 = 9; void setup() { pinMode (EN1, OUTPUT); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); } void loop() { digitalWrite (IN2, HIGH); digitalWrite (IN1, LOW); analogWrite(EN1, 55); delay(2000); analogWrite(EN1, 105); delay(2000); analogWrite(EN1, 255); delay(2000); analogWrite(EN1, 0); delay(5000); } |
Ну и напоследок подключим два двигателя с регулировкой скорости (рисунок 6).
Рисунок 6.
В приведенном ниже скетче два мотора будут вращаться в обе стороны с плавным нарастанием скорости (таблица 3).
Таблица 3. Пример программного кода
| // Два двигателя с нарастанием скорости int IN1 = 8; // IN1 драйвера подключен к выводу 8 int IN2 = 7; // IN2 драйвера подключен к выводу 7 int IN3 = 2; // IN3 драйвера подключен к выводу 2 int IN4 = 4; // IN4 драйвера подключен к выводу 4 int EN1 = 9; // ЕNА драйвера подключен к выводу 9 int EN2 = 6; // ЕNА драйвера подключен к выводу 6 int i; void setup() { pinMode (EN1, OUTPUT); // выводы подключения драйвера установлены как выход pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (EN2, OUTPUT); pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT); } void loop() { digitalWrite (IN2, HIGH); // на вывод IN2 подан высокий уровень +5v digitalWrite (IN1, LOW); // на вывод IN1 подан низкий уровень -5v digitalWrite (IN4, HIGH); // на вывод IN4 подан высокий уровень +5v digitalWrite (IN3, LOW); // на вывод IN3 подан низкий уровень -5v for (i = 50; i i) { analogWrite(EN1, i); // на вывод ЕNА подается импульс с нарастанием i analogWrite(EN2, i); delay(30); // задержка включения 30 миллисекунд } analogWrite (EN1, 0); // скорость двигателя А= 0 analogWrite (EN2, 0); // скорость двигателя В= 0 delay(500); digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); for (i = 50; i i) // увеличение скорости { analogWrite(EN1, i); analogWrite(EN2, i); delay(30); } analogWrite (EN1, 0); analogWrite (EN2, 0); delay(8000); // задержка выключения 8секунд } |
При резком включении двигателей, L293D начинает очень сильно нагреваться по причине того, что при старте сразу на полную мощность, для сдвига с места и раскрутки якоря (грубо говоря, вала) мотор потребляет, хоть и кратковременно, но ток минимум в 2-5 раз больше рабочего тока. При резкой смене направления вращения появляется еще больший скачок тока, так как приходится не только сдвинуть якорь с места, как это было в первом случае, но и побороть противо-ЭДС создаваемую инерцией еще не остановившегося якоря.
Для снижения этих факторов следует разгонять двигатели плавно, чем дольше, тем лучше, в разумных пределах конечно. Так же при реверсе (изменении направления вращения) следует дать промежуток для самостоятельной остановки двигателя (доли секунды), а затем снова плавно разгонять.
Motor Shield – плата расширения для Ардуино, которая обеспечивает работу двигателей постоянного тока и шаговых двигателей. Самыми популярными платами Motor Shield являются схемы на базе микросхем L298N (рисунок 7а) и L293D (рисунок 7б), которые могут управлять несколькими двигателями. На плате установлен комплект сквозных колодок Ардуино Rev3, позволяющие устанавливать другие платы расширения. Также на плате имеется возможность выбора источника напряжения – Motor Shield может питаться как от Ардуино, так и от внешнего источника. На плате имеется светодиод, который показывает, работает ли устройство.
а) б)
Рисунок 7.
3. Заключение
Данная методическая разработка была апробирована в робототехническом объединении учащимися 1 и 2 года обучения.
Конструкторские и изобретательские навыки при моделировании в программе позволили учащимся проанализировать работу драйвера, усовершенствовать, и добавить свои конструкторские мысли в методическую разработку.
В данной методической разработке описаны несколько уроков. В дальнейшем планируется продолжить серию методических разработок по изучению уроков программирования, в которых будут рассматриваться другие примеры различных проектов с пояснениями и иллюстрациями.
4. Источники информации
Литература:
1. Ньютон С. Брага. М. Создание роботов в домашних условиях, НТ. Пресс 2007.
2. Кашкаров А.П. 500 схем для радиолюбителей. Электронные датчики. Наука и Техника. 2008.
3. Оуэн Бишоп. Настольная книга разработчика роботов. Киев. «МК Пресс» 2010.
4. Петин В. А., Проекты с использованием контроллера Arduino. — СПб.: БХВ-Петербург, 2014. — 400 с.: ил. — (Электроника).
5. Блум Джереми., Изучаем Arduino., Пер. с англ. — СПб.: БХВ-Петербург, 2015. — 336 с: ил.
6. Фрибель В., Ролоф Х., Шиллер Х. Программирование микропроцессоров - Энергоиздат. 2009.
Интернет ресурс:
7. http://www.arduino.cc/ playground/Main/SimilarBoards#goShie - официальный сайт проекта Arduino.
8. http://shieldlist.org/, - описание 244 шилдов для платформ Arduino.
9. http://arduino.cc/en/Main/Software - версия среды Arduino 1.0.5 и бета Arduino 1.5.2 (с поддержкой Arduino Due).
10. https://www.arduino.cc/en/Tutorial/LibraryExamples - Библиотеки для Ардуино.
11. http://arduino.ru/Reference - Справочник языка для Ардуино.
12. http://ledjournal.info/spravochnik/shirotno-impulsnaya-modulyaciya.html - Широтно-импульсная модуляция (ШИМ).
13. https://supereyes.ru/articles/obzor_kontrollerov_apparatnoy_platformy_arduino - Обзор контроллеров (аппаратной платформы) Arduino.
14. http://pikabu.ru/story/obzor_populyarnyikh_shildov_dlya_arduino_4262944 - Обзор популярных шилдов для Arduino.
8