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

Развитие светотехники на основе светодиодов стремительно продолжается. Еще вчера чудом казались RGB-ленты с управлением от контроллера, яркость и цвет которых можно регулировать с помощью пульта дистанционного управления. Сегодня на рынке появились светильники с еще более широкими возможностями.

Светодиодная лента на базе WS2812B

Отличие адресной LED-ленты от стандартной RGB заключается в том, что яркость и соотношение цветов каждого элемента регулируются отдельно. Это позволяет получить световые эффекты, принципиально недоступные для других типов осветительных приборов. Управление свечением адресной LED-ленты производится известным способом – с помощью широтно-импульсной модуляции. Особенностью системы является оснащение каждого светодиода своим собственным ШИМ-контроллером. Микросхема WS2812B представляет собой трехцветный светоизлучающий диод и схему управления, объединенные в одном корпусе.

Как подключить адресную светодиодную ленту WS2812B к Ардуино
Внешний вид светодиода с драйвером.

Элементы объединяются в ленту по питанию параллельно, а управляются по последовательной шине – выход первого элемента подключается к управляющему входу второго и т.д. В большинстве случаев последовательные шины строятся на двух линиях, по одной из которых передаются стробы (синхроимпульсы), а по другой – данные.

Внешний вид адресной ленты.
Внешний вид адресной ленты.

Шина управления микросхемы WS2812B состоит из одной линии – по ней передаются данные. Данные кодируются в виде импульсов постоянной частоты, но с разной скважностью. Один импульс – один бит. Длительность каждого бита составляет 1,25 мкс, нулевой бит состоит из высокого уровня длительностью 0,4 мкс и низкого 0,85 мкс. Единица выглядит, как высокий уровень в течение 0,8 мкс и низкий 0,45 мкс. Каждому светодиоду отправляется посылка из 24 бит (3 байт), дальше следует пауза в виде низкого уровня в течение 50 мкс. Это означает, что дальше будут передаваться данные для следующего LED, и так для всех элементов цепочки. Завершается передача данных паузой в 100 мкс. Это означает, что цикл программирования ленты завершен, и можно отправлять следующий набор пакетов данных.

Данные для управления адресной лентой.
Данные для управления адресной лентой.

Такой протокол позволяет обойтись для передачи данных одной линией, но требует точности выдержки временных интервалов. Расхождение допускается не более 150 нс. Кроме того, помехозащищенность такой шины очень низкая. Любые помехи достаточной амплитуды могут быть восприняты контроллером, как данные. Это накладывает ограничения на длину проводников от схемы управления. С другой стороны, это дает возможность проверки исправности ленты без дополнительных приборов. Если на светильник подать питание и дотронуться пальцем до контактной площадки шины управления, некоторые светодиоды могут хаотически загораться и гаснуть.

Технические характеристики элементов WS2812B

Для создания систем освещения на основе адресной ленты надо знать важные параметры светоизлучающих элементов.

Габариты LED5×5 мм
Частота модуляции ШИМ400 Гц
Потребляемый ток на максимальной яркости60 мА на один элемент
Напряжение питания5 вольт
Совет эксперта
Стариков Михаил
Стариков Михаил
Старший инженер-электроник
Задать вопрос
Потребляемая светильником мощность достаточно высока. Она определяется не только током, необходимым для инициации свечения p-n переходов, но и коммутационными потерями при формировании ШИМ. Для полотна из 15 элементов источник питания и проводники рассчитываются на ток не менее 1 ампера.

Arduino и WS2812B

Популярная в мире платформа Ардуино позволяет создавать скетчи (программы) для управления адресными лентами. Возможности системы достаточно широки, но если их на каком-то уровне перестанет хватать, полученных навыков будет достаточно, чтобы безболезненно перейти на С++ или даже на ассемблер. Хотя начальные знания проще получить на Arduino.

Подключение ленты на базе WS2812B к Arduino Uno (Nano)

На первом этапе достаточно простых плат Arduino Уно или Ардуино Нано. В дальнейшем для построения более сложных систем можно будет использовать более сложные платы. При физическом подключении адресной светодиодной ленты к плате Arduino надо следить за соблюдением нескольких условий:

  • из-за низкой помехоустойчивости соединительные проводники линии данных должны быть как можно короче (надо постараться сделать их в пределах 10 см);
  • подключать проводник данных надо к свободному цифровому выходу платы Arduino – он потом будет указан программно;
  • из-за высокого энергопотребления не надо запитывать ленту от платы – для этой цели предусматриваются отдельные источники питания.

Общий провод питания светильника и Ардуино надо соединить.

Схема подключения WS2812B.
Схема подключения ленты WS2812B.

Читайте также

Как подключить светодиод к плате Arduino

 

Основы программного управления WS2812B

Уже упоминалось, что для управления микросхемами WS2812B надо сформировать импульсы с определенной длиной, выдерживая высокую точность. В языке Ардуино для формирования коротких импульсов есть команды delayMicroseconds и micros. Проблема в том, что разрешение этих команд составляет 4 микросекунды. То есть, сформировать временные задержки с заданной точностью не получится. Надо переходить к средствам С++ или Ассемблера. А можно организовать управление адресной светодиодной лентой через Arduino с помощью специально созданных для этого библиотек. Начать знакомство можно с программы Blink, заставляющей светоизлучающие элементы мигать.

FastLed

Эта библиотека универсальна. Помимо адресной ленты она поддерживает множество устройств, включая ленты с управлением по интерфейсу SPI. Обладает широкими возможностями.

Сначала библиотеку надо подключить. Это делается до блока setup, а строка выглядит так:

#include <FastLED.h>

Следующим шагом надо создать массив для хранения цветов каждого светоизлучающего диода. Он будет иметь наименование strip и размерность 15 – по числу элементов (этому параметру лучше назначить константу).

CRGB strip[15]

В блоке setup надо указать, с какой лентой будет работать скетч:

void setup() {

FastLED.addLeds< WS2812B, 7, RGB>(strip, 15);

int g;

}

Параметр RGB устанавливает порядок чередования цветов, 15 означает количество светодиодов, 7 – номер вывода, назначенного для управления (последнему параметру тоже лучше назначить константу).

Блок loop начинается с цикла, который последовательно записывает в каждый раздел массива Red (красное свечение):

for (g=0; g< 15;g++)

{strip[g]=CRGB::Red;}

Далее сформированный массив отправляется в светильник:

FastLED.show();

Задержка 1000 миллисекунд (секунда):

delay(1000);

Затем можно таким же способом выключить все элементы, записав в них черный цвет.

for (int g=0; g< 15;g++)

{strip[g]=CRGB::Black;}

FastLED.show();

delay(1000);

Скетч для мигающей ленты на основе FastLed.
Скетч для мигающей ленты на основе FastLed.

После компиляции и загрузки скетча лента будет мигать с периодом в 2 секунды. Если надо управлять каждой цветовой составляющей раздельно, то вместо строки {strip[g]=CRGB::Red;} используется несколько строк:

{

strip[g].r=100;// устанавливается уровень свечения красного элемента

strip[g].g=11;// то же для зеленого

strip[g].b=250;// то же для синего

}

NeoPixel

Эта библиотека работает только с LED-кольцами NeoPixel Ring, но она менее ресурсоемка и содержит только самое необходимое. На языке Ардуино программа выглядит так:

#include <Adafruit_NeoPixel.h>

Как и в предыдущем случае подключается библиотека, и декларируется объект lenta:

Adafruit_NeoPixel lenta=Adafruit_NeoPixel(15, 6);// где 15 – количество элементов, а 6 – назначенный вывод

В блоке setup инициализируется лента:

void setup() {

lenta.begin ()

}

В блоке loop все элементы засвечиваются красным, переменная передается в ленту и создается задержка в 1 секунду:

for (int y=0; у<15;y++)// 15 – количество элементов в светильнике

{lenta.setPixelColor(y, lenta.Color(255,0,0))};

lenta.show();

delay(1000);

Прекращается свечение записью черного цвета:

for (int y=0; y< 15;y++)

{ lenta.setPixelColor(y, lenta.Color(0,0,0))};

lenta.show();

delay(1000);

Скетч для программы Blink на основе NeoPixel.
Скетч для программы Blink на основе NeoPixel.

Видео-урок: Образцы визуальных эффектов с использованием адресных лент.


Научившись мигать светодиодами, можно продолжить занятия и научиться создавать цветовые эффекты, включая популярные «Радуга» и «Северное сияние» с плавными переходами. Адресные светодиоды WS2812B и Ардуино дают для этого практически безграничные возможности.

Фото аватара
Панков Алексей

Инженер-электрик. Специалист по проектированию и эксплуатации электротехнических изделий.

Оцените автора
( Пока оценок нет )
Светилов
Добавить комментарий