Это третий урок из цикла «Знакомство с Arduino». В этом уроке Вы научитесь управлять как установленным на плате Arduino светодиодом, так и внешним светодиодом.
Для урока Вам понадобится следующие детали:
- Arduino Nano;
- беспаечная макетная плата (она же breadboard);
- провода типа папа-папа;
- светодиод;
- резистор номиналом 220 Ом.
Если на компьютере не установлена среда Arduino IDE, то необходимо её скачать и установить. Урок по основам работы с IDE можно прочитать здесь.
Первым проектом на Arduino у большинства людей является обычное мигание установленным на плату светодиодом. Пожалуй и мы начнём с этого. Кроме модуля Arduino и кабеля для его подключения к компьютеру Вам больше ничего не понадобится.
Итак, подключите модуль Arduino к компьютеру. Далее откройте среду разработки Arduino IDE и при помощи неё загрузите следующую программу в Arduino. Если забыли или не знаете как это делается, то прочтите предыдущий урок.
Текст программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/*------------------------------------------------*/ void setup() { pinMode(LED_BUILTIN, OUTPUT); // LED_BUILTIN = 13 вывод Arduino Nano, к нему подключён встроенный на плату светодиод // конфигурируем порт как выход } /*------------------------------------------------*/ void loop() { digitalWrite(LED_BUILTIN, HIGH); // зажигаем светодиод, подаём логическую единицу (5 Вольт) на вывод № 13 delay(1000); // ждём секунду (1 с = 1000 мс) digitalWrite(LED_BUILTIN, LOW); // гасим светодиод, подаём логический ноль (0 Вольт) на вывод № 13 delay(1000); // ждём секунду (1 с = 1000 мс) } /*------------------------------------------------*/ |
LED_BUILTIN — константа, которая заранее определена в языке программирования модулей Arduino и она равна 13 (LED_BUILTIN = 13). Функция setup() запускается однократно при запуске программы. В ней устанавливается режим работы вывода № 13 (к нему подключён установленный на плату светодиод) Arduino — как выходной порт. Функция loop() вызывается после функции setup(). Функция представляет собой бесконечный цикл, в котором выполняется пользовательская программа. В ней при помощи функции digitalWrite (LED_BUILTIN , HIGH) на порт № 13 подаётся высокий уровень напряжения (5 В), тем самым мы зажигаем светодиод. Функция delay (1000) устанавливает задержку при выполнении программы на 1000 мс, т.е. светодиод продолжает гореть 1 секунду. Далее при помощи функции digitalWrite (LED_BUILTIN , LOW) мы гасим светодиод (подаём на вывод № 13 низкий уровень напряжения (0 В)) и также ждём 1 секунду, т.е. наш светодиод погашен в течении 1 секунды. Таким образом, мы поочерёдно зажигаем и гасим светодиод с периодом в 1 секунду.
После загрузки программы, установленный на плате Arduino Nano светодиод начнёт мигать с периодом в 1 секунду.
Ну что ж, мигать светодиодом на плате Arduino мы научились. Скажете совсем просто? Давайте усложним задачу. Подключим к Arduino внешний светодиод.
Когда все необходимые детали находятся под рукой можно начинать собирать наш пример. Для этого необходимо воспользоваться следующими схемами:
Электрическая принципиальная схема:
Схема подключения на макетной плате:
Обратите внимание на полярность светодиода! Если его неправильно подключить, то он запросто сгорит.
Светодиод имеет два вывода, один из которых катод («минус», короткая нога), а другой — анод («плюс», более длинная нога).
Также не забудьте подключить токоограничивающий резистор 220 Ом. Можно взять резистор и большего сопротивления, но в таком случае светодиод будет гореть чуть тусклее.
Когда схемка собрана можно записывать в Arduino следующую программу:
Текст программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
const byte led_pin = 7; // 7 вывод Arduino Nano для подключения светодиода /*------------------------------------------------*/ void setup() { pinMode(led_pin, OUTPUT); // 7 вывод Arduino Nano, к нему подключён внешний на светодиод // конфигурируем порт как выход } /*------------------------------------------------*/ void loop() { for (int i = 100; i <= 1000; i = i + 100) { digitalWrite(led_pin, HIGH); // зажигаем светодиод delay(i); // ждём i мс digitalWrite(led_pin, LOW); // гасим светодиод delay(i); // ждём i мс } } /*------------------------------------------------*/ |
В строчке const byte led_pin = 7 мы задаём номер и имя (led_pin) вывода, к которому подключён наш светодиод (№ 7 на модуле Arduino). В функции setup(), также как и в предыдущем примере, устанавливается режим работы вывода № 7 Arduino — как выходной порт. В функции loop() мы аналогично предыдущему примеру, поочерёдно зажигаем и гасим светодиод. Однако период мигания светодиода изменяется от 100 мс до 1 секунды с шагом 100 мс. Это реализовано при помощи цикла for (строчка for (int i = 100; i <= 1000; i = i + 100)).
Когда программа успешно записана в Arduino, светодиод, подключённый к выводу № 7 Arduino Nano начнёт мигать с разной задержкой (от 0.1 с до 1 с).
Для проверки, насколько хорошо Вы усвоили урок, выполните следующие задания.
Чтобы проверить себя, дорогой читатель, воспользуйтесь подсказками после вопросов.
Задания:
- Для установленного на плате Arduino светодиода:
- Измените период мигания светодиода с 1 секунды на полсекунды;
Задержка меняется путём изменения параметра в функции delay() с 1000 мс на 500 мс.
Текст программы:12345678910111213/*------------------------------------------------*/void setup() {pinMode(LED_BUILTIN, OUTPUT); // LED_BUILTIN = 13 вывод Arduino Nano, к нему подключён встроенный на плату светодиод// конфигурируем порт как выход}/*------------------------------------------------*/void loop() {digitalWrite(LED_BUILTIN, HIGH); // зажигаем светодиод, подаём логическую единицу (5 Вольт) на вывод № 13delay(500); // ждём секунду (0.5 с = 500 мс)digitalWrite(LED_BUILTIN, LOW); // гасим светодиод, подаём логический ноль (0 Вольт) на вывод № 13delay(500); // ждём секунду (0.5 с = 500 мс)}/*------------------------------------------------*/
- Измените период мигания светодиода с 1 секунды на полсекунды;
- Для примера с внешним светодиодом:
- Подключите светодиод к другому цифровому выводу Arduino и в соответствии с этим измените программу;
Электрическая принципиальная схема:
Схема подключения на макетной плате: Номер вывода, к которому подключён внешний светодиод меняется в строчке const byte led_pin = 4. Мы изменили номер цифрового вывода с 7 на 4.
Текст программы:12345678910111213141516const byte led_pin = 4; // 4 вывод Arduino Nano для подключения светодиода/*------------------------------------------------*/void setup() {pinMode(led_pin, OUTPUT); // 4 вывод Arduino Nano, к нему подключён внешний на светодиод// конфигурируем порт как выход}/*------------------------------------------------*/void loop() {for (int i = 100; i <= 1000; i = i + 100) {digitalWrite(led_pin, HIGH); // зажигаем светодиодdelay(i); // ждём i мсdigitalWrite(led_pin, LOW); // гасим светодиодdelay(i); // ждём i мс}}/*------------------------------------------------*/
- Подключите светодиод к другому цифровому выводу Arduino и в соответствии с этим измените программу;
-
- Измените максимальный период мигания светодиода с 1 секунды на 2 секунды;
Здесь необходимо изменить параметр, задающий максимальное количество итераций в цикле for. Для этого в строчке for (int i = 100; i <= 1000; i = i + 100) нужно изменить 1000 на 2000. Таким образом, максимальный период мигания светодиода станет 2 секунды.
Текст программы:12345678910111213141516const byte led_pin = 7; // 7 вывод Arduino Nano для подключения светодиода/*------------------------------------------------*/void setup() {pinMode(led_pin, OUTPUT); // 7 вывод Arduino Nano, к нему подключён внешний на светодиод// конфигурируем порт как выход}/*------------------------------------------------*/void loop() {for (int i = 100; i <= 2000; i = i + 100) {digitalWrite(led_pin, HIGH); // зажигаем светодиодdelay(i); // ждём i мсdigitalWrite(led_pin, LOW); // гасим светодиодdelay(i); // ждём i мс}}/*------------------------------------------------*/
- Измените максимальный период мигания светодиода с 1 секунды на 2 секунды;
-
- Измените программу так, чтобы вместо цикла for в ней использовался цикл while.
В цикле for явно задаётся счётчик и количество итераций. Вместо этого мы заранее определяем счётчик итераций (повторений) в строчке int cnt = 100, где cnt — имя счётчика, а 100 — минимальный период мигания светодиода (100 мс). Далее в функции loop() мы переинициализируем наш счётчик (cnt = 100). Строчка while (cnt <= 1000) задаёт количество повторений команд в цикле. Аналогично предыдущим примерам мы мигаем светодиодом. В строчке cnt = cnt + 100; мы обновляем значение нашего счётчика, т.е. каждый раз увеличиваем его значение на 100. Когда значение счётчика будет больше 1000 мы выходим из цикла. Спросите, зачем была нужна переинициализация счётчика в самом начале функции loop()? Ответ прост. Когда мы выйдем из цикла while при повторном выполнении программы значение счётчика cnt будет больше 1000 и обратно цикл while просто не запустится и наш светодиод мигать больше не будет. Поэтому необходимо заново устанавливать значение нашего счётчика.
Текст программы:12345678910111213141516171819const byte led_pin = 7; // 7 вывод Arduino Nano для подключения светодиодаint cnt = 100; // инициализируем счётчик для цикла while/*------------------------------------------------*/void setup() {pinMode(led_pin, OUTPUT); // 7 вывод Arduino Nano, к нему подключён внешний на светодиод// конфигурируем порт как выход}/*------------------------------------------------*/void loop() {cnt = 100; // переинициализируем счётчикwhile (cnt <= 1000) {digitalWrite(led_pin, HIGH); // зажигаем светодиодdelay(cnt); // ждём cnt мсdigitalWrite(led_pin, LOW); // гасим светодиодdelay(cnt); // ждём cnt мсcnt = cnt + 100; // обновляем значение счётчика}}/*------------------------------------------------*/
- Измените программу так, чтобы вместо цикла for в ней использовался цикл while.
Уважаемый читатель, мы предлагаем Вам обратиться к разделу «Программирование» на нашем сайте. Там Вы найдёте описание и примеры работы с различными функциями программирования модулей Arduino.
Спасибо за то, что учитесь познавать удивительный мир радиоэлектроники вместе с нами.
Верьте в себя, учитесь и у Вас всё обязательно получится!
Удачи в дальнейших проектах!