🔥 Arduino • Sensore fiamma • Buzzer

Sensore di fiamma con Arduino: allarme con LED e buzzer

Realizziamo un sistema didattico che rileva la presenza di una sorgente luminosa compatibile con il sensore di fiamma e attiva un allarme visivo e sonoro con LED e buzzer.

DifficoltàPrincipiante
IngressoSensore su A0
AllarmeLED + buzzer
Importante: questo è un progetto didattico e non sostituisce un rilevatore antincendio certificato. Non va usato come unico sistema di sicurezza per persone, abitazioni o ambienti reali.

Cosa imparerai

  • come leggere un sensore di fiamma con un ingresso analogico;
  • come confrontare una misura con una soglia;
  • come attivare un LED di segnalazione;
  • come generare un allarme sonoro con tone();
  • come dividere il programma in funzioni;
  • come calibrare la soglia in base all’ambiente.

Come funziona il sensore di fiamma

Il modulo usato in questo progetto reagisce alla radiazione luminosa emessa da una fiamma. Arduino legge il segnale dal pin analogico A0 e confronta il valore con una soglia.

Quando il valore supera la soglia impostata, il programma richiama due funzioni: una genera l’allarme sonoro e l’altra fa lampeggiare il LED.

Concetto chiave: il sensore non “capisce” che esiste un incendio. Arduino riceve semplicemente un valore elettrico e decide cosa fare in base alla soglia impostata nel codice.

Materiale necessario

🔌 Arduino Uno
🔥 Sensore di fiamma
💡 1 LED
〰️ Resistenza da 220 Ω
🔊 Buzzer
🧩 Breadboard
🔗 Cavetti jumper

🧰 Kit Arduino consigliato

Un kit per principianti contiene molti dei componenti di base usati nei progetti del sito.

👉 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 con sensore di fiamma LED e buzzer

Schema del progetto con sensore di fiamma, LED e buzzer.

Pin utilizzati nel progetto

ComponentePin ArduinoFunzione
Sensore fiammaA0Lettura analogica
LED3Segnalazione lampeggiante
Buzzer4Allarme sonoro con tone()
Uscita segnalazione9Attiva quando la soglia è superata
Nota sul vecchio sketch: nel codice originale compariva digitalWrite(7, LOW) nel setup(), ma il pin 7 non veniva configurato e non era poi utilizzato nella logica del progetto. Nella versione ripulita lo eliminiamo.

Codice Arduino commentato

Sensore fiamma con LED e buzzer
// ==========================================================
// SENSORE DI FIAMMA CON ARDUINO
// Allarme visivo e sonoro con LED e buzzer
// ==========================================================

// Pin analogico del sensore
const int sensorePin = A0;

// LED di allarme
const int ledPin = 3;

// Buzzer
const int buzzerPin = 4;

// Uscita aggiuntiva di segnalazione
const int alarmPin = 9;

// Soglia di rilevamento.
// Va calibrata in base al sensore e all'ambiente.
int soglia = 20;

void setup() {

  // LED come uscita
  pinMode(ledPin, OUTPUT);

  // Uscita di segnalazione come uscita
  pinMode(alarmPin, OUTPUT);

  // Il buzzer viene pilotato da tone().
  // Non è indispensabile usare pinMode() per tone(),
  // ma lo impostiamo per chiarezza.
  pinMode(buzzerPin, OUTPUT);

}

void loop() {

  // Legge il valore analogico del sensore
  int valoreSensore = analogRead(sensorePin);

  // Se il valore raggiunge o supera la soglia...
  if (valoreSensore >= soglia) {

    // Attiva l'allarme sonoro
    allarmeSonoro();

    // Fa lampeggiare il LED
    lampeggioLed();

    // Attiva anche l'uscita di segnalazione
    digitalWrite(alarmPin, HIGH);

  }
  else {

    // Se non viene superata la soglia,
    // disattiva l'uscita di segnalazione
    digitalWrite(alarmPin, LOW);

    // Mantiene il LED spento
    digitalWrite(ledPin, LOW);

  }

}

// ==========================================================
// ALLARME SONORO
// Alterna due frequenze per creare un suono riconoscibile
// ==========================================================
void allarmeSonoro() {

  tone(buzzerPin, 400, 500);
  delay(500);

  tone(buzzerPin, 650, 500);
  delay(500);

}

// ==========================================================
// LAMPEGGIO LED
// ==========================================================
void lampeggioLed() {

  digitalWrite(ledPin, HIGH);
  delay(50);

  digitalWrite(ledPin, LOW);

}

Il codice spiegato passo passo

1

Leggiamo A0

analogRead(A0) restituisce un valore che rappresenta il segnale del sensore.

2

Confrontiamo il valore con la soglia

La condizione valoreSensore >= soglia decide se il programma deve entrare nello stato di allarme.

3

Generiamo il suono

La funzione tone() genera due frequenze alternate, 400 Hz e 650 Hz, creando un segnale acustico più evidente.

4

Facciamo lampeggiare il LED

La funzione dedicata accende brevemente il LED e poi lo spegne.

Come calibrare la soglia

La soglia 20 proviene dal progetto originale, ma non è un valore universale. Sensori diversi e condizioni ambientali differenti possono produrre letture diverse.

Un metodo pratico consiste nel leggere temporaneamente il valore del sensore sul Monitor Seriale e osservare come cambia in condizioni normali e quando viene avvicinata una sorgente luminosa di prova appropriata. La soglia può poi essere scelta tra i due intervalli.

Test del sensore con Monitor Seriale
const int sensorePin = A0;

void setup() {

  // Avvia la comunicazione seriale
  Serial.begin(9600);

}

void loop() {

  // Legge il sensore
  int valore = analogRead(sensorePin);

  // Mostra il valore sul Monitor Seriale
  Serial.println(valore);

  // Aggiorna cinque volte al secondo
  delay(200);

}

Perché dividere il programma in funzioni

Il vecchio sketch usa già due funzioni separate, alarm() e flash(). È una buona impostazione perché rende il programma più leggibile: loop() descrive la logica generale, mentre le funzioni contengono i dettagli dell’allarme.

Limiti del progetto

Un semplice sensore di fiamma Arduino può essere influenzato dalla distanza, dall’angolo, dalla luce ambientale e dalle caratteristiche della sorgente. Per questo motivo il progetto è perfetto per imparare a usare sensori e soglie, ma non deve essere interpretato come un impianto antincendio professionale.

Scarica lo sketch originale

⬇️ Scarica sensore_fiamma.ino

Debug rapido

  • controlla alimentazione e GND del sensore;
  • verifica che l’uscita analogica sia collegata ad A0;
  • controlla la polarità del LED;
  • verifica la resistenza da 220 Ω sul LED;
  • se l’allarme è sempre attivo, ricalibra la soglia;
  • se non si attiva mai, controlla i valori reali con il Monitor Seriale;
  • verifica che il buzzer sia collegato al pin previsto dal codice.

Varianti del progetto

  • mostrare il valore del sensore su display LCD o OLED;
  • aggiungere un secondo LED per indicare lo stato normale;
  • usare più sensori orientati in direzioni diverse;
  • inviare una notifica con ESP32 o Wi-Fi;
  • sostituire delay() con una gestione temporale tramite millis();
  • registrare gli eventi su scheda SD;
  • aggiungere un pulsante per silenziare temporaneamente il buzzer.

Cosa devi ricordare

  • Il sensore viene letto tramite analogRead().
  • La soglia determina quando scatta l’allarme.
  • tone() permette di generare il segnale acustico.
  • Separare il codice in funzioni rende lo sketch più leggibile.
  • La soglia deve essere calibrata sul sensore reale.
  • Il progetto è didattico e non è un dispositivo antincendio certificato.

Domande frequenti

Perché l’allarme parte anche senza fiamma?

Il sensore può reagire ad altre sorgenti luminose o la soglia può essere troppo sensibile. Controlla i valori sul Monitor Seriale e ricalibra la soglia.

Posso usare l’uscita digitale del modulo?

Molti moduli offrono anche un’uscita digitale con soglia regolabile. Questo progetto, però, utilizza la lettura analogica su A0 per mantenere il controllo della soglia nel software.

Posso sostituire il buzzer?

Sì, purché il nuovo dispositivo venga pilotato correttamente e rispetti i limiti elettrici di Arduino. Per carichi più importanti serve uno stadio di pilotaggio appropriato.

Può sostituire un rilevatore antincendio domestico?

No. È un esperimento didattico per imparare Arduino, sensori e soglie; non sostituisce dispositivi certificati.