Мигание светодиода на Ардуино: скетч для проверки и схема включения

Вопросы и ответы
Содержание
  1. Для начала работы нам понадобятся такие компоненты
  2. Код
  3. Светодиодные ленты
  4. Подключаем к Arduino
  5. Управление
  6. Питание и мощность
  7. Загрузка примера “Blink” (мигание) в Arduino IDE
  8. Загрузка примера “Blink” (мигание) на плату
  9. Программа и скетч мигающего светодиода
  10. Схема подключения светодиода к Arduino
  11. Не забудьте проверить «+» и «-» у светодиода. Минус у светодиода можно отличить двумя способами :
  12. Управление светодиодами
  13. Мигаем светодиодом арудино
  14. Перейдем к пояснению нашего скетча (кода)
  15. Как подключить светодиод к ардуино
  16. Обработка события с использованием millis()
  17. Только хардкор. Только прерывания!
  18. Проект “Мигалка”
  19. Обработка битовой матрицы состояния светодиода
  20. Прерывание по таймеру с «человеческим лицом»
  21. Задачи для самостоятельного решения, для укрепления материала.
  22. Мигаем светодиодом без delay()
  23. или всегда ли официальный примеру учат «хорошему».
  24. 1. Не экономно выбираем тип переменных
  25. 2. А зачем нам переменная для малых чисел?
  26. Что такое ” L” светодиод
  27. Что потребуется?
  28. Видео
  29. Загрузка исполняемого скетча

Для начала работы нам понадобятся такие компоненты

  • плата arduino
  • Макетная плата (макет для удобного подключения устройств к Arduino)
  • Провода
  • светодиод
  • резистор

Компоненты, необходимые для первого урока программирования микроконтроллера Arduino

Вам также понадобится IDE Arduino, которую можно загрузить с официального сайта Arduino.

Эти комплектующие можно приобрести на официальном сайте или в интернет-магазине AliExpress или Amperka.

Вы спросите, что такое макетная плата ?

Макетная плата — это беспаечный (сборочный) макет. Макет представляет собой сетку из гнезд, которые обычно соединяются так:

Кроме того, когда мы подготовили все компоненты к работе и установили программу на ПК, нам нужно правильно их подключить. Подключать нужно очень аккуратно, чтобы все компоненты остались целыми.

Код

В этом коде используется millis () — функция, которая возвращает программе (т.е. «уведомляет программу о…») количество миллисекунд, прошедших с момента ее запуска, в результате чего светодиод начинает мигать.

Светодиодные ленты

Светодиодная лента — это цепочка подключенных светодиодов. Они подключены не просто так, например, обычная лента на 12 В, состоящая из сегментов по 3 светодиода в каждом. Сегменты соединены параллельно, т.е на каждый поступает общее по 12 вольт. Внутри сегмента светодиоды соединены последовательно, и ток через них ограничивается общим резистором (их может быть два для более эффективного отвода тепла):
Поэтому достаточно подать на ленту 12В от источника напряжения, и она засветится. За простоту и удобство приходится расплачиваться эффективностью. Простая математика: три белых светодиода, каждому нужно ~ 3,2 В, это всего 9,6 В. Подключаем ленту на 12 В и понимаем, что 2,5 В уходит в нагрев только на резисторах. И это в лучшем случае, если резистор подобрать так, чтобы светодиод горел на максимальной яркости.

Подключаем к Arduino

Здесь все очень просто — см. Предыдущий урок по управлению нагрузкой постоянного тока. Им можно управлять через реле, транзистор или твердотельное реле. Нас больше интересует плавная регулировка яркости, поэтому я продублирую схему с полевым транзистором — конечно, вы можете использовать китайский модуль mosfet! Кстати, вывод VCC подключить нельзя, он нигде на плате не подключен.

Управление

Лента, подключенная через транзистор, управляется так же, как светодиод в предыдущей главе, то есть все примеры кода с миганием, регулярным миганием и управлением потенциометром подходят для этой схемы. О RGB и адресных светодиодных лентах мы поговорим в отдельных уроках.

Питание и мощность

Светодиодная лента потребляет много энергии, поэтому нужно убедиться, что выбранный блок питания, модуль или аккумулятор справятся с поставленной задачей. Но сначала обязательно прочтите Урок закона Ома! Энергопотребление светодиодной ленты зависит от нескольких факторов:

  • Яркость. Максимальная мощность будет потребляться при максимальной яркости.
  • Напряжение питания (чаще всего 12В). Также есть ленты на 5, 24 и 220 В.
  • Качество, тип и цвет светодиода: светодиоды одного вида могут потреблять разные токи и излучать с разной яркостью.
  • Длина ленты. Чем длиннее лента, тем больше тока она потребляет.
  • Плотность ленты измеряется количеством светодиодов на метр. Бывает от 30 до 120 штук, чем плотнее — тем больше тока будет потребляться при одинаковой длине, и больше будет светить.

Лента всегда имеет характеристику мощности на погонный метр (Вт / м), это максимальная мощность ленты, которая указывается при питании номинальным напряжением. Китайские ленты обычно имеют немного меньшую эффективную мощность (около 80%, иногда лучше, иногда хуже). Блок питания нужно подбирать так, чтобы его мощность была больше мощности ленты, т.е с запасом не менее 20%.

  • Пример 1: Вам нужно подключить 4 метра ленты с мощностью 14 Вт на метр, лента может работать на максимальной яркости. 14 * 4 == 56 Вт, с запасом в 20% будет 56 * 1,2 ~ 70 Вт, ближайший БП в продаже, скорее всего, будет 100 Вт.
  • Пример 2: берем такую ​​же ленту, но точно знаем, что яркость при работе не будет больше половины. Так можно получить блок на 70/2 == 35Вт.

Важные моменты, касающиеся питания и подключения:

  • Подключение: Допустим, у нас подключена лента мощностью 100 Вт. При 12 вольт это будет 8 ампер — очень большой ток! Ленту следует располагать как можно ближе к источнику питания и соединять толстыми проводами (квадрат 2,5 мм и толще). Также при создании освещения имеет смысл перейти на ленты 24В, потому что ток в цепи будет меньше и можно взять более тонкие провода — если бы лента из предыдущего примера была 24В, ток был бы около 4 ампер, что не так уж и «жарко”.
  • Дублирование питания: сама лента представляет собой гибкую печатную плату, что означает, что ток течет через тонкий слой меди. При подключении длинной ленты ток будет теряться на сопротивлении самой ленты, и чем дальше от точки соединения, тем слабее она будет светить. Если вам нужна максимальная яркость в течение длительного срока службы, вам необходимо продублировать блок питания от блока питания с дополнительными кабелями или вставить дополнительные блоки питания вдоль ленты. Желательно дублировать блок питания через каждые 2 метра, потому что на такой длине падение яркости становится заметным почти на всех лентах.
  • Охлаждение: светодиоды не на 100% эффективны, плюс ток внутри них ограничивается резистором и, как следствие, лента не нагревается слабо. Рекомендуется наклеить на радиатор (алюминиевый профиль) яркую и прочную ленту. Так что он не оторвется и, как правило, проживет намного дольше.

При подключении новой платы к персональному компьютеру обратите внимание, что светодиод начинает мигать, так как платы всех производителей поставляются с предварительно заполненным эскизом «Мигание». В этом уроке мы перепрограммируем нашу плату, изменив частоту мигания светодиода. Не забудьте настроить оболочку Arduino IDE и выбрать желаемый последовательный порт, к которому вы подключили свою плату

В этом уроке мы перепрограммируем нашу плату, изменив частоту мигания светодиода. Не забудьте настроить оболочку Arduino IDE и выбрать желаемый последовательный порт, к которому вы подключили свою плату.

пришло время проверить соединение и запрограммировать карту.

В Arduino IDE есть большая коллекция готовых эскизов. Среди них есть пример, который вызывает ошибку L.

Откройте пример «Blink», найденный в File — Примеры — 01.Basics

После открытия разверните окно оболочки Arduino IDE, чтобы вы могли видеть весь эскиз в одном окне.

Образцы эскизов, включенные в IDE Arduino, предназначены только для чтения. То есть вы можете закачать их на карту, но после изменения кода вы не сможете сохранить их в одном файле.

Мы отредактируем эскиз, поэтому первое, что вам нужно сделать, это сохранить копию, которую вы можете редактировать.

В меню «Файл» выберите вариант «Сохранить как…» и сохраните эскиз с подходящим именем, например «MyBlink”.

Вы сохранили копию эскиза Blink в своей библиотеке. Теперь вы можете открыть этот файл в любое время, перейдя на вкладку File — Scetchbook.

Подключите плату Arduino к компьютеру через USB и проверьте «Тип платы» и «Последовательный порт», к которому она подключена.

Текущие настройки отображаются в нижней части окна оболочки Arduino IDE

Нажмите кнопку «Загрузить”)

Во время загрузки в нижней части окна IDE появятся ползунок и сообщения. Сначала появляется фраза «Компиляция эскиза…», указывающая на процесс преобразования вашего эскиза в формат, подходящий для загрузки на плату Arduino.

Затем статус изменится на «Загрузка». В этот момент светодиоды на плате начнут мигать, пока эскиз передается в микропроцессор.

По завершении статус изменится на «Загрузка завершена». Сообщение, которое появляется в текстовой строке, будет содержать информацию о том, что загруженный эскиз имеет размер 1084 байта из 32 256 доступных.

Иногда при компиляции вы можете получить аналогичную ошибку:

Причин может быть несколько: вы не подключили карту к компьютеру; Вы не установили необходимые драйверы; Вы выбрали неправильный последовательный порт.

Если загрузка прошла успешно, Arduino перезапустится, и светодиод «L» начнет мигать.

Программа и скетч мигающего светодиода

Давайте теперь посмотрим на программу, которую мы скачали из примеров, и проанализируем ее.

Пример программы прошивки флешера
Пример программы прошивки флешера

Во-первых, давайте пока удалим большой блок комментариев — они отключены в Arduino IDE. На данном этапе они нас немного раздражают, хотя чрезвычайно важны и вы всегда должны писать комментарии о своих программах.

Программа Blink без комментариев
Программа Blink без комментариев

У нас еще есть код, и мы сразу обращаем внимание на два блока со словами setup и loop. Это две функции, которые вызываются каждый раз, когда создается наш скетч. Блоки разделяются фигурными скобками — все внутри них принадлежит блоку. Подробнее о них написано в статье по ссылке.

Если обратить внимание на блокировку шлейфа, именно в нем сосредоточены наши команды, управляющие светодиодом:

Функции конфигурации и цикла в мигающем коде
Функции конфигурации и цикла в мигающем коде

digitalWrite — это имя функции, отвечающей за подачу напряжения на вывод. Подробнее об этом вы можете прочитать в отдельной статье на digitalWrite.

LED_BUILDIN — это имя внутреннего светодиода. В большинстве карт это имя скрывает число 13. Для карт Uno, Nano вы можете спокойно писать 13 вместо LED_BUILDIN.

HIGH — условное название высокого уровня сигнала. Включите светодиод. Его можно заменить на цифру 1.

LOW — символ низкого уровня сигнала. Выключите светодиод. Можно заменить на 0.

delay — это функция, останавливающая выполнение скетча на указанное время. В реальных проектах использовать его крайне нежелательно, но в нашем простом примере он отлично сработает. В скобках указываем цифру: это количество микросекунд ожидания. 1000 — 1 секунда. Вы можете узнать больше в нашем посте о delay() .

Как только программа дойдет до конца, контроллер перейдет к началу блока цикла и снова выполнит все команды. И так снова и снова, вечность (пока есть свет). Наш светодиод постоянно мигает.

Проект «Маяк» с мигающим светодиодом

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

Тебе понадобится:

  • Плата Arduino Uno или Nano
  • Разделочная доска для бесшовной сборки
  • Резистор 220 ом
  • Светодиод
  • Соединительные кабели

Сложность: простой проект.

Что мы узнаем:

  • Как подключить светодиод к ардуино.
  • Повторяем процедуру загрузки скетча в микроконтроллер.

Для сборки элементов будем использовать макет. Если вы все еще не очень хорошо понимаете, что это такое, мы рекомендуем сначала прочитать отдельную статью о платах для разработки.

Подключите все элементы согласно следующей схеме для Arduino UNO. У Arduino Nano светодиод подключается точно так же к 13 контакту.

Схема подключения мигающего светодиода к Arduino
Схема подключения мигающего светодиода к Arduino

Если вы не меняли программу с предыдущего шага, можно считать, что все сделано. Подключаем плату к компьютеру: светодиод должен немного хаотично мигать, то есть с точно выставленным периодом.

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

Попробуйте внести изменения в программу. Мигайте маячком медленнее и быстрее (чаще). Убедитесь, что частота мигания такова, что мигание света становится невидимым.

Схема подключения светодиода к Arduino

Не забудьте проверить «+» и «-» у светодиода. Минус у светодиода можно отличить двумя способами :

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

Управление светодиодами

Управление светодиодами на ардуино позволяет реализовать самые разные схемы: включение / выключение нажатием кнопки, мигание, постепенное включение / выключение.

Для работы со светодиодом нам понадобится простая программа управления дверьми. Чтобы написать его, мы просто используем несколько основных команд:

pinMode (порт, режим) — команда устанавливает режим работы пина (порта) на плате. Порт — номер пина, режим — ВЫХОД (режим передачи) и ВХОД (режим приема информации).

digitalWrite (порт, значение) — команда для объявления статуса порта. Порт — номер пина, режим — HIGH (включен), LOW (отключен).

Задержка — задержка между выполнением команд. Интервал — это количество миллисекунд.

Сам эскиз состоит из двух функциональных частей. Объявления переменных находятся в модуле void setup () {…}, исполняемый код — void loop () {…}.

На видео все хорошо видно:

Мигаем светодиодом арудино

Мигание светодиода с частотой 1 секЭскизный код для мигания светодиода (эскиз для мигания светодиода Arduino можно найти в эскизе для встроенного мигания”).

Моргаем с частотой 1 секунду.

После успешного подключения вы перейдете к этапу программирования.

Код просто нужно скопировать и вставить, и ребенок позаботится об этом. Наша цель — понять и понять, что мы привнесли в Arduino.

Перейдем к пояснению нашего скетча (кода)

С самого начала в нашем скетче мы объявили переменную int led = 8;… Итак, мы заявили, что хотим иметь ячейку памяти, на которую мы будем ссылаться с именем led, а первоначально на начало Arduino, должно содержать значение контакта 8. Тип данных для этой переменной указывается перед именем переменной в определении. В нашем случае это int, что означает «целое число» (int — это сокращение от английского «integer»: целое число).

Процедура настройки выполняется один раз при запуске микроконтроллера. Обычно он используется для настройки портов микроконтроллера и других параметров. В нашем случае мы указали, что наш светодиод находится на восьмом выходе. «pinMode (светодиод, ВЫХОД);» Я хотел бы сказать, что Arduino выполняет действие настройки с самого начала, а затем выполняет действие другой процедуры, о которой мы сейчас поговорим.

После запуска установки запускается процедура цикла, которая работает в бесконечном цикле. Это то, что мы используем в этом примере, чтобы маяк постоянно мигал.

Процедуры конфигурации и цикла должны присутствовать в любой программе (эскизе), даже если вам не нужно в них ничего делать: оставьте их пустыми, но не записывайте ничего в фигурных скобках. Помните, что каждая открывающая скобка {всегда связана с закрывающей}. Они обозначают границы некоторого логического фрагмента кода. Остерегайтесь вставных скобок. Для этого удобно увеличивать отступ на каждой новой строке на один символ табуляции после каждой открывающей скобки. Обрати внимание на; в конце строк. Не стирайте их там, где они есть, и не добавляйте ненужные. Вы скоро поймете, где они нужны, а где нет.

Функция digitalWrite (pin, value) не возвращает никакого значения и принимает два параметра: pin — номер цифрового порта, на который мы отправляем значение сигнала — значение, которое мы отправляем в порт. Для цифровых вентилей значение может быть HIGH (один) или LOW (низкий, ноль). Если вы передаете значение, отличное от HIGH, LOW, 1 или 0 в качестве второго параметра в digitalWrite, компилятор может не сгенерировать ошибку, но давайте Предположим, что отправил HIGH. Внимание, обратите внимание, что используемые нами константы: INPUT, OUTPUT, LOW, HIGH, написаны в верхнем регистре, иначе компилятор их не распознает и выдаст ошибку. Когда ключевое слово распознается, оно выделяется синим цветом в Arduino IDE

Как подключить светодиод к ардуино

Рекомендуется подключать к ардуино через резистор. В ардуино подключение возможно через встроенный резистор, но для этого требуется специальный синтаксис команд, и его лучше не использовать. Предельное сопротивление между выводом двери и светодиодом принимаем 150 — 200 Ом.

Обработка события с использованием millis()

Простой код, выполняемый в основном цикле, делает то же самое.

Событие можно переместить, если в цикле выполняется более одного трудоемкого действия. В этом примере мы добились главного: заставляем светодиод мигать практически, не забирая процессорное время у основной программы.

правда, чтобы определить двойное и тройное мигание светодиода, необходимо записать несколько событий с разными интервалами и реализовать логику включения-выключения. Жесткий.

Только хардкор. Только прерывания!

Получить 16-битный таймер 1. Установить прерывание на переполнение через 125 мс

Вы можете узнать больше о программировании таймера здесь. При этом задержка () на 5 секунд в Loop () совершенно не мешает управлению нашим светодиодом.

Недостатком этого метода является то, что некоторые функции и библиотеки используют таймер 1. Например, PWM.

Если регистры сложно программировать, но интересно использовать прерывание по таймеру —

Проект “Мигалка”

Попробуем усложнить проект. Добавим два светодиода, которые будут мигать поочередно.

Тебе понадобится:

  • Плата Arduino Uno или Nano
  • Блюдо для хлеба
  • Два резистора 220 Ом
  • Два светодиода. По возможности лучше брать синий и красный.
  • Соединительные провода.

Сложность: простой проект.

Что мы узнаем:

  • Как подключить светодиод к ардуино.
  • Как поменять стандартную программу-прошивальщик.
  • Повторяем процедуру загрузки скетча в микроконтроллер.

Это не меняет принцип подключения. Мы используем два контакта платы контроллера для подключения светодиодов: 13 и 12. Можно использовать следующую схему:

Схема подключения светодиодов проекта Blinker
Схема подключения светодиодов проекта Blinker

К цифровым выводам подключаем положительные контакты светодиода, отрицательные — к GND.

Обработка битовой матрицы состояния светодиода

Мы уменьшаем время отклика события до 1/8 секунды и кодируем 8 бит статуса, отображаемых последовательно, в 1 байт.

Первый, второй и третий режимы слишком просты, но потом начинается самое интересное. Который уже можно нормально использовать для просмотра режимов.

В принципе, на этом можно было остановиться, так как этого хватило бы для большинства проектов. Но если этого мало и придется разрабатывать программирование автосигнализации)))

Что произойдет, если 8 бит состояний светодиода будут низкими?

можно использовать несколько байтов. Например, для кодирования сигнала SOS азбукой Морзе я использовал 4 байта, которые используются последовательно

Получаем циклический сигнал SOS — три коротких, три длинных и еще три коротких сигнала от светодиода, повторяющиеся каждые 4 секунды.

Для тех, кто считает, что программирование микроконтроллеров в цикле () — это не фэн-шуй, несмотря на то, что millis () использует прерывание по первому таймеру

Прерывание по таймеру с «человеческим лицом»

Приятные люди написали программный интерфейс для таймера в виде библиотеки TimerOne

Ну и напоследок код для тех, кто, как и я, «грызет» программирование WiFi-модулей ESP8266 в Arduino IDE.

Задачи для самостоятельного решения, для укрепления материала.

  1. Отредактируйте эскиз так, чтобы светодиод светился на 3 секунды, а пауза между огнями составляла 0,5 секунды.
  2. Измените скетч так, чтобы светодиод при включении Arduino горел непрерывно в течение 4 секунд (предложение: сделайте это через процедуру настройки), а затем продолжал мигать с интервалом, который мы должны были установить в первой задаче .

Мигаем светодиодом без delay()

или всегда ли официальный примеру учат «хорошему».

Обычно это одна из первых проблем, с которыми сталкивается навиг в микроконтроллере. Моргнул диодом, запустил стандартный скетч blink (), но как только он хочет, чтобы контроллер «делал что-то еще», его ждет неприятный сюрприз: многопоточности нет. Как только он где-то написал что-то вроде delay (1000), оказывается, что на этой строчке «остановился контроллер» и больше ничего не делает (не запрашивает кнопки, не считывает датчики, не может «моргать» вторым диодом).

Новичок поднимается с этим вопросом на форум и сразу получает набор уроков: «отказаться от задержки ()», научиться работать с millis () и прочитать основные примеры в конце. Конкретно светодиодом мигаем без задержки()

В принципе, подача к этому примеру вполне правильная. Он действительно показывает стандартную схему того, как выполнять какие-то периодические (или отложенные) действия):

  1. Мы экономим время на некоторых переменных
  2. В loop () мы всегда смотрим на разницу «текущее время — сэкономленное время»
  3. Когда эта разница превысила определенное значение («нужный нам частотный диапазон»)
  4. Выполняем некоторые действия (меняем состояние диода, запоминаем «время запуска и т.д.»)

Пример обращается к задаче «объяснения идеи». Но, с моей точки зрения, в нем есть несколько методологических ошибок. Написание скетчей в подобном стиле рано или поздно приведет к проблемам.

Так что в этом плохого?

1. Не экономно выбираем тип переменных

Переменная ledPin объявлена ​​как имеющая тип int. За что? Может ли пин-код быть очень большим числом? А может отрицательное число? Зачем выделять для его хранения два байта, когда достаточно одного. Тип байта может хранить числа от 0 до 255. Для номера вывода этого достаточно.

Этого будет достаточно.

2. А зачем нам переменная для малых чисел?

Зачем нам здесь меняться? (даже если объявлен как const). Зачем тратить циклы процессора на чтение переменной? И потратить лишний байт? Мы используем директиву препроцессора #define

#define LED_PIN 13 // номер выхода, подключенного к светодиоду

Таким образом, даже во время компиляции компилятор может просто подставить 13 везде, где в коде используется LED_PIN, и не будет выделять отдельные переменные.

Что такое ” L” светодиод

01

Arduino Uno имеет ряды гнездовых разъемов по бокам платы, которые используются для подключения периферийных электронных устройств или экранов”.

Кроме того, на плате есть встроенный светодиод (LED), которым можно управлять с помощью эскизов. Мы называем этот встроенный светодиод «L» светодиод, как это принято во многих англоязычных ресурсах.

Расположение этого светодиода на плате показано на фото ниже.

Что потребуется?

Чтобы мигать светодиодом с помощью контроллера Arduino и иметь:

  • светодиоды с диаметром корпуса 3 или 5 мм любого свечения;
  • постоянный резистор номиналом 240-470 Ом, с напряжением питания 5 В;
  • соединительные кабели;
  • та же плата Arduino (в примере будет использоваться версия UNO).

Для облегчения подключения можно использовать макетную плату).

В реализации более сложных электронных схем схема — незаменимый помощник.

Видео

Загрузка исполняемого скетча

Если вы загружаете данные впервые, вам необходимо настроить параметры загрузки: Инструменты> Плата и инструменты> Последовательный порт. Проверить порт подключения можно в диспетчере устройств (Панель управления> Диспетчер устройств> Порты (COM, LPT). В настройках необходимо указать тип платы Arduino в выпадающем списке. Затем записать загрузчик в память устройства).

Читайте также: ТОП-12 Комплектов Умного Дома — Рейтинг лучших 2023 года

Оцените статью
Блог про Arduino