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 мкс — библиотеки выдерживают сами
Чем отличается от соседей
Та же лента без резервной линии: сгоревший пиксель гасит всё после себя. Дешевле, и для настольных проектов, где до ленты легко дотянуться паяльником, этого достаточно.
Тот же принцип с резервной линией, но питание 12 В: на длинных отрезках напряжение проседает меньше, и питание подводят реже. Ток на пиксель при этом втрое меньше, а адресуется по-прежнему каждый светодиод.
Контроллер снаружи и управляет сразу тремя светодиодами, питание 12 В. Дешевле на метр, но пиксель здесь — тройка, а не один светодиод.
Когда брать WS2813, а когда хватит WS2812B
WS2813 берут туда, куда потом не добраться: подсветка потолка, вывеска на улице, лента внутри мебели. Один сгоревший светодиод в WS2812B означает разбирать конструкцию и перепаивать, в WS2813 — просто тёмную точку, которую можно и не заметить.
Для проекта на столе, ёлочной гирлянды или первых опытов разница не окупается: WS2812B дешевле, и заменить в ней пиксель — минутное дело. Сама надёжность светодиодов у обеих лент одинаковая, WS2813 не горит реже, она лишь переживает поломку.
Библиотека
FastLED— Тот же FastLED, что для WS2812B, только тип ленты в строке addLeds указывается как WS2813. Adafruit NeoPixel тоже работает: для неё WS2813 ничем не отличается от WS2812B.
Готовый скетч
#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, иначе резервная линия оборвётся на стыке, а вместе с ней — защита.
Первая половина ленты горит, дальше темно
Это не обрыв данных, это просадка питания: дальний конец недополучает пять вольт. Подведите питание и с другого конца ленты.
Что понадобится
- Адресная лента WS2813
- Резистор 330 Ом
- Конденсатор 1000 мкФ
- Блок питания 5 В с запасом по току
- Arduino UNO