Effetto fade LED con Arduino: dissolvenza PWM
Facciamo aumentare e diminuire gradualmente la luminosità di un LED usando il PWM di Arduino e la funzione analogWrite().
Cosa imparerai
- come funziona il PWM su Arduino;
- come usare
analogWrite(); - perché i valori vanno da 0 a 255;
- come invertire automaticamente il verso della dissolvenza;
- come modificare velocità e morbidezza dell’effetto;
- quali pin usare per il PWM su Arduino Uno.
Che cos’è l’effetto fade
Il LED non viene semplicemente acceso e spento. La luminosità cresce poco alla volta fino al massimo e poi diminuisce progressivamente fino allo spegnimento, ripetendo il ciclo all’infinito.
Il progetto utilizza il pin 9, che su Arduino Uno supporta il PWM.
analogWrite(). Produce invece un segnale PWM molto rapido, variandone il duty cycle. L’occhio umano percepisce il risultato come una diversa luminosità.Materiale necessario
🧰 Kit Arduino consigliato
Molti progetti del sito utilizzano LED, resistenze, breadboard e cavetti. Un kit completo può essere comodo per iniziare.
👉 Guarda il kit Arduino consigliatoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
📘 Vuoi imparare Arduino passo dopo passo?
Se vuoi approfondire e realizzare progetti più completi, puoi dare un’occhiata anche ai miei libri dedicati ad Arduino. All’interno troverai spiegazioni semplici, schemi chiari e molti progetti pratici pensati per chi parte da zero.
👉 Scopri i miei libri su ArduinoLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema del circuito
Schema di collegamento del LED per creare l’effetto fade con Arduino.
Collegamenti
| Componente | Collegamento |
|---|---|
| Anodo LED | Pin D9 tramite resistenza da 220 Ω |
| Catodo LED | GND |
Codice Arduino commentato
// ==========================================================
// EFFETTO FADE LED CON ARDUINO
// PWM sul pin 9
// ==========================================================
// Pin PWM collegato al LED
const int ledPin = 9;
// Luminosità iniziale:
// 0 = spento
// 255 = massima luminosità
int luminosita = 0;
// Incremento applicato a ogni ciclo.
// Quando raggiungiamo un estremo,
// il segno viene invertito.
int incremento = 5;
void setup() {
// Il pin 9 controlla il LED
pinMode(ledPin, OUTPUT);
}
void loop() {
// Imposta il duty cycle PWM.
// I valori ammessi sono da 0 a 255.
analogWrite(ledPin, luminosita);
// Aumenta o diminuisce la luminosità
// in base al segno di incremento.
luminosita = luminosita + incremento;
// Quando raggiungiamo uno dei due estremi,
// invertiamo la direzione della dissolvenza.
if (luminosita == 0 || luminosita == 255) {
incremento = incremento * -1;
}
// Determina la velocità del fade.
// Un valore maggiore rende l'effetto più lento.
delay(50);
}
Come funziona il programma
1. La variabile luminosita
luminosita parte da 0 e viene inviata a analogWrite(). Su Arduino Uno il PWM accetta valori da 0 a 255.
| Valore PWM | Effetto sul LED |
|---|---|
| 0 | Spento |
| 64 | Luminosità bassa |
| 128 | Circa metà scala PWM |
| 192 | Luminosità elevata |
| 255 | Massima luminosità |
2. L’incremento
La variabile incremento vale inizialmente 5. A ogni ciclo viene sommata alla luminosità:
Arrivati a 255, l’incremento viene moltiplicato per -1 e diventa -5. Il valore comincia quindi a scendere:
3. Perché usiamo == e ||
Nel controllo:
if (luminosita == 0 || luminosita == 255)
== confronta due valori, mentre || significa OR logico. La condizione è quindi vera se la luminosità è uguale a 0 oppure a 255.
= con ==. Il primo assegna un valore, il secondo verifica l’uguaglianza.Quanto dura un ciclo completo?
Con incremento pari a 5 servono 51 variazioni circa per passare da 0 a 255. Con un ritardo di 50 ms, una salita richiede circa 2,5 secondi; andata e ritorno richiedono quindi poco più di 5 secondi.
Come modificare la velocità del fade
Puoi intervenire su due parametri:
- incremento più piccolo → dissolvenza più fluida;
- incremento più grande → variazioni più evidenti;
- delay più basso → effetto più veloce;
- delay più alto → effetto più lento.
Quali pin supportano il PWM?
Su Arduino Uno i pin PWM sono normalmente riconoscibili dal simbolo ~. I pin classici utilizzabili con analogWrite() sono 3, 5, 6, 9, 10 e 11.
Simulazione Tinkercad
▶️ Apri la simulazione TinkercadEsempio del progetto
Scarica lo sketch
⬇️ Scarica lo sketch ArduinoDebug rapido
- controlla la polarità del LED;
- usa una resistenza in serie da circa 220 Ω;
- verifica che il LED sia collegato al pin 9;
- se il LED si accende ma non varia, controlla che il pin scelto supporti il PWM;
- se il fade è troppo rapido, aumenta
delay(); - se è troppo a scatti, riduci il valore di
incremento.
Varianti del progetto
- controllare la velocità con un potenziometro;
- usare due LED con dissolvenza incrociata;
- creare un effetto respiro;
- applicare la dissolvenza a un LED RGB;
- eliminare
delay()usandomillis(); - controllare la luminosità da seriale.
Cosa devi ricordare
- Il LED è collegato al pin PWM D9.
analogWrite()usa valori da 0 a 255.- L’incremento positivo aumenta la luminosità.
- L’incremento negativo la diminuisce.
- Agli estremi 0 e 255 invertiamo il segno dell’incremento.
- Il PWM non è una vera uscita analogica continua.
Domande frequenti
Perché analogWrite() arriva fino a 255?
Su Arduino Uno il PWM usato da analogWrite() lavora normalmente su 8 bit: 2⁸ = 256 livelli, numerati da 0 a 255.
Posso usare qualsiasi pin?
No. Per ottenere la regolazione PWM devi usare un pin compatibile con analogWrite(), come il pin 9 usato nel progetto.
Posso rendere il fade più fluido?
Sì. Riduci l’incremento, per esempio da 5 a 1, e regola il delay per ottenere la velocità desiderata.
Posso evitare delay()?
Sì. Puoi creare lo stesso effetto usando millis(), lasciando Arduino libero di svolgere altre attività durante la dissolvenza.

