RGB светодиодная лента с управлением по одному проводу

Публикация 19.10.2017

WS2812 (WS2812B) - это микросхема с 3-ех канальным шим контроллером. Имеет встроенные диоды трех цветов - RGB. Прелесть этой микросхемы в том, что она может быть подключена цепочкой из 1024 таких микросхем, а управляться будут все одним проводом. Светодиодная лента из таких микросхем идеально подходит для Имбилайт подсветки телевизора, цветомузыки, для сборки цветного дисплея низкого разрешения и пр.

Наибольшую популярность на рынке получили диоды в корпусе SMD5050. WS2812 и WS2812B между собой отличаются только количеством ног. На первой - шесть, на второй четыре. Функционально абсолютено идентичны.

У микросхемы WS2812B есть вход и выход управляющего сигнала. На вход подается управляющий Шим сигнал 400/800 КГц. Сигнал кодирует биты информации о порядковом номере и цвете. Длинный нуливой уровень длительностью 50 мкс означает старт новой последовательности. 

Первая микросхема в сборе считывает и отрезает первые 24 бита информации, зажигает диоды. Остальные биты передает на выход - вход следующей микросхемы. Лента из таких микросхем (светодиодов) 30 раз в секунду принимает новое значение для индикации.

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

Для использования WS2812B в своих проектах есть чудесная библиотека Adafruit_NeoPixel. Она генерирует шим сигнал нужной последовательностью и избавляет вас от необходимости изучать протокол. Достаточно подключить ее и заполнить несколько конфигов.

#include <Adafruit_NeoPixel.h>
#define PIN 6 // номер порта к которому подключен модуль
#define count_led 24 // количество светодиодов 
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(count_led, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
  pixels.begin();
  pixels.show(); // Устанавливаем все светодиоды в состояние "Выключено"
}
void loop() {
  pixels.setPixelColor(1, pixels.Color(0,150,0)); // Назначаем для первого светодиода цвет "Зеленый"
  pixels.setPixelColor(2, pixels.Color(250,150,0)); // Назначаем для первого светодиода цвет "Зеленый"
  pixels.setPixelColor(3, pixels.Color(0,0,250)); // Назначаем для первого светодиода цвет "Синий"
  pixels.show();
}
Файлы для скачивания:
* комментарии публикуются после модерации
Нет комментариев