Новогодняя подсветка своими руками (часть 2)
Привет, Пикабу!
В комментариях к прошлому посту многие интересовались реализацией управления светодиодной лентой с Arduino.
Зачем ленте вообще управление с Arduino? Во первых мы получаем неограниченые функлии управления лентой, например я настроил таймер до нового года, чем нг ближе, тем теплее цвет. Можно постараться и настроить управление со смартфона, соорудить своего пода умный дом. В общем контроль с Arduino расширяет применение ленты.
Интересно? Тогда продолжим!
Для управления нам потребуется сделать собственный димер. Сделать его несложно, просто берем силовые ключи и управляем ими с помощью ШИМ сигнала.
В качестве мозгов идеально подходит Arduino. В её программу можно записать любой алгоритм изменения цветов, а также её можно управлять как с помощью модулей Arduino, так и удаленно по Ethernet, Ик-порту, Bluetooth, используя соответствующие модули.
Я использую Arduino Leonardo, т.к она одна из самых дешевых.
Для подключения Arduino к ленте нам потребуется модуль для управления двигателями. На нем установлены мощные ключи на 12В и он идеально подходит для наших целей.
Примером такого модуля является «L298N Module Dual H Bridge Stepper Motor Driver Board Modules for Arduino Smart Car FZ0407». Такой модуль основан на микросхеме L298N, которая представляет из себя 2 моста. Однако мостовое включение полезно для двигателя (от этого он может менять направление вращения), а в случае RGB ленты, оно бесполезное.
Мы будем использовать не весь функционал этой микросхемы, а только 3 её нижних ключа, подключив ленту как показано на рисунке.
А вот схема итогового подключения:
В данной схеме питание подается на модуль управления двигателями, в нем стоит понижающий источник питания на 5В, и эти 5В я подаю на вход Vin питания Arduino.
Управляется RGB лента с помощью команд analogWrite, которая настраивает выход для формирования ШИМ сигнала.
Исходный код программы для arduino:
#define GRBLED_PIN_R 9 // пин для канала R
#define GRBLED_PIN_G 10 // пин для канала G
#define GRBLED_PIN_B 11 // пин для канала B
int rgbled_r=0, rgbled_g=0, rgbled_b=0;
void setup(){
//enable serial datada print
Serial.begin(9600);
Serial.println("RBG LED v 0.1");
// RGBLED
pinMode(GRBLED_PIN_R, OUTPUT);
pinMode(GRBLED_PIN_G, OUTPUT);
pinMode(GRBLED_PIN_B, OUTPUT);
}
void loop(){
// change color
rgbled_r = (rgbled_r+1)%1024;
rgbled_g = (rgbled_g+2)%1024;
rgbled_b = (rgbled_b+3)%1024;
// Output
Z1_output_rgbled();
delay(1);
}
void Z1_output_rgbled() {
analogWrite(GRBLED_PIN_R, rgbled_r);
analogWrite(GRBLED_PIN_G, rgbled_g);
analogWrite(GRBLED_PIN_B, rgbled_b);
}
Кстати, итоговая стоимость получилась в районе 1300 рублей, что в целом недорого.
P.s: мой первый длиннопост, поэтому не все идеально :-)
Всех с новым годом!