Главная » Arduino » Простой драйвер светодиодов WS2812B с ручным управлением

Простой драйвер светодиодов WS2812B с ручным управлением

Данная конструкция светодиодного драйвера позволяет управлять цветом и яркостью адресной светодиодной лентой WS2812B с помощью четырех потенциометров.

В основе схемы лежит микроконтроллер Atmega328 (Ардуино), который с помощью АЦП преобразует напряжение с потенциометров в конкретные цифровые значения, отправляемые далее на адресные светодиоды WS2812B.

Каждый из потенциометров подключен к одному из четырех аналоговых входов A0 — A3 (A0 красный, A1 — зеленый, A2 — синий, A3 — яркость). Управляющие сигналы для светодиодов поступают на вывод D6 микроконтроллера.

Простой драйвер светодиодов WS2812B с ручным управлением - схема

Вся конструкция запитана напряжением 12 В, которое понижается до 5 В интегральным стабилизатором 7805. В схему также включены фильтрующие конденсаторы питания и постоянный резистор, подключенный к входу RESET микроконтроллера. Кварцевый резонатор в схеме не использован, т.к. ATmega328 работает от внутреннего генератора на частоте 8МГц.

Скетч

#include <Adafruit_NeoPixel.h>
#define PIN 6
#define NUMPIXELS 30
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int v_red;
int v_green;
int v_blue;
int v_bri;
void setup() {
pinMode(A0,INPUT);
pinMode(A1,INPUT);
pinMode(A2,INPUT);
pinMode(A3,INPUT);
pixels.begin();
}
void loop() {
v_red=map(analogRead(A0),0,1023,0,255);
v_green=map(analogRead(A1),0,1023,0,255);
v_blue=map(analogRead(A2),0,1023,0,255);
v_bri=map(analogRead(A3),0,1023,0,255);
pixels.setBrightness(v_bri);
for(int i=0; i<NUMPIXELS; i++) {
pixels.setPixelColor(i, pixels.Color(v_red,v_green,v_blue));
pixels.show();
}
}

В самом начале кода мы подключаем библиотеку Adafruit NeoPixel для работы со светодиодами. Далее объявляем цифровой вывод (6) для подключения светодиодов и количество светодиодов (30).

Стоит отметить, что заявленное количество светодиодов может быть больше, чем фактически подключенное. Поэтому мы указали 30, хотя на самом деле подключим всего с десяток.

Следующие инструкции инициализируют WS2812B и генерируют четыре переменные типа int, в которых будут храниться числовые значения цветов и яркости.

Цикл setup() содержит только описание входов потенциометров и функцию, активирующую светодиоды. Все управление происходит в цикле loop(). На самом деле мы можем разделить работу на две части. В первой части благодаря функции map() мы присваиваем переменной значение, считанное с аналогового входа и преобразованное так, чтобы оно было сопоставимо для WS2812B.

Проще говоря, АЦП микроконтроллера переводит напряжение с потенциометра в значение от 0 до 1023, а функция map() преобразует его в диапазон от 0 до 255.

Поскольку цветом каждого светодиода нужно управлять отдельно, то для управления цветами использован цикл for, связанный с переменной NUMPIXELS.




1 комментарий

  1. не жирно ли — ATmega328 для 20 строк кода?

    Ответить

Добавить комментарий


.