В настоящее время адресные светодиодной ленты (NeoPixel LEDs) на базе светодиодов WS2812 находят широкое применение в различных областях. В данной статье мы рассмотрим подключение подобной ленты к плате Arduino и научимся управлять ею в различных режимах.
Ранее на нашем сайте применение адресной светодиодной ленты (NeoPixel LEDs) рассматривалось в следующих проектах:
- комнатный термометр на Arduino Nano;
- связь двух плат Arduino на расстоянии 3 км с помощью Lora E32.
Почему NeoPixel?
Способность управлять отдельно каждым светодиодом в адресной светодиодной ленте дает вам возможность создать уникальные визуальный эффекты для своих проектов. Но помните о том, что если вам требуются очень высокие скорости переключения светодиодов, то использование подобной адресной светодиодной ленты нежелательно. Еще одним достоинством адресной светодиодной ленты NeoPixel является ее низкая цена по сравнению с другими типами адресуемых светодиодов. Светодиоды NeoPixel доступны в форме колец, лент, прямоугольников и поверхностей круглой формы – вы можете выбрать любой ее тип для своих проектов.
Примечание: чем больше светодиодов NeoPixel вы используете, тем больше оперативной памяти и больше мощности необходимо для управления ими, также при этом увеличивается время обработки, поэтому выбирайте оптимальное количество светодиодов NeoPixel исходя из возможностей используемого вами микроконтроллера.
Временная диаграмма управления модулем WS2812B
Если аппаратные соединения между модулями WS2812B просты – питание (5 В и GND) и данные (выходной сигнал одного модуля идет на вход следующего модуля), – то о протоколе связи этого сказать нельзя. В модулях WS2812B используется однопроводный интерфейс с протоколом NRZ. Пакет данных, содержащих значения RGB, посылается со скоростью 800 Кбит/с.
Рисунок 2. | Представление «0» и «1» в коде NRZ для модуля WS2812B. |
Пакет передается после периода сброса (RET или RES), когда сигнал данных удерживается на низком уровне более 50 мкс. Как видно из Рисунка 2, и «0», и «1» начинаются с «лог. 1», а разница между ними заключается в относительной длительности состояний высокого (TxH) и низкого (TxL) уровней (Таблица 1).
Таблица 1. | Временные соотношения сигналов передачи данных | ||
T0H | Код 0, длительность высокого уровня | 0.35 мкс | ±150 нс |
T1H | Код 1, длительность высокого уровня | 0.9 мкс | ±150 нс |
T0L | Код 0, длительность низкого уровня | 0.9 мкс | ±150 нс |
T1L | Код 1, длительность низкого уровня | 0.35 мкс | ±150 нс |
Время передачи данных (TxH + TxL = 1.25 мкс ± 150 нс) | |||
СБРОС | Длительность низкого уровня | Более 50 мкс |
Поскольку цвет каждого RGB светодиода задается с использованием 8 бит, для определения цвета каждого модуля WS2812B требуется 24 бита. На Рисунке 3 показана 24-битная последовательность, адресованная одному модулю WS2812B. Данные посылаются в порядке G-R-B, причем младший значащий бит передается первым.
Рисунок 3. | 24-битный пакет данных для модуля WS2812B. Младший значащий бит зеленого цвета (G7) передается первым. |
Как уже отмечалось, каждому модулю WS2812B требуются 24 бита данных. После того, как первый модуль цепочки примет 24 бита, он будет смотреть, имеются ли еще данные на его входе. Если поступление данных продолжается, он пропускает их через себя на следующий модуль цепочки. Модули делают это до тех пор, пока не прекратится поступление данных, после чего они используют принятые значения для управления RGB светодиодами.
Схема проекта
Схема подключения адресной светодиодной ленты WS2812 к плате Arduino представлена на следующем рисунке.
Резистор в схеме необходим для защиты от повреждений светодиодов NeoPixel и для корректной передачи данных. Наилучшее расстояние для связи между модулем светодиодов NeoPixel и микроконтроллерной платой составляет от 1 до 2 метров.
Примечание: если вы используете адресную светодиодную ленту с большим количеством светодиодов, то в этом случае рекомендуется подключать конденсатор большой емкости (приблизительно 1000 мкФ) параллельно + и – источника питающего напряжения.
Выбор контроллера для адресной ленты
При выборе SPI контроллера для умных лент нужно рассчитывать не на мощность подсветки, как обычно это делается, а на количество пикселей.
Данные параметр всегда указывается на корпусе изделия.
Что касается выбора мощности блока питания, то здесь ориентируйтесь на следующий показатель. Один светодиод для моделей sw2812b – это примерно 60мА при белом свете.
Считайте их общее количество в ленте, берите запас в 30% и подбирайте подходящий блок.
От блока питания провода подключаются на контроллер, а с другой стороны контроллера запитывается сама лента.
Питание можно подать и напрямую, но наличие контроллера обязательно.
Объяснение программы Arduino для работы с адресной светодиодной лентой
Прежде чем начинать работу с адресной светодиодной лентой в Arduino необходимо скачать и установить библиотеку для нее — NeoPixel Adafruit library.
Arduino
1 | Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); |
Эта функция определяет число светодиодов и контакт Arduino для управления ими.
Arduino
1 | pixels.begin(); |
Эта функция инициализирует адресную светодиодную ленту.
Arduino
1 | pixel.setBrightness(b); |
Функция, устанавливающая яркость свечения светодиодов. 1 – минимальная яркость, 255 – максимальная.
Arduino
1 | pixels.setPixelColor(Wich LED,Wich color(Red,Green,Blue)); |
Эта функция задает цвет свечения светодиода с помощью системы RGB, при этом задается номер светодиода (от 0 до NUMPIXELS-1).
Arduino
1 | pixels.show(); |
Функция, которая активирует заданные настройки, то есть включает светодиоды с заданными ранее настройками.
Теперь рассмотрим примеры программ, позволяющие реализовать различные варианты управления светодиодами в адресной светодиодной ленте.
Технические характеристики
Наиболее качественной и современной является лента ws2812b.
От своих предшественников отличается:
- компактностью;
- простым управлением;
- неограниченным кол-вом последовательно включенных светодиодов.
Максимальный ток, подаваемый на один светодиод ws2812b – 60 миллиампер.
Рабочее напряжение – 5 вольт.
Для каждого светодиода 256 градаций яркости.
Режим радуги для светодиодов NeoPixel
В сети есть интересный инструмент для удобного создания различных эффектов для адресной светодиодной ленты NeoPixel — NeoPixel Effects Generator. В нем вы можете задать число светодиодов и контакт платы Arduino для управления ими и после создания в этом генераторе необходимых эффектов для вашей ленты вы можете в этом генераторе сформировать готовый код для платы Arduino.
Для этого выполните следующую последовательность шагов.
1. На сайте генератора нажмите Add Led Strip (добавить светодиодную ленту).
2. Задайте количество светодиодов в ленте и номер контакта Arduino, с которого будет осуществляться управление ими.
3. После этого нажмите на Add Effect (добавить эффект) и выберите желаемый эффект.
4. Задайте цвет свечения светодиодов.
5. Нажмите на “generate Arduino code” и после этого для вас будет сформирован код программы для Arduino, который вы можете непосредственно вставить в Arduino IDE.
1Описание RGB светодиодов WS2812 и WS2812B
Светодиод WS2812 (или его модификация WS2812B, которая и будет использована в данной статье) представляет собой RGB светодиод. То есть в одном корпусе представлены сразу три светодиода разных цветов: красный, зелёный и синий.
Внешний вид и габариты светодиодов WS2812
Светодиод WS2812 имеет 6 выводов, в то время как WS2812B – лишь 4.
Назначение выводов светодиода WS2812
Номер вывода | Название | Назначение вывода |
1 | Dout | Выход управляющего сигнала |
2 | Din | Вход управляющего сигнала |
3 | VCC | Питание управляющей цепи, 6…7 В |
4 | NC | Не подключен |
5 | VDD | Питание светодиода, 6…7 В |
6 | Gnd | Земля |
А вот назначение выводов светодиода WS2812B:
Внешний вид и габариты светодиодов WS2812B
Назначение выводов светодиода WS2812B
Номер вывода | Название | Назначение вывода |
1 | VDD | Питание светодиода, 3,5…5,3 В |
2 | Dout | Выход управляющего сигнала |
3 | Gnd | Земля |
4 | Din | Вход управляющего сигнала |
Главное преимущество данных светодиодов в том, что они могут соединяться в цепочку последовательно друг за другом, их можно соединять в ленты или собирать из них панели. При этом управление осуществляется всего по одному проводу. Это возможно благодаря тому, что каждый светодиод содержит в своём составе контроллер, который и управляет цветом и яркостью трёх каналов RGB. Из-за того, что управлять можно отдельно каждым светодиодом WS2812 в цепочке, такие светодиоды называются «адресные». На сегодняшний день это самые «продвинутые» светодиоды для организации больших массивов светодиодов.
Для примера на схеме показано последовательное подключение трёх светодиодов. На вход DIN первого светодиода подаётся управляющий сигнал. Светодиод обрабатывает его и передаёт далее со своего выхода DOUT на вход следующего в цепочке светодиода. И так сигнал проходит по всей цепочке светодиодов, каждый из которых считывает свою управляющую последовательность и изменяет свой цвет и интенсивность в соответствии с пришедшей командой.
Последовательное подключение светодиодов WS2812B
На фотографии представлена панель размером 10 на 10 светодиодов, с которой мы и будем экспериментировать. Как видно, на нижней части панели светодиоды соединены в единую цепочку.
Верхняя сторона панели светодиодов WS2812B | Нижняя сторона панели из светодиодов WS2812B |
Обратите внимание, что светодиодная панель весьма «прожорлива». На иллюстрации ниже это можно видеть по показаниям встроенного датчика тока источника питания: панель из ста светодиодов WS2812B потребляет ток более 3 амперов
Правда, почти все светодиоды в данном случае включены на максимальную яркость белым цветом (самый энергозатратный режим, т.к. для обеспечения белого свечения используются все три канала RGB на максимальной яркости).
Управление светодиодной панелью WS2812B
Приблизительное потребление вашего устройства можно оценть так. Один канал светодиода на максимальной яркости потребляет около 20 мА. В одном корпусе располагаются 3 светодиода. Следовательно, один RGB светодиод в максимуме потребляет до 60 мА тока. Умножаете это число на количество светодиодов в вашей матрице или ленте – это и будет максимально возможное потребление, и ваш источник питания должен иметь возможность выдать такой ток.
Режимы работы Софтбокса
Софтбокс умеет выполнять свои непосредственные обязанности: давать мягкий рассеянный свет с регулировкой яркости. Два дополнительных регулятора позволяют менять цветовой тон и насыщенность. Т.е. Можно светить любым цветом задавая его в цветовой модели HSV (HSB — Hue, Saturation, Brightness — тон, насыщенность, яркость). Но это всего ли режим 1 из 7 возможных. Полный список режимов такой:
- Статический HSB — тон, насыщенность, яркость
- Динамический HSB — тон автоматически меняется от минимально к максимальному значению
- Радуга
- Светляки
- Радужный шум
- Облачный шум
- Лавовый шум
Все динамические эффекты имеют возможность регулировки яркости, динамики и масштаба.
Как спаять все компоненты
Тестовая сборка на макетной плате
Данную самоделку будем делать по базовому проекту Алекса Гайвера и дальшейшему развитию данной идеи в виде проекта GyverPanelWiFi от vvip-68.
Изначально разработчики предлагают достаточно сложную схему:
Схема с использованием платы NodeMcu
Однако, все возможности проекта нужны далеко не каждому пользователю. Можете запросто убрать динамик (он используется для будильника), плату с разъемом для карты памяти (она нужна для GIF-ок и видео), дисплей для индикации режимов и кнопку для их ручного переключения.
Если упростить проект, будет достаточно собрать нечто подобное:
Схема с использованием платы Wemos D1 mini
Даже из этой схемы можно выкинуть блок с картой памяти и пользоваться стандартным набором эффектов.
Получается, что нужно всего лишь соединить управляющую плату с диодной лентой и подать питание на оба элемента. Кнопка переключения режимов здесь используется опционально.
Соединять диодную ленту в матрицу можно любым из способов по примеру выше. Последовательное подключение (зигзаг) вообще не требует пайки, куски ленты соединяются между собой коннекторами. Будет достаточно припаять два провода на питание в начале ленты и логический контакт на плату управления.
Если длина ленты окажется слишком большой, рекомендую подавать питание не в начале или конце, а подкинуть контакты с блока питания в разрыв примерно посередине.
На сборку прошлогодней матрицы у меня ушло несколько часов, а гирлянду из этого проекта собрал за 45 минут. Все благодаря китайцам, которые вместо спаянных диодов начали выпускать готовые ленты с коннекторами. А ведь количество “лампочек” в гирлянде увеличилось в 10 раз!
Не забудьте предусмотреть разъем для быстрого включения и отключения блока управления, чтобы при необходимости его можно было перепрошить.
Зачем так рано
Большую часть компонентов такой гирлянды не найти в обычных магазинах. Чтобы собрать весь необходимый комплект, потребуется потратить много времени и обойти несколько магазинов электроники или радиорынков.
Лучше всего заказать все и сразу на AliExpress. Компоненты успеют прийти к новогодним праздникам и вы с легкостью повторите данный проект на зависть всем соседям.
В прошлом году мы уже делали подобную гирлянду на окно. Лично меня данная штука радовала всю зиму, соседи и просто прохожие часто останавливались перед окнами, чтобы понаблюдать за причудливыми анимациями и световыми эффектами.
В этот раз предлагаю модернизировать уже знакомый проект и собрать более крутую гирлянду. Если прошлая версия состояла всего из 100 светодиодов, то новый проект будет содержать минимум 1000 RGB адресных светодиодов! Это позволяет выводить не только более детализированные эффекты, но и демонстрировать GIF-ки, анимацию и даже специально подготовленное видео.
По сути мы превратим окна квартиры или балкона в LEG-панель с небольшим разрешением.