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.

Figura 1

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 Ω.

Figura 2

Figura 3

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.

Lascia una risposta

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

Ti sei iscritto alla newsletter

There was an error while trying to send your request. Please try again.

Quattrodispositivi utilizzerà le informazioni fornite in questo modulo per restare in contatto con te e fornire aggiornamenti del sito