Come usare Arduino per pilotare strip led RGB
La tecnologia di illuminazione a led si è ormai evoluta ed inizia ad essere presente in modo pronunciato in molti ambienti, dalla casa agli uffici fino ad arrivare all’illuminazione pubblica (vedi progetto di lampada di cortesia a led).
I vantaggi in termini di risparmio energetico sono enormi e la qualità della luce emessa sta raggiungendo un comfort visivo soddisfacente.
Anche nell’arredamento troviamo soluzioni molto interessanti che vanno dalla lampada da salotto multicolore alle luci di cortesia nei piani cottura oppure alle barre led impermeabili poste nel box doccia.
Vista la nostra passione per l’auto-costruzione possiamo realizzare un dispositivo basato su Arduino per pilotare una barra led RGB. Per questo tutorial ho usato una Arduino Leonardo e uno spezzone di 10 cm di una strip led RGB da un metro. Questo modello viene alimentato a 12Vdc e un modulo assorbe, con tutti i led accesi circa 55mA (quindi un metro assorbe circa 550mA).
Un elemento RGB è composto da 3 LED distinti (LED Rosso, LED Verde, LED Blu) disposti in modo da poter interagire tra loro per formare diversi colori complementari.
Il modo più semplice per accendere i led è di collegare uno dei pin (B,R,G) verso massa; non è necessario utilizzare delle resistenze per limitare la corrente perché sono già integrate nel circuito.
Vediamo ora come usare Arduino per accendere e spegnere singolarmente i vari led. Il circuito da realizzare è il seguente e si basa su tre transistor PNP tipo BC337.
Le basi dei tre transistors sono collegate ai pin 3, 5 e 6 non a caso poiché su questi pin è disponibile anche il segnale PWM che utilizzeremo per andare a pilotare i led RGB in modo migliore.
void setup()
{
//led Rosso
pinMode(5, OUTPUT);
//led verde
pinMode(6, OUTPUT);
//led blu
pinMode(3, OUTPUT);
//init seriale
Serial.begin(9600);
}
void loop()
{
//se arrivano dati...
if (Serial.available())
{
//leggi il carattere in arrivo
byte data = Serial.read();
if(data == 'q') //accende il led blu
digitalWrite(3, HIGH);
else if (data == 'w') //spegne il led blu
digitalWrite(3, LOW);
if(data == 'a') //accende il led verde
digitalWrite(5, HIGH);
else if (data == 's') //spegne il led verde
digitalWrite(5, LOW);
if(data == 'z') //accende il led rosso
digitalWrite(6, HIGH);
else if (data == 'x') //spegne il led rosso
digitalWrite(6, LOW);
}
}
Il codice precedente permette di accendere o spegnere i led inviando tramite serial monitor dei caratteri di comando. L’effetto che otteniamo è una miscelazione dei colori.
Un maggior controllo dei led RGB possiamo ottenerlo utilizzando il segnale PWM generato da Arduino. In questo modo abbiamo la possibilità di creare dissolvenze per creare combinazioni di colori visivamente più interessanti.
Il codice seguente permette di accendere e spegnere il led BLU in modo graduale tramite una dissolvenza:
void setup()
{
//led Rosso
pinMode(5, OUTPUT);
//led verde
pinMode(6, OUTPUT);
//led blu
pinMode(3, OUTPUT);
//init seriale
Serial.begin(9600);
}
void loop()
{
//Aumenta il duty cycle da 100% a 0%
for(byte sfuma = 0; sfuma < 255; sfuma++)
{
analogWrite(3, sfuma);
delay(40);
}
//diminuisci il duty cycle da 100% a 0%
for(byte sfuma = 255; sfuma > 0; sfuma--)
{
analogWrite(3, sfuma);
delay(40);
}
}
Se volessi miscelare i colori potrei scrivere qualcosa del genere
void setup()
{
//led Rosso
pinMode(5, OUTPUT);
//led verde
pinMode(6, OUTPUT);
//led blu
pinMode(3, OUTPUT);
//init seriale
Serial.begin(9600);
}
void loop()
{
//accendo il led rosso
digitalWrite(6, HIGH);
//Aumenta il duty cycle da 100% a 0%
for(byte sfuma = 0; sfuma < 255; sfuma++)
{
analogWrite(3, sfuma);
delay(40);
}
//spengo il rosso
digitalWrite(6, LOW);
//accendo il verde
digitalWrite(5, HIGH);
//diminuisci il duty cycle da 100% a 0%
for(byte sfuma = 255; sfuma > 0; sfuma--)
{
analogWrite(3, sfuma);
delay(40);
}
}
Le combinazioni che possiamo creare sono innumerevoli, potete provare a sperimentare creando effetti luminosi che possono abbellire i vostri ambienti.