Progetto #70 • Sicurezza Arduino

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.

Difficoltà ★★☆☆☆ Facile
Tempo 20–30 minuti
Concetti PIR • Buzzer • Allarme

🚨 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:

👁️ Il PIR rileva una variazione
⚡ Arduino riceve il segnale
🔊 Il buzzer viene attivato
🚨 Parte la sirena intermittente

Questo principio può essere utilizzato come base per piccoli sistemi di sicurezza domestica, allarmi per garage e rilevatori di presenza.

Concetto chiave: il sensore PIR rappresenta l’ingresso del sistema, mentre il buzzer è l’uscita che segnala la condizione di allarme.

🎯 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

1× Arduino UNO o compatibile
1× sensore PIR
1× buzzer attivo
1× breadboard
Cavi jumper

🛒 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
Molti moduli PIR richiedono alcuni secondi di stabilizzazione dopo l’accensione. Durante questa fase possono verificarsi rilevamenti apparentemente casuali.

🔌 Schema di collegamento

Sensore PIR

Pin PIR Arduino
VCC 5V
GND GND
OUT Pin 2

Buzzer

Buzzer Arduino
Positivo Pin 8
Negativo GND
Schema antifurto Arduino con sensore PIR e buzzer

💻 Codice Arduino completo

Progetto #70 — Antifurto con PIR e buzzer
// ============================================
// 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);
  }
}
Ho aggiunto anche il ramo else per assicurarci che il buzzer rimanga sempre spento quando il sensore non rileva movimento.

⚙️ 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.

Buzzer attivo
Produce un suono semplicemente alimentandolo con HIGH e LOW.
Buzzer passivo
Richiede la generazione di una frequenza, per esempio tramite tone().
Il codice di questo progetto è pensato principalmente per un buzzer attivo. Con un buzzer passivo possiamo creare una sirena più realistica utilizzando frequenze differenti.

🎵 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.

Sensibilità
Permette di modificare approssimativamente la distanza di rilevamento.
Tempo
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.

Dopo aver acceso il circuito, attendi qualche secondo prima di valutare il comportamento del sensore.

💡 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:

Modulo relè
Transistor
MOSFET
Alimentatore esterno
Importante: non collegare direttamente al pin di Arduino una sirena o un carico che assorbe più corrente di quella supportata dalla scheda.

🔐 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:

DISARMATO
Il PIR viene ignorato.
ARMATO
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:

1.
Il PIR rileva movimento
2.
Parte il conto alla rovescia
3.
L’utente disattiva il sistema
4.
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:

👁️ Sensore PIR
🔢 Tastierino numerico
💡 LED di stato
🔊 Sirena
📟 Display LCD
⏳ Timer di ingresso

🔄 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

Il PIR rileva sempre movimento
Attendi la stabilizzazione e controlla i trimmer del modulo.
Il buzzer non suona
Controlla polarità, tipo di buzzer e collegamento al pin 8.
Il buzzer resta acceso
Controlla che il ramo else imposti correttamente LOW.
Falsi allarmi
Riduci la sensibilità del PIR e allontanalo da fonti di calore.
Il sensore reagisce lentamente
Controlla la regolazione del tempo sul modulo PIR.
Arduino si riavvia
Controlla collegamenti, alimentazione e possibili cortocircuiti.

🔄 Varianti possibili

💡 LED lampeggiante
Aggiungi una segnalazione visiva.
🔊 Sirena esterna
Controlla una sirena tramite relè.
🔐 Tastierino
Inserisci un codice per armare e disarmare il sistema.
📟 Display LCD
Mostra lo stato dell’antifurto.
🚪 Sensore reed
Controlla anche porte e finestre.
📡 Wi-Fi
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.