Diodo LED Multicolore (RGB) (Lezione 8)
Introduzione
Un sistema che ha una certa complessità, può essere suddiviso in tanti blocchi funzionali separati, mi spiego meglio, se consideriamo la progettazione di un auto, noi possiamo suddividerla in tante piccole parti, per esempio la progettazione delle ruote, della centralina elettronica, del servosterzo ecc. ogni singola parte deve avere un team di progettazione dedicato che si occuperà del solo blocco assegnato, nel rispetto delle specifiche generali, in questo modo, abbiamo introdotto una semplificazione nella risoluzione del problema che nel caso specifico rappresenta la progettazione di un auto con le performance migliori attualmente presente sul mercato. Inoltre, con questa procedura si formano dei gruppi di lavoro altamente specializzati e sicuramente la qualità e la velocità di produzione ne beneficiano.
Vorrei introdurre, anche in questo piccolo esempio, la filosofia di progettare un sistema suddividendolo in tante piccole funzioni, infatti, vorrei introdurre i concetti descritti negli articoli: PWM e lettura di un segnale digitale, unirli insieme per realizzare un unico progetto di complessità maggiore, ci tengo a precisare che l’esempio ha il solo scopo didattico e chiaro che, data la complessità dell’esempio, non è necessaria una suddivisone delle funzioni. Gli argomenti trattati sono i seguenti:
- Come generare un segnale PWM
- Come pilotare e leggere un segnale digitale
- Come gestire un pulsante ed evitare le multiple letture causate dall’oscillazione della membrana
Approfondimenti: Cos’è un modello RGB
RGB è un acronimo di Red, Green e Blue, sono i colori definiti fondamentali, perché da essi riusciamo a ricavare tutti gli altri colori. Il modello RGB descrive come la combinazione, con diverse proporzioni, dei tre colori fondamentali produce un colore secondario con diverse sfumature. Se I tre colori fondamentali sono miscelati tra di loro con la stessa proporzione si ottiene il colore bianco. Per i sistemi come monitor, display, fotocamere ecc. per riprodurre i colori si utilizza, nella maggior parte dei casi, il modello RGB.
Modello RGB
Possiamo distinguere due tipologie di modelli per rappresentare i colori, quello additivo e sottrattivo. Il modello additivo (RGB) è usato nei display LCD, mentre quello sottrattivo (CMYK) è usato soprattutto per le stampanti, in questo articolo approfondiremo solo il modello RGB.
Se i tre colori sono sovrapposti in percentuali molto basse, si ottiene il colore nero, mentre se la percentuale è molto alta si ottiene il colore bianco, mentre, per ottenere diverse sfumature dei colori secondari le percentuali, di composizione dei tre colori, è indicato nelle direttive del modello RGB.
Fino a questo momento abbiamo parlato solo di percentuali, ma adesso introduciamo i valori numeri, ogni colore, fondamentale, ha una codifica compresa nell’intervallo 0-255, pertanto, combinando i tre colori abbiamo 16.777.216 combinazioni possibili, con le quali possiamo riprodurre tutti colori con diverse sfumature.
Controllo di un diodo LED RGB
In questo progetto, utilizziamo un diodo LED RGB, che ha quattro reofori, uno in comune (Anodo), mentre gli altri tre (Catodo) sono collegati ai singoli diodi LEDs, con un pulsante connesso ad Arduino selezioniamo, ad ogni pressione, l’intensità luminosa e il colore prodotto dal diodo LED RGB. Il colore rosso è predominante, rispetto agli altri due colori, quindi, per equiparare l’intensità userò un resistore serie, per la polarizzazione, di valore maggiore rispetto agli altri due colori. Dalla Figura 2 , possiamo osservare che per i colori blu e verde ho utilizzato un resistore da 220 Ω, mentre per il rosso un resistore di 330 Ω.
Per pilotare i tre diodo utilizziamo il pin catodo, mentre l’anodo comune ai tre diodi LED, è sempre connesso alla tensione d’alimentazione, che nel mio caso è 5V. Normalmente i tre ingressi sono pilotati , da Arduino, con un livello alto, se dobbiamo accendere uno o più LED, porto il livello basso ai corrispettivi pin del diodo LED.
int Pin_rosso= 10; //Associamo uno mnemonico al dido LED rosso int Pin_verde = 6;//Associamo uno mnemonico al dido LED verde int Pin_blu = 3; //Associamo uno mnemonico al dido LED blu int pulsante = 4;// Associamo uno mnemonico al pulsante int conteggio = 0; boolean lettura_precedente_pulsante = LOW;//la variabile che contiene la prcedente lettura //dello stato del LED boolean lettura_corrente_pulsante= LOW;//la variabile che contiene la lettura corrente //dello stato del LED void setup() { pinMode(pulsante, INPUT); } void loop() { lettura_corrente_pulsante = debounce(lettura_precedente_pulsante); //leggiamo lo stato del pulsante if (lettura_precedente_pulsante == LOW && lettura_corrente_pulsante == HIGH) // E'stato premuto il pulsante? { conteggio++; // incremento la variabile di stato setColor(); // chiamo la funzione per settare l'uscita del LED } lettura_precedente_pulsante = lettura_corrente_pulsante; //Resetto il valore del PULSANTE } void setColor() { switch (conteggio) { case 1: analogWrite(Pin_rosso, 0); analogWrite(Pin_blu, 255); analogWrite(Pin_verde, 255); break; case 2: analogWrite(Pin_rosso, 255); analogWrite(Pin_blu, 0); analogWrite(Pin_verde, 255); break; case 3: analogWrite(Pin_rosso, 255); analogWrite(Pin_blu, 255); analogWrite(Pin_verde, 0); break; case 4: for (int j = 0; j <= 255; j++) { analogWrite(Pin_rosso, j); analogWrite(Pin_blu, j); analogWrite(Pin_verde, j); delay (200); } conteggio = 0; break; default: conteggio = 0; break; } } boolean debounce(boolean ultimo) // funzione antirimbalzo { boolean corrente = digitalRead(pulsante); // Leggi lo stato del PULSANTE if (ultimo != corrente) // E' diverso? { delay(5); //Aspetta 5ms corrente = digitalRead(pulsante); // leggi ancora } return corrente; //Ritorna il valore letto }
Il codice lo possiamo dividere in due semplici blocchi: il primo blocco è la gestione del pulsante e nel secondo blocco gestiamo l’accensione dei tre diodi LED in funzione del numero di pressione del pulsante (da 1 a 4). Dalla quarta pressione, attiviamo il PWM e facciamo decrescere gradualmente l’intensità luminosa dei tre diodi LEDs.
Alla riga 20 eseguiamo una chiamata alla funzione che gestisce il pulsante, mentre alla riga 29 usiamo la funzione “switch” “case” per gestire i quattro stati del sistema.