Gestire un led RGB con Arduino

A differenza di un comune led, che emette luce di un solo colore, un led RGB può emettere tre tipi diversi di luce, rossa, gialla e blu (Red, Green, Blue come dice lo stesso acronimo). Questo tipo di diodo si presta a usi molto interessanti, dato che combinando diverse gradazioni di rosso, giallo e blue, può emettere luce di svariati colori. Provate a immaginare in quanti progetti potreste utilizzarlo (un robottino, un giocattolo, una simulazione di casa domotica, un allarme ecc. tutte casistiche in cui in base a determinati eventi una luce di un certo colore denota chiaramente un particolare stato dell’oggetto).

In questo articolo creeremo un piccolo prototipo in cui piloteremo il led RGB con Arduino, utilizzando la funzione random per generare colori casuali ad ogni ciclo del loop di esecuzione.

I colori nel sistema RGB

Nel sistema RGB ogni gradazione di colore può variare da un valore che va da 0 a 255: il valore 0 rappresenta la totale assenza del colore, mentre il valore 255 ne indica la saturazione massima.

Valore RGBColore
255, 0, 0Rosso
0, 255, 0Verde
0, 0, 255Blu
255, 255, 255Bianco
0, 0, 0Nero
255, 255, 0Giallo
255, 165, 0Arancione
127, 127, 127Grigio

Nella tabella sopra sono elencati alcuni esempi di codifica RGB a cui corrisponde un preciso colore. Dato che ogni tripletta può contenere, ripetiamo, valori compresi tra 0 e 255, si potranno ottenere 256 * 256 * 256 combinazioni di colori possibili (16777216 in totale).

Lista dei componenti

Per creare il nostro prototipo per pilotare il led RGB con Arduino, ci serviranno:

  • un led RGB a catodo comune
  • 3 resistenze da 220 ohm
  • una breadboard
  • 4 cavetti jumper
  • una scheda Arduino
  • un cavo usb per collegare Arduino al pc

Il led RGB

Un led RGB è composto al suo interno di tre led diversi, un per ognuno dei tre colori: rosso, verde e blue.

Presenta quattro connettori e ne esistono di due tipi:

  • ad anodo comune, in cui l’anodo utilizza i 5 v di tensione sul pin comune ai tre led
  • a catodo comune, in cui il pin comune viene connesso a massa

Come abbiamo visto dalla lista dei componenti utilizzeremo il secondo tipo di led RGB, di cui connetteremo il catodo al pin di messa a terra (GND) di Arduino (nella foto sotto, il catodo è facilmente riconoscibile dalla maggiore lunghezza rispetto agli altri tre connettori).

Led Rgb

Creazione del circuito per comandare il led RGB con Arduino

Circuito Led RGB con Arduino

Come si nota dalla foto sopra, il connettore del led rosso è stato connesso in serie con una resistenza al pin 13 di Arduino; subito dopo il catodo comune al pin GND, mentre il connettore del verde è stato collegato al pin 12 e, infine, il blu al pin 8. Per mettere meglio in evidenza le connessioni, ho usato cavetti jumper del colore corrispondente a quello di ogni pin del led.

Le resistenze, come al solito, hanno il compito di limitare l’afflusso di corrente al led; se preferite che emetta luce di intensità minore, usare resistenze di valore più elevato.

Eventualmente fate riferimento alla form di calcolo della resistenza per cercare la combinazione di strisce colorate che preferite.

Lo sketch per gestire il led RGB

Vediamo subito il codice del nostro progetto:

//pin colore rosso
#define ROSSO 13

//pin colore verde
#define VERDE 12

//pin colore blu
#define BLU 8

void setup() {
  //inizializzazione della comunicazione seriale
  Serial.begin(9600);
  
  //pin colori led in modalità output
  pinMode(ROSSO, OUTPUT);
  pinMode(VERDE, OUTPUT);
  pinMode(BLU, OUTPUT);

  //impostazione a LOW della tensione sui pin
  digitalWrite(ROSSO, LOW);
  digitalWrite(VERDE, LOW);
  digitalWrite(BLU, LOW);
}

void loop() {

  //valore random per il pin rosso
  const int randRosso = random(1, 255);
  
  //valore random per il pin verde
  const int randVerde = random(1, 255);

  //valore random per il pin blu
  const int randBlu = random(1, 255);

  //accensione rosso
  analogWrite(ROSSO, randRosso);

  //accensione verde
  analogWrite(VERDE, randVerde);
  
  //accensione blu
  analogWrite(BLU, randBlu);

  //invio al monitor seriale dei valori assegnati ai pin
  Serial.print("ROSSO: ");
  Serial.print(randRosso);
  Serial.print(" -- VERDE: ");
  Serial.print(randVerde);
  Serial.print(" -- BLU: ");
  Serial.println(randBlu);
  
  //led rgb acceso per due secondi
  delay(2000);
}

Tramite le direttive del preprocessore vengono definite le costanti dei pin a cui sono collegati i connettori del led; successivamente, nella funzione setup di Arduino, dopo aver inizializzato la comunicazione seriale, i pin vengono messi a zero volt.

Nel loop, la funzione random genera valori casuali compresi tra 0 e 255 per le costanti che andranno a creare la tripletta RGB da mandare al led. Il primo parametro passato a random è appunto il valore minimo 0 a partire da cui generare numeri casuali, mentre il secondo è il valore massimo (255).

Una volta ottenuti i tre valori casuali, li passiamo alla funzione analogWrite per inviare il segnale analogico ad ogni pin. A differenza di digitalWrite, che gestisce i due stati LOW e HIGH, analogWrite può inviare ai pin di Arduino diverse gradazioni di valori. In questo caso risulta molto utile per variare i colori del led: ad ogni iterazione si otterrà un colore casuale, che verrà mantenuto per 2 secondi tramite la chiamata alla funzione delay.

Infine, sul monitor seriale vengono stampati i valori di blu, verde e rosso. Ecco un esempio di output:

ROSSO: 44 -- VERDE: 72 -- BLU: 30
ROSSO: 239 -- VERDE: 221 -- BLU: 123
ROSSO: 61 -- VERDE: 99 -- BLU: 44
ROSSO: 170 -- VERDE: 175 -- BLU: 214
ROSSO: 127 -- VERDE: 113 -- BLU: 242
ROSSO: 14 -- VERDE: 222 -- BLU: 140
ROSSO: 249 -- VERDE: 101 -- BLU: 250
ROSSO: 204 -- VERDE: 72 -- BLU: 62
ROSSO: 99 -- VERDE: 172 -- BLU: 226
ROSSO: 131 -- VERDE: 35 -- BLU: 24
ROSSO: 36 -- VERDE: 77 -- BLU: 213

Cosa succede se sostituiamo le chiamate ad analogWrite con digitalWrite?

Provate a stampare sulla seriale i valori nel formato rgb, ad es. rgb(36, 77, 213), copiate la stringa e copincollatela in questo color picker; che colore ottenete? Provate anche a verificare se la luce emessa dal led corrisponde al colore individuato dal color picker, commentando le chiamate alla funzione random e assegnando i valori di una tripletta generata sul monitor. I più volenterosi possono provare ad aggiungere un pulsante per accendere il led RGB, combinando il codice appena presentato con quello di un precedente articolo.

Conclusione

In questo articolo abbiamo creato un prototipo su breadboard con Arduino per comandare un led RGB. Il progettino si è rivelato molto istruttivo, perché, oltre ad averci mostrato in cosa un led RGB si differenzia da un led comune, ci ha permesso sia di ottenere molteplici combinazioni di colori mescolando rosso, verde e blu, sia di introdurre la generazione di numeri casuali. Inoltre abbiamo potuto apprezzare anche la differenza tra la funzione analogWrite e digitalWrite.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.