Antifurto Arduino con sensore PIR e buzzer
Realizziamo un semplice sistema di allarme che rileva il movimento con un sensore PIR e attiva automaticamente una sirena intermittente.
🚨 Introduzione
In questo progetto realizzeremo un antifurto Arduino con sensore PIR e buzzer.
A differenza del progetto precedente, nel quale il buzzer rimaneva semplicemente acceso durante il rilevamento, questa volta creeremo una sirena intermittente.
Quando il sensore rileva il movimento di una persona:
Questo principio può essere utilizzato come base per piccoli sistemi di sicurezza domestica, allarmi per garage e rilevatori di presenza.
🎯 Cosa imparerai
- come utilizzare un sensore PIR con Arduino;
- come leggere un ingresso digitale;
- come rilevare la presenza di movimento;
- come controllare un buzzer;
- come creare un suono intermittente;
- come combinare un sensore con una logica di allarme;
- come estendere il progetto con LED, relè e sistemi di attivazione.
🧰 Materiale necessario
🛒 Non hai ancora i componenti?
Un kit Arduino per principianti contiene normalmente sensori, buzzer, LED, resistenze, breadboard e molti altri componenti utili per realizzare questo progetto.
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?
Nei miei libri trovi spiegazioni semplici, schemi chiari e numerosi progetti pratici dedicati ad Arduino.
Scopri i miei libri → Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.👁️ Come funziona il sensore PIR
Il PIR, acronimo di Passive InfraRed, rileva variazioni della radiazione infrarossa presente nel suo campo di osservazione.
Quando una persona attraversa l’area controllata, il sensore modifica lo stato del proprio pin di uscita.
| Segnale PIR | Significato |
|---|---|
| LOW | Nessun movimento rilevato |
| HIGH | Movimento rilevato |
🔌 Schema di collegamento
Sensore PIR
| Pin PIR | Arduino |
|---|---|
| VCC | 5V |
| GND | GND |
| OUT | Pin 2 |
Buzzer
| Buzzer | Arduino |
|---|---|
| Positivo | Pin 8 |
| Negativo | GND |
💻 Codice Arduino completo
// ============================================
// Progetto #70
// Antifurto Arduino con PIR + buzzer
//
// Quando viene rilevato un movimento
// Arduino attiva una sirena intermittente.
// ============================================
const byte PIR_PIN = 2;
const byte BUZZER_PIN = 8;
void setup() {
// Sensore PIR come ingresso
pinMode(PIR_PIN, INPUT);
// Buzzer come uscita
pinMode(BUZZER_PIN, OUTPUT);
// Il buzzer parte spento
digitalWrite(BUZZER_PIN, LOW);
}
void loop() {
// Legge lo stato del sensore PIR
int movimento = digitalRead(PIR_PIN);
// Se viene rilevato movimento
if (movimento == HIGH) {
// Accende il buzzer
digitalWrite(BUZZER_PIN, HIGH);
// Mantiene il buzzer acceso per 200 ms
delay(200);
// Spegne il buzzer
digitalWrite(BUZZER_PIN, LOW);
// Pausa di 200 ms
delay(200);
}
else {
// Nessun movimento:
// il buzzer rimane spento
digitalWrite(BUZZER_PIN, LOW);
}
}
⚙️ Come funziona il programma
Arduino controlla continuamente il sensore PIR tramite:
digitalRead(PIR_PIN);
Se il valore letto è:
HIGH
significa che il sensore ha rilevato movimento.
A questo punto Arduino attiva il buzzer.
🔊 Come viene creata la sirena intermittente
Il buzzer viene acceso con:
digitalWrite(BUZZER_PIN, HIGH);
Dopo 200 millisecondi viene spento:
digitalWrite(BUZZER_PIN, LOW);
La sequenza è quindi:
| Fase | Buzzer | Durata |
|---|---|---|
| 1 | 🔊 Acceso | 200 ms |
| 2 | 🔇 Spento | 200 ms |
| 3 | 🔊 Acceso | 200 ms |
| 4 | 🔇 Spento | 200 ms |
Finché il PIR continua a rilevare movimento, questa sequenza viene ripetuta.
⏱️ Cambiare la velocità della sirena
Per rendere l’allarme più veloce possiamo diminuire il ritardo:
delay(100);
Per renderlo più lento possiamo invece utilizzare:
delay(500);
La durata delle pause determina quindi il ritmo della sirena.
🔔 Buzzer attivo o buzzer passivo?
È importante distinguere i due tipi principali di buzzer.
Produce un suono semplicemente alimentandolo con HIGH e LOW.
Richiede la generazione di una frequenza, per esempio tramite tone().
🎵 Versione con buzzer passivo
Se utilizzi un buzzer piezo passivo, possiamo generare un vero tono di allarme.
tone(BUZZER_PIN, 1200);
delay(200);
noTone(BUZZER_PIN);
delay(200);
In questo caso Arduino genera una frequenza di 1200 Hz.
🚨 Sirena con frequenza variabile
Possiamo anche ottenere un effetto più simile a una vera sirena facendo variare la frequenza.
for (int frequenza = 700; frequenza < 1500; frequenza += 20) {
tone(BUZZER_PIN, frequenza);
delay(10);
}
for (int frequenza = 1500; frequenza > 700; frequenza -= 20) {
tone(BUZZER_PIN, frequenza);
delay(10);
}
Il tono aumenta e diminuisce continuamente creando un effetto molto più realistico.
⚙️ Regolare il sensore PIR
Molti moduli PIR, come il comune HC-SR501, possiedono due piccoli trimmer.
Permette di modificare approssimativamente la distanza di rilevamento.
Regola per quanto tempo l’uscita rimane attiva dopo un rilevamento.
Prima di modificare il codice conviene quindi regolare correttamente il sensore.
⏳ Tempo di stabilizzazione del PIR
Quando alimentiamo un sensore PIR, il circuito deve stabilizzarsi.
Durante questa fase Arduino potrebbe ricevere alcuni segnali apparentemente casuali.
💡 Aggiungere un LED di allarme
Possiamo aggiungere un LED rosso che lampeggia insieme alla sirena.
Per esempio possiamo collegarlo al pin 7 tramite una resistenza da 220Ω.
digitalWrite(LED_PIN, HIGH);
digitalWrite(BUZZER_PIN, HIGH);
delay(200);
digitalWrite(LED_PIN, LOW);
digitalWrite(BUZZER_PIN, LOW);
delay(200);
In questo modo avremo sia una segnalazione sonora sia una segnalazione luminosa.
🔌 Collegare una sirena più potente
Il pin di Arduino non deve alimentare direttamente dispositivi che richiedono molta corrente.
Per controllare una sirena più potente possiamo utilizzare:
🔐 Aggiungere l’attivazione dell’antifurto
Un vero sistema di allarme non dovrebbe essere sempre attivo.
Potremmo aggiungere un pulsante o un interruttore per passare tra due stati:
Il PIR viene ignorato.
Il movimento attiva la sirena.
Questo renderebbe il progetto molto più simile a un vero antifurto.
⏳ Ritardo di uscita
Possiamo introdurre un ritardo dopo l’attivazione del sistema.
Per esempio:
delay(10000);
offrirebbe 10 secondi per uscire dalla stanza prima di rendere operativo il sensore.
In una versione più avanzata sarebbe però preferibile utilizzare millis() invece di bloccare Arduino con delay().
🚪 Ritardo di ingresso
Un’altra possibile evoluzione consiste nell’attendere alcuni secondi prima di far partire la sirena dopo il rilevamento.
La logica potrebbe essere:
Il PIR rileva movimento
Parte il conto alla rovescia
L’utente disattiva il sistema
Se non viene disattivato, parte la sirena
⚡ Perché in futuro usare millis()
Il codice base utilizza delay() perché è semplice da capire.
Durante il delay, però, Arduino non può svolgere facilmente altre operazioni.
Utilizzando millis() potremmo gestire contemporaneamente:
🔄 Possibili stati dell’antifurto
Un sistema più completo potrebbe essere organizzato in diversi stati.
| Stato | Funzione |
|---|---|
| DISARMATO | Il movimento viene ignorato |
| ATTESA | Tempo disponibile per uscire |
| ARMATO | Il PIR controlla l’ambiente |
| PREALLARME | Tempo disponibile per disattivare il sistema |
| ALLARME | Sirena attiva |
Questo introduce il concetto di macchina a stati, molto utile nei progetti Arduino più complessi.
⚠️ Problemi comuni
Attendi la stabilizzazione e controlla i trimmer del modulo.
Controlla polarità, tipo di buzzer e collegamento al pin 8.
Controlla che il ramo else imposti correttamente LOW.
Riduci la sensibilità del PIR e allontanalo da fonti di calore.
Controlla la regolazione del tempo sul modulo PIR.
Controlla collegamenti, alimentazione e possibili cortocircuiti.
🔄 Varianti possibili
Aggiungi una segnalazione visiva.
Controlla una sirena tramite relè.
Inserisci un codice per armare e disarmare il sistema.
Mostra lo stato dell’antifurto.
Controlla anche porte e finestre.
Invia notifiche tramite ESP32 o altro modulo di rete.
🧠 Cosa impari con questo progetto
- come leggere un sensore PIR;
- come rilevare movimento tramite un ingresso digitale;
- come controllare un buzzer;
- come creare un allarme intermittente;
- come collegare eventi di ingresso e azioni di uscita;
- come migliorare progressivamente un semplice antifurto;
- come preparare la base per sistemi di sicurezza più complessi.
✅ Cosa devi ricordare
- il pin OUT del PIR è collegato al pin 2;
- il buzzer è collegato al pin 8;
- HIGH indica normalmente che il PIR ha rilevato movimento;
- digitalRead() legge lo stato del sensore;
- digitalWrite() controlla il buzzer;
- alternando HIGH e LOW otteniamo un suono intermittente;
- un buzzer passivo può essere controllato con tone();
- il PIR può richiedere alcuni secondi per stabilizzarsi;
- una sirena più potente deve essere pilotata tramite relè, transistor o MOSFET;
- con millis() possiamo creare un antifurto molto più evoluto e non bloccante.

