- Для начала работы нам понадобятся такие компоненты
- Код
- Светодиодные ленты
- Подключаем к Arduino
- Управление
- Питание и мощность
- Загрузка примера “Blink” (мигание) в Arduino IDE
- Загрузка примера “Blink” (мигание) на плату
- Программа и скетч мигающего светодиода
- Схема подключения светодиода к Arduino
- Не забудьте проверить «+» и «-» у светодиода. Минус у светодиода можно отличить двумя способами :
- Управление светодиодами
- Мигаем светодиодом арудино
- Перейдем к пояснению нашего скетча (кода)
- Как подключить светодиод к ардуино
- Обработка события с использованием millis()
- Только хардкор. Только прерывания!
- Проект “Мигалка”
- Обработка битовой матрицы состояния светодиода
- Прерывание по таймеру с «человеческим лицом»
- Задачи для самостоятельного решения, для укрепления материала.
- Мигаем светодиодом без delay()
- или всегда ли официальный примеру учат «хорошему».
- 1. Не экономно выбираем тип переменных
- 2. А зачем нам переменная для малых чисел?
- Что такое ” L” светодиод
- Что потребуется?
- Видео
- Загрузка исполняемого скетча
Для начала работы нам понадобятся такие компоненты
- плата 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% эффективны, плюс ток внутри них ограничивается резистором и, как следствие, лента не нагревается слабо. Рекомендуется наклеить на радиатор (алюминиевый профиль) яркую и прочную ленту. Так что он не оторвется и, как правило, проживет намного дольше.
Загрузка примера “Blink” (мигание) в Arduino IDE
При подключении новой платы к персональному компьютеру обратите внимание, что светодиод начинает мигать, так как платы всех производителей поставляются с предварительно заполненным эскизом «Мигание». В этом уроке мы перепрограммируем нашу плату, изменив частоту мигания светодиода. Не забудьте настроить оболочку Arduino IDE и выбрать желаемый последовательный порт, к которому вы подключили свою плату
В этом уроке мы перепрограммируем нашу плату, изменив частоту мигания светодиода. Не забудьте настроить оболочку Arduino IDE и выбрать желаемый последовательный порт, к которому вы подключили свою плату.
пришло время проверить соединение и запрограммировать карту.
В Arduino IDE есть большая коллекция готовых эскизов. Среди них есть пример, который вызывает ошибку L.
Откройте пример «Blink», найденный в File — Примеры — 01.Basics
После открытия разверните окно оболочки Arduino IDE, чтобы вы могли видеть весь эскиз в одном окне.
Образцы эскизов, включенные в IDE Arduino, предназначены только для чтения. То есть вы можете закачать их на карту, но после изменения кода вы не сможете сохранить их в одном файле.
Мы отредактируем эскиз, поэтому первое, что вам нужно сделать, это сохранить копию, которую вы можете редактировать.
В меню «Файл» выберите вариант «Сохранить как…» и сохраните эскиз с подходящим именем, например «MyBlink”.
Вы сохранили копию эскиза Blink в своей библиотеке. Теперь вы можете открыть этот файл в любое время, перейдя на вкладку File — Scetchbook.
Загрузка примера “Blink” (мигание) на плату
Подключите плату Arduino к компьютеру через USB и проверьте «Тип платы» и «Последовательный порт», к которому она подключена.
Текущие настройки отображаются в нижней части окна оболочки Arduino IDE
Нажмите кнопку «Загрузить”)
Во время загрузки в нижней части окна IDE появятся ползунок и сообщения. Сначала появляется фраза «Компиляция эскиза…», указывающая на процесс преобразования вашего эскиза в формат, подходящий для загрузки на плату Arduino.
Затем статус изменится на «Загрузка». В этот момент светодиоды на плате начнут мигать, пока эскиз передается в микропроцессор.
По завершении статус изменится на «Загрузка завершена». Сообщение, которое появляется в текстовой строке, будет содержать информацию о том, что загруженный эскиз имеет размер 1084 байта из 32 256 доступных.
Иногда при компиляции вы можете получить аналогичную ошибку:
Причин может быть несколько: вы не подключили карту к компьютеру; Вы не установили необходимые драйверы; Вы выбрали неправильный последовательный порт.
Если загрузка прошла успешно, Arduino перезапустится, и светодиод «L» начнет мигать.
Программа и скетч мигающего светодиода
Давайте теперь посмотрим на программу, которую мы скачали из примеров, и проанализируем ее.
Пример программы прошивки флешера
Во-первых, давайте пока удалим большой блок комментариев — они отключены в Arduino IDE. На данном этапе они нас немного раздражают, хотя чрезвычайно важны и вы всегда должны писать комментарии о своих программах.
Программа 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
Не забудьте проверить «+» и «-» у светодиода. Минус у светодиода можно отличить двумя способами :
- По стандарту «минус» на светодиоде имеет более длинную выходную ножку, чем плюс.
- Если присмотреться к светодиоду, можно увидеть своеобразный флаг, а значит, где флаг и «минус» светодиода.
Управление светодиодами
Управление светодиодами на ардуино позволяет реализовать самые разные схемы: включение / выключение нажатием кнопки, мигание, постепенное включение / выключение.
Для работы со светодиодом нам понадобится простая программа управления дверьми. Чтобы написать его, мы просто используем несколько основных команд:
pinMode (порт, режим) — команда устанавливает режим работы пина (порта) на плате. Порт — номер пина, режим — ВЫХОД (режим передачи) и ВХОД (режим приема информации).
digitalWrite (порт, значение) — команда для объявления статуса порта. Порт — номер пина, режим — HIGH (включен), LOW (отключен).
Задержка — задержка между выполнением команд. Интервал — это количество миллисекунд.
Сам эскиз состоит из двух функциональных частей. Объявления переменных находятся в модуле void setup () {…}, исполняемый код — void loop () {…}.
На видео все хорошо видно:
Мигаем светодиодом арудино
Эскизный код для мигания светодиода (эскиз для мигания светодиода 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
К цифровым выводам подключаем положительные контакты светодиода, отрицательные — к GND.
Обработка битовой матрицы состояния светодиода
Мы уменьшаем время отклика события до 1/8 секунды и кодируем 8 бит статуса, отображаемых последовательно, в 1 байт.
Первый, второй и третий режимы слишком просты, но потом начинается самое интересное. Который уже можно нормально использовать для просмотра режимов.
В принципе, на этом можно было остановиться, так как этого хватило бы для большинства проектов. Но если этого мало и придется разрабатывать программирование автосигнализации)))
Что произойдет, если 8 бит состояний светодиода будут низкими?
можно использовать несколько байтов. Например, для кодирования сигнала SOS азбукой Морзе я использовал 4 байта, которые используются последовательно
Получаем циклический сигнал SOS — три коротких, три длинных и еще три коротких сигнала от светодиода, повторяющиеся каждые 4 секунды.
Для тех, кто считает, что программирование микроконтроллеров в цикле () — это не фэн-шуй, несмотря на то, что millis () использует прерывание по первому таймеру
Прерывание по таймеру с «человеческим лицом»
Приятные люди написали программный интерфейс для таймера в виде библиотеки TimerOne
Ну и напоследок код для тех, кто, как и я, «грызет» программирование WiFi-модулей ESP8266 в Arduino IDE.
Задачи для самостоятельного решения, для укрепления материала.
- Отредактируйте эскиз так, чтобы светодиод светился на 3 секунды, а пауза между огнями составляла 0,5 секунды.
- Измените скетч так, чтобы светодиод при включении Arduino горел непрерывно в течение 4 секунд (предложение: сделайте это через процедуру настройки), а затем продолжал мигать с интервалом, который мы должны были установить в первой задаче .
Мигаем светодиодом без delay()
или всегда ли официальный примеру учат «хорошему».
Обычно это одна из первых проблем, с которыми сталкивается навиг в микроконтроллере. Моргнул диодом, запустил стандартный скетч blink (), но как только он хочет, чтобы контроллер «делал что-то еще», его ждет неприятный сюрприз: многопоточности нет. Как только он где-то написал что-то вроде delay (1000), оказывается, что на этой строчке «остановился контроллер» и больше ничего не делает (не запрашивает кнопки, не считывает датчики, не может «моргать» вторым диодом).
Новичок поднимается с этим вопросом на форум и сразу получает набор уроков: «отказаться от задержки ()», научиться работать с millis () и прочитать основные примеры в конце. Конкретно светодиодом мигаем без задержки()
В принципе, подача к этому примеру вполне правильная. Он действительно показывает стандартную схему того, как выполнять какие-то периодические (или отложенные) действия):
- Мы экономим время на некоторых переменных
- В loop () мы всегда смотрим на разницу «текущее время — сэкономленное время»
- Когда эта разница превысила определенное значение («нужный нам частотный диапазон»)
- Выполняем некоторые действия (меняем состояние диода, запоминаем «время запуска и т.д.»)
Пример обращается к задаче «объяснения идеи». Но, с моей точки зрения, в нем есть несколько методологических ошибок. Написание скетчей в подобном стиле рано или поздно приведет к проблемам.
Так что в этом плохого?
1. Не экономно выбираем тип переменных
Переменная ledPin объявлена как имеющая тип int. За что? Может ли пин-код быть очень большим числом? А может отрицательное число? Зачем выделять для его хранения два байта, когда достаточно одного. Тип байта может хранить числа от 0 до 255. Для номера вывода этого достаточно.
Этого будет достаточно.
2. А зачем нам переменная для малых чисел?
Зачем нам здесь меняться? (даже если объявлен как const). Зачем тратить циклы процессора на чтение переменной? И потратить лишний байт? Мы используем директиву препроцессора #define
#define LED_PIN 13 // номер выхода, подключенного к светодиоду
Таким образом, даже во время компиляции компилятор может просто подставить 13 везде, где в коде используется LED_PIN, и не будет выделять отдельные переменные.
Что такое ” L” светодиод
Arduino Uno имеет ряды гнездовых разъемов по бокам платы, которые используются для подключения периферийных электронных устройств или экранов”.
Кроме того, на плате есть встроенный светодиод (LED), которым можно управлять с помощью эскизов. Мы называем этот встроенный светодиод «L» светодиод, как это принято во многих англоязычных ресурсах.
Расположение этого светодиода на плате показано на фото ниже.
Что потребуется?
Чтобы мигать светодиодом с помощью контроллера Arduino и иметь:
- светодиоды с диаметром корпуса 3 или 5 мм любого свечения;
- постоянный резистор номиналом 240-470 Ом, с напряжением питания 5 В;
- соединительные кабели;
- та же плата Arduino (в примере будет использоваться версия UNO).
Для облегчения подключения можно использовать макетную плату).
В реализации более сложных электронных схем схема — незаменимый помощник.
Видео
Загрузка исполняемого скетча
Если вы загружаете данные впервые, вам необходимо настроить параметры загрузки: Инструменты> Плата и инструменты> Последовательный порт. Проверить порт подключения можно в диспетчере устройств (Панель управления> Диспетчер устройств> Порты (COM, LPT). В настройках необходимо указать тип платы Arduino в выпадающем списке. Затем записать загрузчик в память устройства).