Для того, щоб узгодити таке навантаження і Arduino, використовуємо поширений драйвер двигуна L298N, він цілком впорається з таким навантаженням, як 5 метрів світлодіодної стрічки, підтримує ШІМ а головне має 4 канали (з яких ми використовуємо 3), під різні колірні канали RGB ( червоний, зелений синій).
Схема підключень:
//підключення драйвера L298N
#define LED_R 11 // Pin D11 --> червоний
#define LED_G 10 // Pin D10 --> зелений
#define LED_B 9 // Pin D9 --> синій
int red();
int green();
int blue();
void setup () {
pinMode( LED_R, OUTPUT );
pinMode( LED_G, OUTPUT );
pinMode( LED_B, OUTPUT );
analogWrite (LED_R,255);
analogWrite (LED_G,255);
analogWrite (LED_B,255);
}
void loop () {
//-------------------------------------------------------------------------------------------//
// //
// основний цикл програми!!! //
// //
//-------------------------------------------------------------------------------------------//
//-------------вмикаємо і гасимо червоний
{
int x = 1;
for (int i = 0; i > -1; i = i + x){
red(i);
if (i == 255) x = -1; // перемикання в сторону гашення на максимумі
delay(5);
}
}
//-------------вмикаємо і гасимо зеленый
{
int x = 1;
for (int i = 0; i > -1; i = i + x){
green(i);
if (i == 255) x = -1; // перемикання в сторону гашення на максимумі
delay(5);
}
}
//-------------вмикаємо і гасимо синий
{
int x = 1;
for (int i = 0; i > -1; i = i + x){
blue(i);
if (i == 255) x = -1; // перемикання в сторону гашення на максимумі
delay(5);
}
}
//-------------підморгуємо кожним кольором по три рази
red(0);
delay(100);
red(80);
delay(100);
red(0);
delay(100);
red(160);
delay(100);
red(0);
delay(100);
red(255);
delay(100);
red(0);
delay(100);
green(80);
delay(100);
green(0);
delay(100);
green(160);
delay(100);
green(0);
delay(100);
green(255);
delay(100);
green(0);
delay(100);
blue(80);
delay(100);
blue(0);
delay(100);
blue(160);
delay(100);
blue(0);
delay(100);
blue(255);
delay(100);
blue(0);
//-------------мигаємо випадковим кольором з випадковою яскравістю
for (int i=0; i <= 50; i++){
int color=(random(3)+1);
if (color=1) {red(random(256)); delay(100);red(0);}
if (color=2) {green(random(256)); delay(100);green(0);}
if (color=3) {blue(random(256)); delay(100);blue(0);}
}
//-------------------------------------------------------------------------------------------//
// //
// Завершуємо основний цикл !!! //
// //
//-------------------------------------------------------------------------------------------//
}
//***************************************************
void red(int s){
analogWrite (LED_R,255-s);
}
//***************************************************
void green(int s){
analogWrite (LED_G,255-s);
}
//***************************************************
void blue(int s){
analogWrite (LED_B,255-s);
}