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.