Работаем с множеством светодиодов
Мигать одним светодиодом не слишком интересно. В этом уроке мы рассмотрим работу с множеством светодиодов. Если проявить фантазию, то можно создавать интересные эффекты.
Сам принцип работы со светодиодами не меняется, мы также задаём номера выводом и подаём нужные сигналы. Но проблема заключается в том, что придётся писать однотипный код для каждого светодиода. И когда светодиодов наберётся большое количество и вы решите поменять логику, то придётся искать и менять код у каждого светодиода. Это не очень удобно. Поэтому для облегчения рутинной работы используют циклы, массивы, коллекции.
05.Control: ForLoopIteration
Для знакомства с циклом for в Arduino IDE есть пример File | Examples | 05.Control | ForLoopIteration.
Для эксперимента нам понадобятся шесть светодиодов. Соответственно, к ним нужно добавить шесть резисторов. Соединяем их как на рисунке. Задействуем цифровые выводы 2, 3, 4, 5, 6, 7.
Цель скетча — поочерёдно зажигать и гасить светодиоды в одном направлении, а затем в другом.
Доказательство, что код работает.
05.Control: Arrays
Обращаться к каждому светодиоду можно не только по очереди в цикле, но и через массив. Использование массивов даёт больше гибкости. Посмотрим на примере File | Examples | 5.Control | Arrays. Схема остаётся прежней из предыдущего примера.
Массив объявляется с помощью квадратных скобок, а затем к переменной массива обращаются, указывая в квадратных скобках индекс массива, который начинается с 0. Таким образом, чтобы обратиться к первому элементу массива, следует писать ledPins[0] и т.д. Комментарии к скетчу смотрите в предыдущем примере.
Если вы замените строку int ledPins[] = <2, 7, 4, 6, 5, 3>; на int ledPins[] = <2, 3, 4, 5, 6, 7>;, то получите точно такое же поведение светодиодов из предыдущего примера с циклом for, когда светодиоды загораются и гаснут по очереди. Но использование массива позволяет поменять начальное положение светодиодов, не меняя остальной код. И вы можете только в одном месте менять начальные позиции для запуска волны. Например, зададим массив через одного: .
Бегущие огни
Ещё один вариант бегущих по порядку огней. На этот раз уместим код в один цикл for, добавив переменную, следящую за направлением движения.
Три примера показывают, что реализовать проект можно разными способами. Не существуют универсальных решений, каждый решает свою задачу индивидуально, опираясь на свой опыт и практику.
07.Display: barGraph (Световая шкала и потенциометр)
Рассмотрим пример с использованием светодиодной шкалы и потенциометра — Examples | 07.Display | barGraph. Если световой шкалы нет, то замените на 10 обычных светодиодов.
Изменяя вручную напряжение при помощи потенциометра, мы будем выводить информацию на световую шкалу.
Добавим на схему потенциометр. Средняя ножка ведёт на аналоговый вывод A0, а остальные две на 5 V и GND.
Данный пример интересен функцией map(), предназначенной для пропорционального перевода значений одного диапазона в значения другого диапазона. Мы знаем, что потенциометр может выводить результаты от 0 до 1023, а у нас всего десять светодиодов. Функция нам и поможет в преобразовании.
Все значения будут равномерно распределены от 0 до 10 (приблизительно 102 единицы потенциометра на одну единицу). Представим себе, что у нас потенциометр показывает значение 110 единиц, что соответствует значению 1 после применения функции. Первый светодиод в массиве имеет значение 0, т.е. меньше 1. Первый светодиод загорится, а остальные погаснут (если горели до этого). Поворачивая ручку потенциометра, мы увеличиваем значения и соответственно увеличиваем число включённых светодиодов. Поворачивая ручку потенциометра в обратную сторону, мы уменьшаем число включённых светодиодов. Чтобы следить за результатами, добавьте в код наблюдение за последовательным портом Serial
Модуль 2-цветного светодиода KY-011
Модуль выглядит как один светодиод, но на самом деле состоит из двух светодиодов разных цветов (красный и зелёный). и имеет три вывода. Применяется для индикации режима работы прибора, показа фаз протекания контролируемого процесса и позволяет экономить площадь передней панели прибора. Красно-зелёный светодиод имеет четыре состояния: красное свечение, зелёное, оранжевое и выключен. Оранжевое свечение будет при одновременном включении красного и зелёного полупроводников. Пример реализации: зелёный свет – прибор готов к работе, красный – ожидание, оранжевый — промежуточный.
Контакт S предназначен для соединения с общим проводом схемы, отрицательный полюс питания, средний контакт – красный источник света. При работе с модулем следует использовать резисторы (напр, 330Ω).
На практике при одновременном включении не выводится чистый оранжевый цвет, нужно немного поиграться с разными значениями напряжения.
Скетч, в котором используем все доступные значения.
Модуль 2-цветного светодиода KY-029
Модуль KY-029 с общим катодом похож на модуль KY-011, только вместо светодиода на 5 мм используется двухцветный светодиод на 3 мм (зелёный и красный).
У модуля три вывода: — (GND) — общий катод светодиодов, средний контакт — анод (+) красного светодиода, «S» — анод (+) зелёного светодиода.
Скетч используйте от модуля KY-011.
Семицветный светодиодный модуль KY-034
Модуль состоит из печатной платы, трёх выводов, сопротивления 10кОм (код SMD-резистора 103) и семицветного светодиода.
Семицветный мигающий светодиод имеет всего два контакта (плюс и минус). Достаточно добавить источник питания и светодиодный модуль будет мигать всеми цветами радуги в разных комбинациях. Происходит эта магия за счёт миниатюрной микросхемы, которая встроена в светодиод.
Программирования не требуется. Просто подключаем вывод — к GND и S к 5V. При желании можете подключить не к питанию, а к цифровому пину Arduino и управлять включением и выключением светодиода (например, скетч Blink).
Входит в состав набора Набор из 37 датчиков
Урок 9 — Бегущие огни на Arduino UNO
Продолжаем уроки в которых мы используем Arduino, резисторы и светодиоды. Мы уже делали Светофор, полицейский стробоскоп, отправляли сигнал sos и пр.
Сегодня мы будем делать бегущие огни. Бегущие огни уже были в другом блоке уроков на Arduino: Урок 2 — Подключаем сдвиговый регистр 74НС595 к Arduino. «Бегущие» огни
При подключении к сдвиговому регистру всего при подключении по 3 проводам мы можем управлять 8 светодиодами. Но вот чтобы подключить 10 светодиодов, нужно подключать 2 сдвиговых регистра и использовать всего 2 выхода из 8 доступных в регистре. Это не очень логично. Иногда бывает проще подключить к плате Arduino нужное количество светодиодов. Что я и планирую сделать. В примере будет 5 самых простых режимов бегущих огней на Arduino.
Для урока нам понадобится:
- Arduino UNO или Arduino Nano
- Плата макетная беспаечная
- Резисторы 220 ОМ
- Соединительные провода папа-папа
- Светодиоды 3 или 5 мм.
Подключим наши 10 светодиоды вот по такой схеме.
В живую будет выгладить так.
Вы наверное скажите что схема не правильная и к пинам 0 и1 подключать не желательно. Вот именно не желательно, но можно если не использовать Serial port. А для облегчения кода нам будет очень удобно использовать данные пины. При загрузки кода в Ардуину светодиоды подключенные к 0 и 1 выходам будут мигать. Также при работе нашего скетча. Вместе с данными светодиодами на плате Arduino UNO буду включаться светодиода RX и TX. Но как я говорил в данном случаи ни чего старшного в этом нет.
Описывать все режимы не буду. В видео немного поясняю. Немного корява и может не совсем понятно. Но я думаю по комментариям к коду можно разобраться.
Первый пример бегущих огней на Arduino, последовательное включение одного светодиода с 1 по 10. По пинам на ардуино будет с 0 по 9. Это нужно учитывать при написании кода.
Немного изменим данный пример и сделаем 2 цикла. Получим включение всех светодиодов и выключение в обратном направлении.
Объединив код первого и второго примера получим включение одного светодиода в прямом и обратном направлении. Во втором цикли ставим j-2, потому что у нас пины начинаются с 0, а число светодиодов с 1 до 10. Также чтобы 10 светодиод не включался 2 раза вычитаем еще 1.
Сходящиеся огни. Тут все по аналогии. Добавим переменную в которой будим рассчитывать половину светодиодов. Поэтому количество светодиодов должно быть четным. Либо что-то делать с центральным светодиодом. Можно оставить его постоянно включенным или наоборот всегда включенным.
И по аналогии делаем расходящиеся огни.
Как видно без использования сдвигового регистра код получается намного проще и меньше строчек. Один минус количество ограничено. Максимум 20 светодиодов можно подключить к Arduino Uno и 22 к Arduino NANO. Думаете что я ошибся с цифрами. Подписывайтесь на канал. И в следующем уроке в данном блоке уроков я покажу как можно это реализовать.
Подписывайтесь на мой канал на Youtube и вступайте в группы в Вконтакте и Facebook.
Спасибо за внимание!
Понравилась статья? Поделитесь ею с друзьями:
Arduino-lab.ru
Электронная лаборатория
Бегущий огонёк на Arduino: скетч с массивом
Небольшой и простой проект бегущего огонька. Отличается тем, что можно легко изменить количество светодиодов в схеме.
Комплектующие
Все необходимые комплектующие и даже чуть больше есть в минимальном стартовом наборе Arduino — https://bit.ly/2QgTPvF
- Arduino Uno — https://bit.ly/2P3rCI5
- беспаечная макетная плата — https://bit.ly/3goWOwQ
- светодиоды — https://bit.ly/3swTa6t
- ограничивающий резистор — 220 Ом или аналогичный — https://bit.ly/3swTpyp
- провода папа-папа, мама-мама, папа-мама 10-30 см — https://bit.ly/3n3z0jl
Схема подключения
Количество светодиодов значения не имеет. Что бы все светодиоды загорались, нужно указать в скетче в массиве в первой строке номер порта подключения всех светодиодов.
Скетч
В первой строке перечисляются все порты Arduino, к которым подключены светодиоды. Строка 16 управляет быстротой бега огонька — время указывается в миллисекундах.
Видео
Бегущий огонёк на Arduino: скетч с массивом : 1 комментарий
Тут такой вопрос назрел . Мы прогнали в одну сторону . for (int i=countLeds-1; i>=0; i—) — развернули в обратную сторону . А как поделить по палам ?
Вращающийся светодиодный дисплей на Arduino
В этой статье мы рассмотрим создание на основы платы Arduino, светодиодов и электродвигателя постоянного тока вращающегося по кругу светодиодного дисплея (более наглядно этот процесс вы можете посмотреть в видео, приведенном в конце статьи).
Принцип работы данного дисплея будет основан на принципах работы светодиодной матрицы, которая содержит 8 светодиодов, упорядоченных в форме матрицы 8х1 (8 строк и 1 столбец). Светодиоды упорядочены в форме лестницы, один поверх другого. С помощью этих светодиодов можно будет показывать любую информацию: текст, числа, символы и т.д. Принцип действия нашего проекта будет основан на эффекте восприятия зрения (POV — Perception of Vision), с помощью которого визуально видимое неподвижное изображение можно получить за счет быстро движущихся изображений.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Электродвигатель постоянного тока.
- +3.6V LI-ION battery (литий-ионная батарея).
- Светодиоды (8 шт.) (купить на AliExpress).
- Резисторы 1 кОм (8 шт.) (купить на AliExpress).
Конструкция вращающегося дисплея
Вначале нам будет нужно устойчивое основание. В нашем проекте мы использовали старый DVD-привод, но можно использовать, к примеру, деревянную доску. После этого необходимо сделать отверстие в середине DVD-привода (основания) и вставить в него ось электродвигателя постоянного тока. Убедитесь в том, что отверстие достаточно мало чтобы держать двигатель и что двигатель может свободно вращаться.
![]() | ![]() |
Выровняйте верх электродвигателя чтобы сгладить шероховатости и неровности. Мы для этой цели использовали точечную плату, которую с помощью клея прикрепили к верху электродвигателя.
Прикрепите сверху литий-ионную батарею подходящего размера (если она у вас есть). После этого проверьте все светодиоды на исправность с помощью маленькой батарейки (кнопочной) или любым другим способом. Затем к светодиодам припаяйте резисторы как показано на следующем рисунке.
Соедините спаянные светодиоды и резисторы с платой Arduino Uno как показано на следующем рисунке.
![]() | ![]() |
Поместите полученную конструкция сверху на электродвигатель постоянного тока и закрепите ее с помощью скотча. Финальный вид получившейся конструкции представлен на следующем рисунке.
Работа схемы
Схема устройства представлена на следующем рисунке.
Как видите, схема крайне проста, нам всего лишь нужно соединить 8 светодиодов с платой Arduino Uno:
PORTD, PIN0 —————— LED8 POSITIVE TERMINAL
PORTD, PIN1 —————— LED7 POSITIVE TERMINAL
PORTD, PIN2 —————— LED6 POSITIVE TERMINAL
PORTD, PIN3 —————— LED5 POSITIVE TERMINAL
PORTD, PIN4 —————— LED4 POSITIVE TERMINAL
PORTD, PIN5 —————— LED3POSITIVE TERMINAL
PORTD, PIN6 —————— LED2 POSITIVE TERMINAL
PORTD, PIN7 —————— LED1POSITIVE TERMINAL
Подобно тому как мы добавляли дополнительные столбцы в светодиодной матрице 8х8 чтобы расширить дисплей, в этом проекте вместо добавления светодиодных столбцов мы будем передвигать первый светодиодный столбец на место второго светодиодного столбца с помощью вращения электродвигателя.
Предположим, что мы хотим отобразить букву ‘A’ на нашем вращающемся дисплее. Пусть светодиодная линия (столбец из 8 светодиодов) находится в положении 1 как показано на следующем рисунке.
После этого мы подадим питание на электродвигатель и он начнет вращение своей оси.
В момент времени t=0ms линия будет в позиции 1. На этой позиции на все восемь светодиодов подается питание – от самого верхнего до самого нижнего.
В момент времени t=1ms линия будет в позиции 2. Также, как и на позиции 1, на все восемь светодиодов подается питание – от самого верхнего до самого нижнего.
В момент времени t=2ms линия будет в позиции 3. В этой позиции будут гореть только светодиоды 7,6 и 3, а остальные светодиоды линии будут в выключенном состоянии.
В момент времени t=3ms линия будет в позиции 4. Также, как и в позиции 3, в этот момент времени будут гореть светодиоды 7,6 и 3, а остальные светодиоды линии будут в выключенном состоянии.
В момент времени t=4ms линия будет в позиции 5. Также, как и в позициях 3 и 4, в этот момент времени будут гореть светодиоды 7,6 и 3, а остальные светодиоды линии будут в выключенном состоянии.
В момент времени t=5ms линия будет в позиции 6. В этой позиции на все восемь светодиодов снова подается питание – от самого верхнего до самого нижнего.
В момент времени t=6ms линия будет в позиции 7. В этой позиции все восемь светодиодов продолжат оставаться зажженными.
То есть, зажигая необходимые нам светодиоды в соответствующих позициях линии, мы можем отобразить на вращающемся дисплее нужный нам символ. Если скорость вращения светодиодной линии маленькая, то мы сможем видеть каждый вращающийся светодиодный столбец по отдельности. Но когда скорость вращения электродвигателя будет достаточно большой то мы увидим для рассмотренного нами примера непрерывно горящий символ “A”.
Исходный код программы
Мы запрограммируем плату Arduino таким образом, чтобы при помощи зажигания светодиодов в соответствующие моменты времени на вращающемся дисплее отображался текст “CIRCUIT DIGEST” (в переводе – набор схем).
Запрограммировать работу такого вращающего дисплея несложно. Для начала инициализируем символьный массив 26×8 с помощью инструкции volatile char ALPHA[26][8]. Этот массив будет содержать 8 позиций линии для отображения всего алфавита из 26 символов. То есть 26 строк массива будут представлять 26 символов, а 8 столбцов в каждой строке будут представлять 8 позиций светодиодной линии для отображения этого символа во время вращения. То есть каждый элемент этого массива будет содержать двоичное число, которое будет соответствовать состоянию включен/выключен 8 светодиодов в определенной позиции светодиодной линии. Напоминаем, что линия здесь – это 8 светодиодов, подключенных к плате Arduino в соответствии с приведенной выше схемой.
После этого все, что вам останется сделать, это использовать цикл ‘for’ с 8 итерациями для отображения символа. Если вы хотите отобразить 10 символов, то вам необходимо будет запустить 10 раз цикл ‘for’ с 8 итерациями в каждом. Таким образом, нам для отображения текста CIRCUIT DIGEST потребуется 13 раз запускать цикл ‘for’.
Надеюсь, созданный вами подобным образом вращающийся дисплей будет смотреться красиво. Далее приведен полный текст программы.