Buzzer e fotoresistenza con Arduino: allarme controllato dalla luce
Realizziamo un semplice sistema di allarme che legge la luminosità ambientale con una fotoresistenza LDR e attiva un buzzer quando il livello di luce scende sotto una soglia impostata.
Cosa imparerai
- come leggere una fotoresistenza con analogRead();
- come usare una soglia per prendere una decisione;
- come pilotare un buzzer tramite un’uscita digitale;
- come usare una condizione if / else;
- come trasformare una misura ambientale in un’azione automatica.
Come funziona il progetto
La fotoresistenza cambia la propria resistenza in funzione della luce. Nel circuito viene utilizzata insieme a una resistenza da 10 kΩ per creare un partitore di tensione collegato all’ingresso analogico A0.
Arduino legge continuamente il valore analogico e lo confronta con una soglia. Quando la luminosità è inferiore al valore impostato, il buzzer viene acceso. Quando la luce torna sopra la soglia, il buzzer viene spento.
Materiale necessario
Kit Arduino consigliato
Se non possiedi ancora i componenti puoi utilizzare un kit Arduino completo con sensori, buzzer, LED, resistenze e breadboard.
🛒 Guarda un kit Arduino su AmazonLink di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
Schema di collegamento
La fotoresistenza viene collegata al pin A0, mentre il buzzer viene controllato dal pin digitale 8.
5V → LDR → A0 → Resistenza 10 kΩ → GND
Pin 8 → Buzzer → GND
Collegamento del buzzer e della fotoresistenza ad Arduino.
Codice Arduino commentato
// ==========================================================
// BUZZER E FOTORESISTENZA CON ARDUINO
// Allarme sonoro controllato dalla luminosità
// ==========================================================
// Pin analogico collegato al partitore con la fotoresistenza
const int ldrPin = A0;
// Pin digitale collegato al buzzer
const int buzzerPin = 8;
// Soglia di luminosità.
// Se il valore letto scende sotto 500,
// Arduino considera l'ambiente abbastanza buio
// da attivare il buzzer.
int threshold = 500;
void setup() {
// Imposta il pin del buzzer come uscita
pinMode(buzzerPin, OUTPUT);
}
void loop() {
// Legge il valore analogico proveniente dalla fotoresistenza.
// Il valore può variare indicativamente da 0 a 1023.
int lightValue = analogRead(ldrPin);
// Se la luminosità scende sotto la soglia impostata...
if (lightValue < threshold) {
// ...attiva il buzzer
digitalWrite(buzzerPin, HIGH);
}
else {
// Se la luminosità è superiore alla soglia,
// spegne il buzzer
digitalWrite(buzzerPin, LOW);
}
}
Il codice spiegato passo passo
Definiamo i pin
La fotoresistenza viene letta su A0, mentre il buzzer è collegato al pin digitale 8.
Impostiamo la soglia
La variabile threshold contiene il valore che separa
la condizione di luce dalla condizione di buio.
Leggiamo la luminosità
analogRead(ldrPin) acquisisce il valore presente
sull’ingresso analogico.
Confrontiamo il valore
La condizione if (lightValue < threshold) verifica
se la luminosità è inferiore alla soglia.
Attiviamo il buzzer
Se la condizione è vera, il pin 8 viene portato su HIGH. In caso contrario viene portato su LOW.
threshold.
Come vedere il valore della LDR sul Monitor Seriale
Per tarare meglio la soglia puoi visualizzare il valore letto da A0 direttamente nel Monitor Seriale.
const int ldrPin = A0;
const int buzzerPin = 8;
int threshold = 500;
void setup() {
pinMode(buzzerPin, OUTPUT);
// Avvia la comunicazione seriale
Serial.begin(9600);
}
void loop() {
// Legge il valore della fotoresistenza
int lightValue = analogRead(ldrPin);
// Mostra il valore sul Monitor Seriale
Serial.print("Luminosita: ");
Serial.println(lightValue);
// Controlla la soglia
if (lightValue < threshold) {
digitalWrite(buzzerPin, HIGH);
}
else {
digitalWrite(buzzerPin, LOW);
}
// Piccolo ritardo per rendere più leggibili i dati
delay(100);
}
Simulazione online
Puoi provare il progetto anche in simulazione tramite Tinkercad.
▶️ Apri la simulazione TinkercadScarica lo sketch
⬇️ Scarica buzzer_con_fotoresistenza.inoDebug rapido
- controlla il collegamento della fotoresistenza;
- verifica la resistenza da 10 kΩ;
- controlla che il buzzer sia collegato al pin 8;
- verifica il collegamento a GND;
- prova a cambiare il valore di
threshold; - usa il Monitor Seriale per capire quali valori legge realmente A0.
Varianti del progetto
- aggiungere un LED di segnalazione;
- far emettere al buzzer toni diversi;
- attivare il buzzer solo dopo alcuni secondi di buio;
- realizzare un semplice allarme per rilevare un’ombra o un passaggio;
- controllare una lampada tramite relè;
- visualizzare il livello di luce su un display.
Cosa devi ricordare
- La fotoresistenza fornisce ad Arduino un valore analogico.
- La soglia stabilisce quando il sistema deve reagire.
if / elsepermette di scegliere tra due azioni.- Il buzzer viene controllato come una normale uscita digitale.
- La soglia va adattata alla luce reale dell’ambiente.
Domande frequenti
Perché il buzzer suona sempre?
Controlla la soglia e i collegamenti della LDR. Usa il Monitor Seriale per osservare il valore letto da A0 e scegliere una soglia più adatta.
Posso cambiare il valore 500?
Sì. È solo una soglia iniziale. Ogni ambiente può richiedere un valore diverso.
Posso far suonare il buzzer quando c’è molta luce?
Sì. Basta invertire la condizione, ad esempio confrontando il valore
con > invece di <.
Posso aggiungere anche un LED?
Sì. Puoi usare un secondo pin digitale per accendere un LED insieme al buzzer o usarlo come indicatore separato.

