Как заставить ардуино моргать светодиодом
На плату Arduino UNO (Nano, Mega, micro и пр.) установлен светодиод который соединен с 13 pin платы. На плате он обозначается буквой L.
Для того чтобы заставить мигать встроенный светодиод на плату Arduino. Достаточно загрузить не большую программу.
Для урока нам понадобиться:
Функция setup() вызывается, когда стартует скетч. Используется для инициализации переменных, определения режимов работы выводов, запуска используемых библиотек и т.д. Функция setup запускает только один раз, после каждой подачи питания или сброса платы Arduino.
pinMode(13, OUTPUT); Инициализируем цифровой вход/выход в режиме выхода. Этого можно не делать так как цифровые выходы Ардуины по умолчанию настроенные на режим выход.
После вызова функции setup(), которая инициализирует и устанавливает первоначальные значения, функция loop() делает точь-в-точь то, что означает её название, и крутится в цикле, позволяя вашей программе совершать вычисления и реагировать на них. Использовать её нужно для активного управления платой Arduino.
Следующий урок: Мигаем светодиодом подключенным к 2 pin Arduino
Если у вас чего то нет для выполнения данного урока, Вы можете посмотреть в каталоге. Там собранные комплектующими от проверенных продавцов по самым низким ценам.
Понравилась статья? Поделитесь ею с друзьями:
Умное мигание светодиодом в Ардуино
Мигание светодиода в Ардуино, что может быть проще и бесполезнее. На самом деле практическую пользу от этой простой функции можно найти.
Бывает при программирование какого-нибудь устройства не хватает портов ввода-вывода микроконтроллера. Или из экономических соображений, а может нехватки места в корпусе, не хочется устанавливать дисплей, а как то сигнализировать о режимах работы устройства очень хотелось бы. Часто достаточно сигнализировать о этих режимах горением или миганием светодиода. А если режимов много?
На мысль меня навела автомобильная сигнализация, в которой я как то программировал режим автозапуска. Там, чтобы установить, например, 14-й бит определенного регистра нужно было после входа в режим программирования этого регистра 14 раз нажать на определенную кнопку брелка, а потом дождаться 14-ти коротких сигналов (или мигания поворотников). Затем нажать кнопку в подтверждения и услышать длинный сигнал. Гениально! Никаких дисплеев и экранных меню. Правда, одновременно, и жутко неудобно.
Но если внутренних режимов немного, то использовать количество морганий светодиодом вполне функционально.
Пример мигания светодиодом для Ардуино
Это первая программа которую осваивают при изучении Ардуино. Во многих контроллерах, которые мне попадались в последнее время, эта программа зашита на заводе, видимо для тех кто не осилил и это.
Казалась бы задавай различные интервалы между высокими и низкими уровнями порта и будет нужное. Но при этом контроллер больше ничего не делает (ну почти ничего, прерывания он все таки обрабатывает). Делать что-то еще он конечно может, но не в основном цикле loop().
Поэтому отказываемся от delay() и переходим на события с использованием millis()
Использование событий с использованием millis()
Ну вот. Цель достигнута. Светодиод мигает, а процессорное время в цикле loop() практически полностью доступно для других функций. Правда в таком коде использование требуемых режимов мигания реализуется довольно сложно — несколько событий с разными интервалами, много условий по необходимому режиму и предыдущему состоянию. Слишком сложно.
Обработка битовой матрицы состояния светодиода
Уменьшаем время срабатывания события до 1/8 секунды и в 1 байте кодируем 8 бит состояний, отображаемых последовательно.
Первые три режима работы светодиода простые. А вот остальные уже можно использовать для демонстрации режима микроконтроллера:
Короткая вспышка 1 раз в секунду
Две вспышки в секунду
Три вспышки
И постоянные вспышки четыре раза в секунду
В принципе, на этом можно было и остановиться, так как для большинства проектов этого бы хватило. Но если этого мало и вам нужно будет разрабатывать программирование автосигнализации )))
Что если 8 бит состояний светодиодов мало?
Использование 4-х байт для определения состояния светодиода
Получаем циклический сигнал SOS — три коротких, три длинных и снова три коротких сигнала светодиодом, повторяемый каждые 4 секунды
Очень много людей критиковали Ардуино за ужасный стиль программирования микроконтроллеров без использования прерываний
Только хардкор. Только прерывания!
Берем 16-ти битный Таймер 1. Устанавливаем прерывание на переполнение за 125мс
Подробно по программированию таймера можно почитать здесь. При этом delay() на 5 секунд в Loop() совершенно не мешают управлению нашим светодиодом.
Недостаток такого метода в том, что не будут работать некоторые функции и библиотеки, использующие таймер 1. Например, ШИМ.
Если с программированием регистров таймера сложно, а прерывание по таймеру использовать интересно —
Прерывание по таймеру с «человеческим лицом»
Добрые люди написали программный интерфейс к таймеру в виде библиотеки TimerOne
Ну, и напоследок, код для тех, кто как и я «грызет» программирование WiFi модулей ESP8266 в среде Arduino IDE.
Прерывание по таймеру в ESP8266
Там другие добрые люди прямо в ядро ESP для Arduino встроили библиотеку Ticker
Использовать прерывания в ESP следует осторожно, так как очень часто это вызывает срабатывание злобного сторожевого таймера WDT, который считает, что на обработку встроенных WiFi функций выделяется слишком мало времени.
Надеюсь, эта статья будет немного полезной для всех любителей мигать светодиодами в Ардуино и не только им.
Урок 12. Мигаем светодиодом Ардуино
Мы уже изучили основные вопросы по работе с аналоговыми входами/выходами. В этом уроке мы подключим нашу светодиодную цепь к одному из цифровых выводов Arduino, включим и выключим светодиод с помощью кода. Мы закрепим знания полезных функций, встроенных в язык Arduino. Нам важно на данном этапе запомнить когда и как использовать три основные функции.
pinMode(pinNumber, mode)
pinMode() (см. в справочнике) используется в setup() скетча, чтобы инициализировать каждый вывод, который мы используем в качестве входа или выхода.
Мы не можем считывать или отправлять на контакт что-либо до того, как будет определена функция pinMode().
digitalWrite(pinNumber, state)
Если вместо этого мы подключаем светодиод к одному из цифровых выводов Arduino, мы можем включить светодиод, установив вывод на 5 В, и выключить его, установив вывод на земле.
delay(timeInMs)
delay() приостанавливает программу на заданный промежуток времени. Например, delay(2000) приостановит программу на 2000 миллисекунд (2000 миллисекунд = 2 секунды), delay(100) приостановит программу на 100 миллисекунд (1/10 секунды) и так далее.
Перед написанием финальной программы мы делаем соединения используя макетную плату.
Пишем код мигающего светодиода, который мы запустим на нашем Arduino.
Также вы уже заметили все точки с запятой. Точки с запятой используются в конце каждой команды на большинстве языков программирования, в том числе и в Arduino. Если вы забудете точку с запятой, то вы увидите ошибку. Со временем, изучая другие области разработки, вы обнаружите, что многие другие языки программирования используют точки с запятой в конце каждой строки.
В этом коде ledPin является переменной. Переменные используются для хранения информации в программах, в этом скетче используем переменную ledPin для хранения числа 7. Позже в программе когда Arduino дойдет до строки с переменной ledPin, плата оценит переменную в соответствии с её текущим сохраненным значением. Итак, строка:
вычисляется Arduino как:
Фактически, мы могли бы заменить все виды использования pinMode числом 7, и программа работала бы точно так же, но использование переменной помогает нам легче читать и понимать код.
Как и ожидалось, светодиод включается на одну секунду, затем выключается на одну секунду. Попробуйте изменять delay(), чтобы увидеть, как это влияет на время мигания светодиода.
Здесь происходит отключение светодиода, но Arduino сразу же попадает в конец цикла loop() и снова начинает выполнение первой строки цикла (включение светодиода). Это происходит так быстро, что человеческий глаз не видит, как светодиод выключается на этот короткий момент, пока wbrk перезапускается.
Мигание светодиодом на Ардуино. Мигалка и маячок
Мигание светодиодом на Arduino – первое, что делают на этой платформе начинающие ардуинщики. Проекты, связанные со светодиодами – самые популярные уроки, с которых начинается большинство учебников. В этой статье мы с вами узнаем, как сделать своими руками маячок и мигалку на Ардуино. Для работы вам потребуется плата Arduino Uno, Nano, Pro Mini или Mega, а также установленная на компьютер программа Arduino IDE.
Мигаем встроенным светодиодом
На плате Ардуино нет встроенного экрана, поэтому мы не можем вывести нашу гениальную надпись. Конечно, можно было бы воспользоваться экраном компьютера, но тогда первый проект получится слишком сложным. Именно поэтому почти все проекты для начинающих основаны на использовании светодиодов. Ими мы будем мигать, учась основам схемотехники и программирования.
Встроенный светодиод в Ардуино Uno, Nano и Mega
Почти на каждой плате Arduino находится несколько встроенных светодиодов, предназначенных для индикации. Один из них подключен к пину 13 и вы можете управлять им программно – включать и выключать. Более подробно об этом написано в нашей статье, посвященной светодиодам.
Мы должны написать и загрузить в ардуино скетч, который будет мигать встроенным в плату ардуино светодиодом – включать его каждую секунду, а потом на секунду выключать.
Вам понадобится: ничего, кроме платы ардуино. Сложность: простой проект.
Что мы узнаем:
Вопросы, на которые вы уже должны знать ответы:
Как мигает светодиод
Алгоритм программы очень прост.
На русском все выглядит очень просто. Осталось только перевести на язык, понятный Ардуино. Мы заменяем каждую строчку нашего алгоритма командой.
Для того, чтобы записать все эти команды, а потом перевести их в машинопонятный язык и загрузить в микроконтроллер мы используем программу Arduio IDE. В ней мы пишем наш код (или вставляем готовый из примера), в ней же нажмем несколько кнопок для проверки, трансляции и загрузки программы в Ардуино.
Давайте соберем все, что нужно, вместе в одной инструкции.
Пошаговая инструкция
Выполняем действия по шагам – в результате обязательно получим результат.
Поздравляем! У вас получилось реализовать ваш первый проект на Ардуино. Если все мигает так, как надо. Теперь можем переходить к анализу программы и сбору электронной схемы с отдельным светодиодом. Если же что-то не получилось, давайте разберемся, почему.
Если что-то пошло не так
Программа и скетч мигающего светодиода
Давайте теперь рассмотрим программу, которую мы загрузили из примеров и проанализируем.
Пример программы мигалки Blink
Во-первых, давайте пока уберем большой блок комментарий – они обозначены в Arduino IDE серым цветом. На данном этапе они немного мешают нам, хотя они крайне важны и вы всегда должны писать комментарии к своим программам.
Программа Blink без комментариев
У нас осталась часть кода и сразу обратите внимание на два блока со словами setup и loop. Это две функции, которые вызываются всегда, когда запускается наш скетч. Блоки ограничены фигурными скобками – все, что внутри них, принадлежит блоку. Более подробно о них написано в статье по ссылке.
Если вы обратите внимание на блок loop, то именно в нем и сосредоточены наши команды, управляющие светодиодом:
Функции setup и loop в коде программы Blink
digitalWrite – это название функции, которая отвечает за подачу напряжения на пин. Подробнее о ней можно прочитать в отдельной статье о digitalWrite.
LED_BUILDIN – это название внутреннего светодиода. В большинстве плат за этим названием прячется цифра 13. Для плат Uno, Nano можно смело писать 13 вместо LED_BUILDIN.
HIGH – условное название высокого уровня сигнала. Включает светодиод. Можно заменить цифрой 1.
LOW – условное обозначение низкого уровня сигнала. Выключает светодиод. Можно заменить цифрой 0.
Как только программа дойдет до конца, контроллер перейдет в начало блока loop и будет выполнять все команды заново. И так раз за разом, целую вечность (пока есть свет). Наш светодиод мигает без остановки.
Проект “Маячок” с мигающим светодиодом
В этом проекте мы с вами практически повторим предыдущий, но при этом добавим самую настоящую схему. Подключим светодиод и токоограничивающий резистор. Чтобы не повторяться, отправим вас за подробным описанием в статью о правильном подключении светодиода к плате Ардуино.
Сложность: простой проект.
Для монтажа элементов мы будем использовать макетную плату. Если вы еще не очень хорошо понимаете, что это такое, то рекомендуем предварительно ознакомиться с отдельной статьей, посвященной макетным платам.
Соедините все элементы согласно следующей схемы для Arduino UNO. Для Arduino Nano светодиод подключается по той же схеме – к пину 13.
Схема подключения мигающего светодиода к Ардуино
Если вы не меняли программу с предыдущего шага, то можно считать, что все сделано. Подключаем плату к компьютеру – светодиод должен немного помигать хаотично, а затем с точно установленным периодом.
Если вы еще не загружали программу, то вам надо повторить ту же последовательность действий, что и для работы со встроенным светодиодом. Загружаем пример, затем программу в контроллер и наблюдаем за результатом.
Проект “Мигалка”
Давайте попробуем сделать проект посложнее. Добавим два светодиода, которые будут мигать поочередно.
Сложность: простой проект.
Принцип подключения при этом не меняется. Мы используем два пина платы контроллера для соединения со светодиодами – 13 и 12. Можно использовать следующую схему:
Схема подключения светодиодов проекта Мигалка
Положительные контакты светодиода соединяем с цифровыми пинами, отрицательные – с GND.
Программирование мигалки
В скетч с мигающим светодиодом нам надо будет внести определенные изменения. Алгоритм действий таков:
Попробуйте написать программу самостоятельно, основываясь на опыте, полученном из предыдущего проекта. Если возникнут сложности, можно обратиться к примеру далее по тексту.
В этой программе нам опять встречается блок команд loop. В нем мы выполняем включение и выключение пинов с помощью digitalWrite. Никаких сложностей это вызвать не должно.
Давайте поговорим более подробно о блоке setup. Мы видели его и в прошлом примере. Внутри setup обычно располагаются команды инициализации, которые запускаются только один раз, в момент подключения контроллера к питанию.
В примерах с мигалками мы устанавливаем пины в нужный режим – OUTPUT. В этом режиме мы работаем с внешними устройствами, получающими питание с данного пина ардуино. Например, наш светодиод ничего не передает в плату, он использует пин 13 для того, чтобы включиться. Поэтому мы устанавливаем режим OUTPUT – “на выход”. По умолчанию все пины находятся в режиме INPUT, оптимальном для подключения датсиков. Более подробную информацию вы можете найти в описании функции pinMode.
Надеемся, процедура проверки скетча и прошивки контроллера не вызвала каких-то трудностей. Запустите программу и вы увидите, как весело перемигиваются светодиоды на плате. Поздравляем с написанием своих первых проектов на Ардуино!
Заключение
В этой статье мы с вами узнали о том, как мигать светодиодами – работать с внешними и внутренним светодиодом, встроенным в плату контроллера Arduino. Мы научились загружать программу из встроенных примеров, разобрались с внутренним устройством скетча. Узнали, как включается и выключается светодиод, как создается задержка в выполнении скетча.
Мы также научились собирать электрическую схему со светодиодом на основе макетной платы и Arduino Uno. В схеме обязательно использование токоограничивающих резисторов. Все примеры и схемы подключения актуальны и для более миниатюрного аналога Uno – платы Arduino Nano.
Надеемся, все у вас получилось и вы готовы к новым проектам со светодиодами – светофору и гирлянде!
Светодиоды и ленты
Обычные светодиоды
Светодиод – простейший индикатор, который можно использовать для отладки кода: его можно включить при срабатывании условия или просто подмигнуть. Но для начала его нужно подключить.
Подключение светодиода
Светодиод – это устройство, которое питается током, а не напряжением. Как это понимать? Яркость светодиода зависит от тока, который через него проходит. Казалось бы, достаточно знания закона Ома из первого урока в разделе, но это не так!
2.5 вольта, у синих, зелёных и белых
3.5 вольта. Более точную информацию можно узнать из документации на конкретный светодиод. Если документации нет – можно пользоваться вот этой табличкой, тут даны минимальные значения:
Мигаем
Мигать светодиодом с Ардуино очень просто: подключаем катод к GND, а анод – к пину GPIO. Очень многие уверены в том, что “аналоговые” пины являются именно аналоговыми, но это не так: это обычные цифровые пины с возможностью оцифровки аналогового сигнала. На плате Nano пины A0-A5 являются цифровыми и аналоговыми одновременно, а вот A6 и A7 – именно аналоговыми, то есть могут только читать аналоговый сигнал. Так что подключимся к A1, настраиваем пин как выход и мигаем!
Как избавиться от delay() в любом коде я рассказывал вот в этом уроке. https://www.youtube.com/watch?v=uaiLcCd9Tnk
Мигаем плавно
Как насчёт плавного управления яркостью? Вспомним урок про ШИМ сигнал и подключим светодиод к одному из ШИМ пинов (на Nano это D3, D5, D6, D9, D10, D11). Сделаем пин как выход и сможем управлять яркостью при помощи ШИМ сигнала! Читай урок про ШИМ сигнал. Простой пример с несколькими уровнями яркости:
Подключим потенциометр на A0 и попробуем регулировать яркость с его помощью:
Как вы можете видеть, все очень просто. Сделаем ещё одну интересную вещь: попробуем плавно включать и выключать светодиод, для чего нам понадобится цикл из урока про циклы.
Плохой пример! Алгоритм плавного изменения яркости блокирует выполнение кода. Давайте сделаем его на таймере аптайма.
Теперь изменение яркости не блокирует выполнение основного цикла, но и остальной код должен быть написан таким же образом, чтобы не блокировать вызовы функции изменения яркости! Ещё одним вариантом может быть работа по прерыванию таймера, см. урок.
Ещё один момент: если подключить светодиод наоборот, к VCC, то яркость его будет инвертирована: 255 выключит светодиод, а 0 – включит, потому что ток потечет в другую сторону:
Светодиодные ленты
Светодиодная лента представляет собой цепь соединённых светодиодов. Соединены они не просто так, например обычная 12V лента состоит из сегментов по 3 светодиода в каждом. Сегменты соединены между собой параллельно, то есть на каждый приходят общие 12 Вольт. Внутри сегмента светодиоды соединены последовательно, а ток на них ограничивается общим резистором (могут стоять два для более эффективного теплоотвода): Таким образом достаточно просто подать 12V от источника напряжения на ленту и она будет светиться. За простоту и удобство приходится платить эффективностью. Простая математика: три белых светодиода, каждому нужно по
3.2V, суммарно это 9.6V. Подключаем ленту к 12V и понимаем, что 2.5V у нас просто уходят в тепло на резисторах. И это в лучшем случае, если резистор подобран так, чтобы светодиод горел на полную яркость.
Подключаем к Arduino
Здесь всё очень просто: смотрите предыдущий урок по управлению нагрузкой постоянного тока. Управлять можно через реле, транзистор или твердотельное реле. Нас больше всего интересует плавное управление яркостью, поэтому продублирую схему с полевым транзистором: Конечно же, можно воспользоваться китайским мосфет-модулем! Пин VCC кстати можно не подключать, он никуда не подведён на плате.
Управление
Подключенная через транзистор лента управляется точно так же, как светодиод в предыдущей главе, то есть все примеры кода с миганием, плавным миганием и управление потенциометром подходят к этой схеме. Про RGB и адресные светодиодные ленты мы поговорим в отдельных уроках.
Питание и мощность
Светодиодная лента потребляет немаленький ток, поэтому нужно убедиться в том, что выбранный блок питания, модуль или аккумулятор справится с задачей. Но сначала обязательно прочитайте урок по закону Ома! Потребляемая мощность светодиодной ленты зависит от нескольких факторов:
Лента всегда имеет характеристику мощности на погонный метр (Ватт/м), указывается именно максимальная мощность ленты при питании от номинального напряжения. Китайские ленты в основном имеют чуть меньшую фактическую мощность (в районе 80%, бывает лучше, бывает хуже). Блок питания нужно подбирать так, чтобы его мощность была больше мощности ленты, т.е. с запасом как минимум на 20%.
Важные моменты по току и подключению: