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.
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.
Materiale necessario
🧰 Kit Arduino consigliato
Un kit per principianti contiene molti dei componenti di base usati nei progetti del sito.
👉 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 progetto con sensore di fiamma, LED e buzzer.
Pin utilizzati nel progetto
| Componente | Pin Arduino | Funzione |
|---|---|---|
| Sensore fiamma | A0 | Lettura analogica |
| LED | 3 | Segnalazione lampeggiante |
| Buzzer | 4 | Allarme sonoro con tone() |
| Uscita segnalazione | 9 | Attiva quando la soglia è superata |
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 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
Leggiamo A0
analogRead(A0) restituisce un valore che rappresenta il segnale del sensore.
Confrontiamo il valore con la soglia
La condizione valoreSensore >= soglia decide se il programma deve entrare nello stato di allarme.
Generiamo il suono
La funzione tone() genera due frequenze alternate, 400 Hz e 650 Hz, creando un segnale acustico più evidente.
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.
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.inoDebug 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 tramitemillis(); - 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.

