Управление адресными светодиодами WS2812B на Arduino: от основ к интерактивному столу
Как работают WS2812B
Каждый светодиод 5050 содержит встроенный драйвер WS2812B. Три кристалла (R, G, B) дают любой цвет. Управление всей лентой — один пин Arduino. Питание 5 В, ~60 мА на светодиод при макс. яркости. Для длинных лент — отдельный 5 В источник, общий GND, резистор 330 Ом на линии данных, конденсатор 100 мкФ на питании.



Базовые примеры (библиотека FastLED)
Лента 20 светодиодов, питание 5 В 6 А, резистор 330 Ом.
Пример 1: поочерёдное зажигание
#include <FastLED.h>
#define LED_PIN 7
#define NUM_LEDS 20
CRGB leds[NUM_LEDS];
void setup() { FastLED.addLeds<WS2812, LED_PIN, GRB>(leds, NUM_LEDS); }
void loop() {
leds[0] = CRGB(255,0,0); FastLED.show(); delay(500);
leds[1] = CRGB(0,255,0); FastLED.show(); delay(500);
leds[2] = CRGB(0,0,255); FastLED.show(); delay(500);
leds[5] = CRGB(150,0,255); FastLED.show(); delay(500);
leds[9] = CRGB(255,200,20); FastLED.show(); delay(500);
leds[14]= CRGB(85,60,180); FastLED.show(); delay(500);
leds[19]= CRGB(50,255,20); FastLED.show(); delay(500);
}
Пример 2: бегущая волна
void loop() {
for (int i=0; i<=19; i++) { leds[i]=CRGB(0,0,255); FastLED.show(); delay(40); }
for (int i=19; i>=0; i--) { leds[i]=CRGB(255,0,0); FastLED.show(); delay(40); }
}
FastLED предлагает множество эффектов — полет фантазии.
Проект: Интерактивный LED-кофейный стол
Коллаборация с Marija (Creativity Hero). 45 WS2812B, 45 ИК-датчиков приближённости, HC-05 Bluetooth, Arduino Mega, БП 5 В 6 А.


Код без Bluetooth (реакция на датчики)
#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
void setup() {
FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(brightness);
for (int pinNo=3; pinNo<=48; pinNo++) pinMode(pinNo, INPUT); // 45 датчиков
}
void loop() {
for (int pinNo=0; pinNo<=NUM_LEDS-1; pinNo++) {
leds[pinNo] = CRGB(0,255,0); // фон — зелёный
if (digitalRead(pinNo+3) == LOW) // датчик сработал
leds[pinNo] = CRGB(0,0,255); // реактивный — синий
}
FastLED.show(); delay(20);
}
Android-приложение (MIT App Inventor)
Палитра цветов, выбор «фон/реактив», слайдер яркости. При касании палитры отправляется строка вида 1R255G100B50E (маркер 1 — реактивный цвет). Слайдер шлёт 3<значение>.


Скачать APK и исходник проекта (.aia) можно по ссылкам в статье.
Код с Bluetooth
#include <SoftwareSerial.h>
#include "FastLED.h"
#define NUM_LEDS 45
#define LED_PIN 2
#define COLOR_ORDER GRB
CRGB leds[NUM_LEDS];
SoftwareSerial Bluetooth(53, 52); // RX, TX
int backR=100, backG=50, backB=10;
int reactiveR=10, reactiveG=50, reactiveB=100;
int brightness=50;
String dataIn="";
void setup() {
FastLED.addLeds<WS2812, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
FastLED.setBrightness(brightness);
Serial.begin(38400); Bluetooth.begin(38400);
for (int pinNo=3; pinNo<=48; pinNo++) pinMode(pinNo, INPUT);
}
void loop() {
if (Bluetooth.available() > 0) {
dataIn = Bluetooth.readString(); delay(20);
if (dataIn.startsWith("1")) { // реактивный цвет
reactiveR = dataIn.substring(dataIn.indexOf("R")+1, dataIn.indexOf("G")).toInt();
reactiveG = dataIn.substring(dataIn.indexOf("G")+1, dataIn.indexOf("B")).toInt();
reactiveB = dataIn.substring(dataIn.indexOf("B")+1, dataIn.indexOf("E")).toInt();
} else if (dataIn.startsWith("2")) { // фоновый цвет
backR = dataIn.substring(dataIn.indexOf("R")+1, dataIn.indexOf("G")).toInt();
backG = dataIn.substring(dataIn.indexOf("G")+1, dataIn.indexOf("B")).toInt();
backB = dataIn.substring(dataIn.indexOf("B")+1, dataIn.indexOf("E")).toInt();
} else if (dataIn.startsWith("3")) { // яркость
brightness = dataIn.substring(dataIn.indexOf("3")+1, dataIn.length()).toInt();
FastLED.setBrightness(brightness);
}
}
for (int pinNo=0; pinNo<=NUM_LEDS-1; pinNo++) {
leds[pinNo] = CRGB(backR, backG, backB);
if (digitalRead(pinNo+3) == LOW)
leds[pinNo] = CRGB(reactiveR, reactiveG, reactiveB);
}
FastLED.show(); delay(20);
}
Заключение
WS2812B открывают огромные возможности для световых инсталляций. FastLED упрощает программирование, а Bluetooth + кастомное приложение делают проект интерактивным. Все файлы для стола (код, приложение, схемы) доступны для скачивания.
Производственный процесс
- Создание универсального ИК-пульта на Arduino: пошаговое руководство
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Удаленное IoT-управление самодельной манипулятором
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Управление Arduino-роботом через Firmata и геймпад Xbox One
- Измерение массы Земли с Arduino: пошаговое руководство по DIY
- Пошаговое руководство: сборка умного четырёхногого робота на Arduino
- Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
- Цифровой компас в реальном времени на Arduino и Processing