RGB светодиоды с момента своего появления завоевали большую популярность при создании световых эффектов для развлекательных мероприятий, рекламы, подсветки фонтанов, мостов, праздничного декорирования зданий.
Еще совсем недавно самым простым способом применения RGB светодиодов было управление каждым отдельным цветом, используя соответствующий ему контакт.
С появлением чипа WS2812B появилась возможность управлять RGB светодиодами по одному проводу. Это открыло поистине большие возможности для создания различных световых эффектов.
Сегодня мы расскажем вам, как можно управлять матрицей WS2812B, состоящей из 64 светодиодов.
Что такое WS2812B?
Эта миниатюрная микросхема, используемая для максимально простого управления RGB светодиодами. Из-за небольшого размера ее часто впаивают в сам SMD светодиод. Микросхема, помимо выбора цвета, позволяет регулировать яркость светодиода и различать каждый светодиод в отдельности.
Подключение WS2812B матрицы к Arduino
Данная матрица потребляет много тока, ведь один светодиод потребляет около 30 мА при полной яркости. Соответственно имея 64 светодиода, нам необходимо запитать матрицу током около 2 А от внешнего источника питания, чтобы можно было безопасно использовать устройство.
Почему безопасно? Потому что плата Arduino имеет слишком малую выходную мощность и подключение устройства с большим аппетитом по току может привести к повреждению платы.
Для удобного подключения матрицы к блоку питания и плате управления мы будем использовать модуль питания для макетной платы, к которому будет подключен блок питания 12В и 2,5А. Перед сборкой устройства нам нужно припаять штырьки к матрице. Вся схема должна выглядеть так, как показано ниже:
Подключение достаточно простое, DIN подключается к контакту 6 Arduino Uno, а GND и VCC — к модулю на макетной плате.
После того, как мы собрали схему, мы можем перейти к вопросам программирования. Начнем мы с выбора библиотеки, а именно с библиотеки Adafruit NeoPixel.
После установки библиотеки в IDE, мы можем начать писать первый код. Наша первая программа будет последовательно включать один светодиод. Дополнительная функция будет заключаться в отображении каждого последующего светодиода другим цветом.
В качестве основного цвета выберем красный, он также может быть зеленым или синим. Из-за того, что цвет здесь задается с помощью палитры RGB (КРАСНЫЙ, ЗЕЛЕНЫЙ, СИНИЙ), стоит сделать его одним из этих цветов, это будет самый простой способ!
Как мы знаем, красный цвет в палитре RGB равен (255,0,0). Чтобы изменения цвета с каждым последующим светодиодом были более заметными то, зеленый цвет будем увеличивать в два раза, а синий цвет — в три раза.
Таким образом, первый светодиод будет иметь значение (255,0,0), 10-й светодиод (255, 20, 30) и последний 64-й светодиод (255, 128, 192).
#include <Adafruit_NeoPixel.h> #define PIN 9 //подключен к управляющему контакту DIN-матрицы #define DIODY 64 //количество светодиодов Adafruit_NeoPixel pixels = Adafruit_NeoPixel(DIODY, PIN, NEO_GRB + NEO_KHZ800); void setup() { pixels.begin(); // инициализация библиотеки } void loop() { for(int i=0; i<DIODY; i++) { pixels.setPixelColor(i, 255, i*2, i*3); // Светодиод «i» и цвет (константы 255, i * 2, i * 3) pixels.show(); // отправляем данные delay(500); //пауза 0,5 секунды, пока не загорится следующий светодиод } }
Если предыдущий код сработал, то мы можем перейти к следующей программе, на этот раз мы попытаемся отобразить объект, который изменит свой цвет и размер после нажатия кнопки.
Схема не сильно изменится, мы только добавим кнопку с подтягивающим резистором сопротивлением 10 кОм и несколько проводов, чтобы схема выглядела как на рисунке ниже.
Что касается программы, то здесь изменений чуть больше. Мы добавим таблицу с номерами отдельных светодиодов.
Свечение этих светодиодов отобразит объект. Конечно, вместо того, чтобы создавать массив, мы можем печатать номера светодиодов один за другим и назначать значения индивидуально, но зачем усложнять?
#include <Adafruit_NeoPixel.h> #define PIN 6 //подключен к управляющему контакту DIN-матрицы #define DIODY 64 //количество светодиодов #define piksele 24//количество светящихся светодиодов Adafruit_NeoPixel pixels = Adafruit_NeoPixel(DIODY, PIN, NEO_GRB + NEO_KHZ800); byte ledy[]={3,4,5,6,10,15,17,19,22,24,25,28,29,32,33,36,37,40,42,47,51,52,53,54};//w tablicy umieszczamy numery diod które chcemy zapalić void setup() { pixels.begin(); // инициализация библиотеки pinMode(7, INPUT); } void loop() { if(digitalRead(7==HIGH))//если кнопка нажата { for(int i=0; i<piksele; i++)//берем последовательно значения из массива { pixels.setPixelColor(ledy[i], 255, 0, 0);//светодиоды pixels.show(); // отправляем данные delay(50); } } else { for(int i=0; i<piksele; i++) { pixels.setPixelColor(ledy[i], 0, 255, 0); pixels.show(); // отправляем данные delay(50); } } delay(500); }
То, что будет отображаться, увидят только люди, загрузившие программу дома!
Как видите, работа светодиодной матрицы на основе RGB-светодиодов с драйвером WS2812B проста и приятна. Безусловно, это гораздо лучшее решение, чем управление одиночными RBG светодиодами.