ELECTRONICS

WS2813 и Arduino: чем отличается от WS2812B, схема подключения и скетч FastLED

Адресные светодиоды и лентыСкетч проверен компиляцией

WS2813 — это WS2812B, у которой починили главную беду. У обычной адресной ленты сигнал идёт по цепочке, и один сгоревший светодиод гасит всё, что стоит после него. У WS2813 к каждому светодиоду подходят две линии данных: основная DIN и резервная BIN, взятая от светодиода через один. Если какой-то пиксель умер, следующий берёт сигнал по резервной линии, и лента продолжает работать — тёмным остаётся только сам сгоревший.

По питанию, протоколу и библиотекам это та же пятивольтовая лента: FastLED и NeoPixel работают с ней без переделок, схема подключения совпадает с WS2812B. Разница видна только в цене и в том, что лента переживает поломку одного пикселя.

Схема подключения

Наведите на провод или нажмите на него — расскажу, зачем он нужен.

Распиновка

ПроводКуда и зачем
+5VПитание 5 В. Лента — от отдельного источника, с запасом по току.
GNDЗемля. Обязательно общая с платой.
DI (DIN)Основной вход данных. Сюда приходит сигнал от Arduino через резистор.
BI (BIN)Резервный вход данных. Внутри ленты уже соединён с выходом позапрошлого пикселя; на входе ленты его соединяют с землёй.
DO (DOUT)Выход данных на следующий пиксель. Наружу нужен только для сращивания отрезков.

Характеристики

Питание
5 В (3,5–5,3 В)
Светодиодов на один контроллер
1 — адресуется каждый
Линии данных
две: DI и резервная BI
Ток одного светодиода
до 60 мА по паспорту, около 36 мА на белом на практике
Ток метра ленты (60 шт.)
до 3,6 А, считать с запасом
Частота ШИМ
около 2 кГц — не мерцает на видео, у WS2812B 400 Гц
Протокол
однопроводный 800 кГц, совместим с WS2812B
Пауза сброса
не меньше 280 мкс — библиотеки выдерживают сами

Чем отличается от соседей

Та же лента без резервной линии: сгоревший пиксель гасит всё после себя. Дешевле, и для настольных проектов, где до ленты легко дотянуться паяльником, этого достаточно.

WS2815

Тот же принцип с резервной линией, но питание 12 В: на длинных отрезках напряжение проседает меньше, и питание подводят реже. Ток на пиксель при этом втрое меньше, а адресуется по-прежнему каждый светодиод.

Контроллер снаружи и управляет сразу тремя светодиодами, питание 12 В. Дешевле на метр, но пиксель здесь — тройка, а не один светодиод.

Когда брать WS2813, а когда хватит WS2812B

WS2813 берут туда, куда потом не добраться: подсветка потолка, вывеска на улице, лента внутри мебели. Один сгоревший светодиод в WS2812B означает разбирать конструкцию и перепаивать, в WS2813 — просто тёмную точку, которую можно и не заметить.

Для проекта на столе, ёлочной гирлянды или первых опытов разница не окупается: WS2812B дешевле, и заменить в ней пиксель — минутное дело. Сама надёжность светодиодов у обеих лент одинаковая, WS2813 не горит реже, она лишь переживает поломку.

Библиотека

FastLEDТот же FastLED, что для WS2812B, только тип ленты в строке addLeds указывается как WS2813. Adafruit NeoPixel тоже работает: для неё WS2813 ничем не отличается от WS2812B.

Методы FastLED, пример и типичные ошибки

Готовый скетч

#include <FastLED.h>

#define LED_PIN     6
#define NUM_LEDS    30     // сколько светодиодов в ленте
#define BRIGHTNESS  80     // при питании от платы держите ниже 100

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<WS2813, LED_PIN, GRB>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
}

void loop() {
  // бегущая точка: по ней сразу видно, что все пиксели живы
  static int pos = 0;
  fadeToBlackBy(leds, NUM_LEDS, 40);   // хвост за точкой плавно гаснет
  leds[pos] = CRGB::White;
  FastLED.show();
  pos = (pos + 1) % NUM_LEDS;
  delay(30);
}

Скетч собирается arduino-cli под Arduino UNO

Порядок цветов у WS2813 такой же, как у WS2812B, — GRB. Если указать WS2812B вместо WS2813, лента тоже заработает: протокол совпадает, разница только в паузе сброса, которую FastLED для WS2813 делает длиннее.

Частые ошибки

Ждали, что лента не будет гореть

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

К плате подключили BI вместо DI

На входном разъёме ленты два сигнальных провода, и они подписаны мелко. По BI лента тоже может зажечься, но с пропуском первого пикселя и с помехами. Ищите DI или DIN.

Резервный вход первого пикселя болтается в воздухе

Незанятый BI ловит наводки, и первые пиксели иногда вспыхивают сами. Производитель советует соединять BI первого светодиода с землёй.

Лента срослась из двух отрезков и второй не работает

При сращивании нужно соединить не только DO с DI, но и BO с BI, иначе резервная линия оборвётся на стыке, а вместе с ней — защита.

Первая половина ленты горит, дальше темно

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

Что понадобится