🔥 Arduino • LED • PWM

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.

DifficoltàFacile
Tempo15–20 minuti
Cosa impariPWM e valori casuali
In poche parole: Arduino modifica continuamente e in modo indipendente la luminosità dei tre LED. Anche la velocità delle variazioni cambia in modo casuale, creando un effetto irregolare molto più simile al tremolio di una fiamma reale.

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

🔌 Arduino Uno
🟡 2 LED gialli
🔴 1 LED rosso
Ω 3 resistenze da 220 Ω
🔗 Cavetti di collegamento
🧩 Breadboard

🧰 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 consigliato

Link 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 Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema di collegamento

Schema Arduino LED effetto fuoco fiamma

Schema del circuito con tre LED. L’immagine mantiene una larghezza massima di 362 px.

Collegamenti

LEDPin ArduinoResistenza
Giallo 1D11 PWM220 Ω
RossoD10 PWM220 Ω
Giallo 2D9 PWM220 Ω
Perché proprio D9, D10 e D11? Su Arduino Uno questi pin supportano il PWM, indispensabile per variare la luminosità dei LED invece di limitarci ad accenderli e spegnerli.

Codice Arduino commentato

Effetto fiamma con 3 LED
/*
  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.

Scala PWM: 0 significa LED spento, 255 luminosità massima, mentre i valori intermedi regolano il duty cycle del segnale PWM.

Personalizzare la fiamma

Puoi cambiare facilmente il comportamento modificando:

Parametri principali
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à.