Effetto fuoco o fiamma con Arduino e 3 LED
Creiamo una luce tremolante simile a una piccola fiamma usando due LED gialli, un LED rosso e variazioni casuali della luminosità tramite PWM.
Cosa imparerai
- come regolare la luminosità di un LED con il PWM;
- come utilizzare
analogWrite(); - come generare valori pseudo-casuali con
random(); - come combinare LED rossi e gialli per creare un effetto luminoso;
- come modificare velocità e intensità dell’animazione.
Materiale necessario
🧰 Kit Arduino consigliato
Un kit completo è utile per avere breadboard, cavetti, resistenze, LED e molti componenti di base per sperimentare con Arduino.
👉 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 di collegamento
Schema del circuito con tre LED. L’immagine mantiene una larghezza massima di 362 px.
Collegamenti
| LED | Pin Arduino | Resistenza |
|---|---|---|
| Giallo 1 | D11 PWM | 220 Ω |
| Rosso | D10 PWM | 220 Ω |
| Giallo 2 | D9 PWM | 220 Ω |
Codice Arduino commentato
/*
EFFETTO FUOCO / FIAMMA CON 3 LED
LED giallo 1 -> D11
LED rosso -> D10
LED giallo 2 -> D9
I tre pin scelti supportano il PWM su Arduino Uno.
Il programma varia casualmente:
- luminosità dei LED
- intervallo tra un aggiornamento e il successivo
In questo modo la luce non resta uniforme e simula
il comportamento irregolare di una piccola fiamma.
*/
const byte LED_GIALLO_1 = 11;
const byte LED_ROSSO = 10;
const byte LED_GIALLO_2 = 9;
// Limiti PWM: 0 = spento, 255 = massima luminosità
const byte LUMINOSITA_MIN = 140;
const byte LUMINOSITA_MAX = 255;
// Ritardo massimo tra due variazioni
const unsigned int RITARDO_MAX_MS = 100;
void setup() {
pinMode(LED_GIALLO_1, OUTPUT);
pinMode(LED_ROSSO, OUTPUT);
pinMode(LED_GIALLO_2, OUTPUT);
// Inizializza il generatore pseudo-casuale usando
// il rumore letto da un ingresso analogico libero.
randomSeed(analogRead(A0));
}
void loop() {
// Ogni LED riceve una luminosità diversa e casuale.
// Il limite massimo resta sempre 255, valore valido per analogWrite().
analogWrite(
LED_GIALLO_1,
random(LUMINOSITA_MIN, LUMINOSITA_MAX + 1)
);
analogWrite(
LED_ROSSO,
random(LUMINOSITA_MIN, LUMINOSITA_MAX + 1)
);
analogWrite(
LED_GIALLO_2,
random(LUMINOSITA_MIN, LUMINOSITA_MAX + 1)
);
// Anche il tempo tra due variazioni cambia continuamente.
delay(random(20, RITARDO_MAX_MS + 1));
}
Come funziona lo sketch
1. Luminosità casuale
Ogni LED riceve un valore PWM casuale compreso tra 140 e 255. In questo modo la luce resta sempre abbastanza intensa da sembrare una fiamma, ma varia continuamente.
2. Tre LED indipendenti
I tre valori vengono generati separatamente. Questo evita che tutti i LED cambino luminosità nello stesso identico momento e rende il risultato più naturale.
3. Ritardo casuale
Anche l’intervallo tra un aggiornamento e il successivo varia casualmente tra 20 e 100 ms.
4. randomSeed()
All’avvio viene usata una lettura analogica per inizializzare il generatore pseudo-casuale, così la sequenza luminosa tende a cambiare a ogni accensione.
Perché limitare il PWM a 255
analogWrite() su Arduino Uno lavora normalmente con valori da 0 a 255. Per questo lo sketch mantiene sempre la luminosità dentro questo intervallo.
Personalizzare la fiamma
Puoi cambiare facilmente il comportamento modificando:
const byte LUMINOSITA_MIN = 140;
const byte LUMINOSITA_MAX = 255;
const unsigned int RITARDO_MAX_MS = 100;
Abbassando LUMINOSITA_MIN otterrai momenti più scuri. Aumentando il ritardo massimo la fiamma diventerà più lenta e marcata; riducendolo sarà più nervosa e rapida.
Simulazione Tinkercad
▶️ Apri la simulazione Tinkercad
Scarica lo sketch
⬇️ Scarica arduino_led_effetto_fuoco.ino
Dove utilizzare l’effetto fiamma
- presepi e diorami;
- lanterne decorative;
- camini in miniatura;
- modellismo ferroviario;
- scenografie e plastici;
- case delle bambole;
- progetti di illuminazione decorativa.
Debug rapido
- se un LED non si accende, controlla polarità e resistenza da 220 Ω;
- verifica che i LED siano collegati a D9, D10 e D11;
- se la variazione è troppo rapida, aumenta il ritardo;
- se l’effetto è troppo debole, aumenta la luminosità minima;
- se tutti i LED sembrano uguali, prova LED con tonalità diverse di giallo e rosso;
- non collegare mai un LED direttamente al pin senza una resistenza limitatrice.
Varianti del progetto
- aggiungere altri LED usando altri pin PWM;
- usare LED arancioni insieme a rosso e giallo;
- pilotare LED più potenti tramite transistor o MOSFET;
- aggiungere un sensore di luce per attivare la fiamma al buio;
- aggiungere un pulsante per scegliere diversi effetti;
- creare più gruppi di LED per simulare un fuoco più grande;
- realizzare una candela elettronica.
Cosa devi ricordare
- I LED sono collegati ai pin PWM D9, D10 e D11.
- Ogni LED usa una resistenza da 220 Ω.
analogWrite()varia la luminosità tramite PWM.random()rende il tremolio irregolare.- I valori PWM devono restare tra 0 e 255.
- Modificando luminosità e intervalli puoi cambiare completamente l’aspetto della fiamma.
Domande frequenti
Posso usare tre LED dello stesso colore?
Sì, ma combinare rosso, giallo e arancione tende a produrre un effetto visivamente più simile a una fiamma.
Perché servono pin PWM?
Perché il progetto varia continuamente la luminosità dei LED con analogWrite(). Su Arduino Uno D9, D10 e D11 supportano questa funzione.
Posso usare LED più potenti?
Sì, ma non vanno pilotati direttamente dai pin di Arduino. Serve uno stadio di potenza adeguato, per esempio con transistor o MOSFET.
Come faccio a rendere il fuoco più lento?
Aumenta il valore massimo del ritardo casuale oppure restringi l’intervallo di variazione della luminosità.

