Regolare la luminosità di un LED con il PWM e Arduino Genuino

In questo articolo vedremo come regolare la luminosità di un led con Arduino.
Come spiegato nell’articolo precedente “Arduino: GPIO, gestire gli Input e Output” che descrive per l’appunto le funzionalità delle porte GPIO dell’Arduino/Genuino, è possibile usufruire della funzionalità PWM gestita a livello hardware per controllare la luminosità di un led.

 

Led connesso al pin 9 (output PWM) di Arduino / Genuino
Led connesso al pin 9 (output PWM) di Arduino / Genuino

 

Un altro articolo che spiega come collegare un led ad Arduino è disponibile qui: Arduino Genuino e i LED, Accendere un led con Arduino.
Vediamo qualche esempio pratico:

Led effetto “fade-in” e “fade-out” con Arduino Genuino

Un semplice esempio per capire come usare il PWM di Arduino per gestire l’intensità luminosa (dimmer) di un led.


/*
Fade-in e Fade-out LED con Arduino (Author: Matteo Dalle Feste - matteo@dallefeste.com - info@ciaobit.com - https://ciaobit.com )
Libero utilizzo a fini non commerciali e mantenendo i crediti dell'autore
You can use this script for free. Not for commercial use. Keep author credits
*/

// Dichiaro la variabile LED e associo un numero intero che corrisponde al pin digitale di Arduino/Genuino
int LED = 9; 
// espresso in millisecondi
int ritardo = 5; 

// definisco il Pin LED come OUTPUT 
void setup() { 
   pinMode(LED, OUTPUT); 
} 

// Ripeti queste istruzioni all'infinito: 
void loop() {

   // Imposto il PWM da 0 a 255 per qualche millisecondo
   for(int ValorePWM = 0; ValorePWM <= 255; ValorePWM++){ 
      analogWrite(LED, ValorePWM);
      delay(ritardo);
   }
   
   // Imposto il PWM da 255 a 0 per qualche millisecondo 
   for(int ValorePWM = 255; ValorePWM >= 0; ValorePWM--){
      analogWrite(LED, ValorePWM);  
      delay(ritardo); 
   }
} 

Il codice qui sopra riportato definisce il pin 9 come pin di output usato per collegare il led. La scelta di questa porta non è casuale, infatti, va verificato sui datasheet e sui manuali quali sono i pin che gestiscono nativamente questa funzione.

Impostiamo anche una variabile “ritardo” che useremo per provare a cambiare i tempi di transizione da un valore all’altro del PWM.

il codice che è racchiuso nel loop,  esegue per l’appunto un ciclo infinito che trova al suo interno due cicli for.

Il primo ciclo for aumenta progressivamente il valore del pwm, che va da 0 a 255.
Di conseguenza il led passerà da un valore di luminosità uguale a zero a un valore di 100%.
Questa accensione graduale crea ad esempio un’effetto “accensione luci soft”, un effetto molto piacevole.

Se il promo ciclo faceva l’effetto “Fade-in”, il secondo ciclo for invece esegue l’effetto contrario, ovvero il “Fade-out”, quindi le luci si spengono gradualmente.

Di seguito un esempio di collegamento di Arduino a una striscia a LED da 12v attraverso un MOSFET pilotato dal PWM.

 

Led strip a 12V connessa via mosfet IRFZ44N al pin 9 (output PWM) di Arduino / Genuino
Led strip a 12V connessa via mosfet IRFZ44N al pin 9 (output PWM) di Arduino / Genuino

Se ti è piaciuto l’articolo condividi il link di questa pagina!

Riguardo Matteo Dalle Feste

Web Designer e Developer presso una nota testata giornalistica sul turismo. Appassionato di domotica, nel tempo libero, cura la realizzazione sia hardware che software di piccoli progetti domotici fai da te.

Guarda anche

RFLink Gateway e Arduino Mega2560: trasmettere e ricevere a 433Mhz

Cos’è RFLink Gateway RFLink Gatrway è un progetto gratuito che implementa la comunicazione via radio …

8 Commenti

  1. progetto semplice e molto utile didatticamente

    • Provando il circuito si nota una scattosità (accensione a scatti) del Led nella parte iniziale della dimmerazione (a bassa luce). Da qualche parte ho letto che è dovuta al pwm a 8 bit (256 passi), e che si potrebbe evitare con un pwm a 12 bit usando Arduino e un integrato Texas TLC5940 ma non ho alba come fare. Forse tu sei in grado di aiutarmi. Grazie Giorgio Pellegrini.

      • Ciao Giorgio,
        a paritá di circuito potresti provare a giocare sul tempo di transizione piú breve tra un valore del pwm e l’ altro.

        Purtroppo non dispongo dell’ integrato che dici tu per provare, ma sembra abbastanza semplice se usi la libreria dedicata dovresti riuscire a settare il valore del pwm per il canale di output che ti interessa.

    • Ciao Federico sono un neofilo di Arduino sto iniziando i primi passi, vorrei sapere se questo progetto può funzionare anche con una strip da 24V

  2. Buon giorno. Provando il circuito si nota una scattosità (accensione a scatti) del Led nella parte iniziale della dimmerazione (a bassa luce). Da qualche parte ho letto che è dovuta al pwm a 8 bit (256 passi), e che si potrebbe evitare con un pwm a 12 bit usando Arduino e un integrato Texas TLC5940 ma non ho alba come fare. Forse tu sei in grado di aiutarmi. Grazie Giorgio Pellegrini.

  3. grazie mille

Lascia un commento

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