Arduino Projects: controllo della luminosità ambientale con led RGB

Per far lampeggiare un LED può essere divertente anche utilizzare l'RGB sfruttando la combinazione dei tre colori; in questo caso possiamo disporre in un solo momento 3 possibili combinazioni di colori: rosso (R), verde (G) e blu (B). In questo articolo vedremo come gestire attraverso la modulazione PWM la luminosità di un RGB.  Pulse Width Modulation, o PWM, è una tecnica per ottenere un effetto analogico con un controllo digitale attraverso un'onda quadra. Questo modello on-off può simulare le tensioni 5 Volt e OFF cambiando la porzione del tempo sui vari istanti ON e OFF (duty cycle). In questo articolo vedremo come cambiare la luminosità di un LED in base alle condizioni di lumonosità ambientali, servendoci di una fotoresistenza disponibile nel kit. Clicca qui per scoprire come ricevere in omaggio il kit e Arduino!

Introduzione

Una fotoresistenza è un resistore variabile a luce controllata. La resistenza di un fotoresistore diminuisce con l'aumento dell'intensità della luce incidente. Un fotoresistore può essere applicato in circuiti rivelatori fotosensibili e circuiti di commutazione notturna. Il materiale è un semiconduttore ad alta resistenza. Nel buio, una fotoresistenza può avere una resistenza dell'ordine dei megaohm, mentre con la luce una fotoresistenza può avere una resistenza a partire da poche centinaia di ohm. Il principio fisico consiste nell'assorbimento dei fotoni da parte del materiale con conseguente eccitazioni degli elettroni verso la banda di conduzione. Gli elettroni liberi risultanti conducono elettricità, riducendo così la resistenza.  Il LED RGB, invece, è un dispositivo in cui la luce rossa, verde e blu vengono aggiunti insieme in vari modi per riprodurre una vasta gamma di colori. Lo scopo principale del modello di colore RGB è per il rilevamento, la rappresentazione e la visualizzazione di immagini in sistemi elettronici.

Il codice

Il LED RGB ha 4 pin, uno e il catodo comune e gli altri sono gli anodi del vari LED che andranno collegati per mezzo di resistenze (1 Kohm) ai pin digitali PWM dell'Arduino, in particolare i pin 3, 5 e 6 (Figura 1). Ma nulla vieta di utilizzare i pin 9, 10 e 11 modificando il codice in maniera opportuna.

Figura 1: Collegamento del LED RGB con Arduino

Figura 1: Collegamento del LED RGB con Arduino

 

Figura 2: Collegamento della fotoresistenza con Arduino

Per misurare la tensione della fotoresistenza utilizziamo un partitore di tensione, combinando la fotoresistenza o LDR con un'altra resistenza fissa di 10 Kohm (Figura 2). La tensione da misurare che esprime la quantità di luce presente è acquisita per mezzo del pin AN0.  Mettendo insieme i vari pezzi il circuito montato è visualizzato in figura 3.

Figura 3: Collegamento dell'Arduino con la fotoresistenza e il LED RGB

 

L'esempio di codice commentato che andremo a riportare di seguito vuole cambiare la luminosità del LED rosso RGB in funzione della tensione letta sulla fotoresistenza, ovvero in funzione delle condizioni luminose ambientali. Questo può essere riprodotto anche per gli altri colori inserendo ulteriori fotoresistenze presenti nel kit o servendosi di quella già montata per ciascun colore.

// costanti per individuare i LED R,G e B rispettivamente ai pin 3,5 e 6
const int LED_R_Pin = 3;    
const int LED_G_Pin = 5;     
const int LED_B_Pin = 6;   
 
const int res = A0; 
 
int value = 0;
 
int value_R = 0;

 
void setup() {
  
  //connessione seriale
  Serial.begin(9600); 
 
 //impostiamo i pin RGB come uscita
  pinMode(LED_G_Pin,OUTPUT);
  pinMode(LED_R_Pin,OUTPUT);
  pinMode(LED_B_Pin,OUTPUT);
}
 
void loop() {
  
 //lettura sensore A0 ovvero la tensione della fotoresistenza
  value = analogRead(res);
  delay(1000);

  value_R = value/4;
 
  //scriviamo il valore sul led R del RGB che si accenderà in funzione del valore "value_R" della fotoresistenza
  analogWrite(LED_R_Pin,value_R);

}

Dopo aver visto il funzionamento della fotoresistenza, divertiamoci con il LED RGB per creare un effetto di luce ed imparare ad utilizzarlo.  Di seguito riportiamo il codice commentato per creare un effetto che consiste nel far variare la luminosità creando una luce per il nostro presepe. Potete divertirvi a cambiare i vari effetti.

  
    // pin de LED RGB  
    const int pin_V = 3;  
    const int pin_B = 5;  
    const int pin_R = 6;  
      
    // tempo di transizione del colore  
    const int delayTime = 20;  
      
    void setup() {  
      
      // imposta il pin digitale come output  
      pinMode(pin_V, OUTPUT);  
      pinMode(pin_B, OUTPUT);  
      pinMode(pin_R, OUTPUT);  
      
      // si impostano ad HIGH i pin pin_V, pin_B, pin_R  
      digitalWrite(pin_V, HIGH);  
      digitalWrite(pin_B, HIGH);  
      digitalWrite(pin_R, HIGH);  
      
    }  
      
    // definizione di variabili globali  
    int rosso;  
    int blu;  
    int verde;  
      
      
    void loop() {  
      
      
      int rosso = 255;  
      int blu = 0;  
      int verde = 0;  
      
      for( int i = 0 ; i < 255 ; i += 1 ){  
      
        verde += 1;  
        rosso -= 1;  
      
        // il LED verde diminuisce, il LED rosso aumenta di luminosità
        analogWrite( pin_V, 255 - verde );  
        analogWrite( pin_R, 255 - rosso );  
      
      
        // attesa di 20 ms per percepire il colore  
        delay( delayTime );  
      }  
      
      // variazione di colore dal blu al verde  
      
      rosso = 0;  
      blu = 0;  
      verde = 255;  
      
      rosso = 0;  
      blu = 0;  
      verde = 255;  
      
      for( int i = 0 ; i < 255 ; i += 1 ){  
      
        blu += 1;  
        verde -= 1;    
        //il rosso diminuisce, il verde aumenta
        analogWrite( pin_B, 255 - blu );  
        analogWrite( pin_V, 255 - verde );  
      
        // attesa di 20 ms per percepire il colore  
        delay( delayTime );  
      }  
      
      // variazione di colore da rosso al blue 
      
      rosso = 0;  
      blu = 255;  
      verde = 0;  
      
      for( int i = 0 ; i < 255 ; i += 1 ){  
      
        rosso += 1;  
        blu -= 1;  
      
        //il rosso diminuisce e il blu aumenta
        analogWrite( pin_R, 255 - rosso );  
        analogWrite( pin_B, 255 - blu );  
      
        // attesa di 20 ms per percepire il colore  
        delay( delayTime );  
      }  
    }  

Nel kit è disponibile anche una serie di trimmer, ovvero delle resistenze variabili. Continuando con il led RGB già montato, sostituiamo la fotoresistenza con un trimmer in modo da regolare manualmente la luminosità. Il collegamento è semplice, il pin centrale del trimmer andrà collegato al pin A0 di Arduino, gli altri due alimentati a 5 V e GND (Figura 4). Il codice è esattamente lo stesso di quello visto precedentemente durante l'implementazione della fotoresistenza.

 

Figura 4: Collegare il trimmer (con il perno bianco e la base bianca e azzurra) con Arduino per variare la luminosità manualmente di un LED RGB

Conclusioni e considerazioni

Le potenzialità di Arduino sono decisamente infinite, vi potete divertire con tante soluzioni componentistiche che il kit in dotazione mette a disposizione. Dal LED RGB passando per un piccolo motore che vedremo in un prossimo articolo.  Nel kit sono compresi anche altri LED blu, verdi, gialli e rossi. Un buon esercizio è implementare il funzionamento di un RGB visto in questo articolo con 3 singoli LED di diverso colore.

 

 

 

Una risposta

  1. Maurizio Di Paolo Emilio Maurizio 8 dicembre 2016

Scrivi un commento

ESPertino è la nuova scheda per IoT compatibile ARDUINO.
Scopri come averla GRATIS!