Allarme porte e finestre con Arduino e sensore Hall
Realizziamo un semplice sistema antifurto con sensore magnetico a effetto Hall, buzzer, pulsante di attivazione, LED di stato e display LCD 16×2 I2C.
Come funziona il sensore Hall
Un sensore Hall rileva la presenza di un campo magnetico. Avvicinando un magnete al modulo, l’uscita cambia stato; quando il magnete viene allontanato, Arduino può interpretare il cambiamento come l’apertura di una porta o di una finestra.
Questo principio è particolarmente adatto alla realizzazione di contatti magnetici senza parti meccaniche direttamente soggette a usura.
Modulo sensore magnetico a effetto Hall.
Funzioni del sistema
- attivazione e disattivazione tramite pulsante;
- rilevamento della presenza del magnete;
- buzzer di allarme;
- LED verde per indicare sistema inserito;
- LED rosso per indicare sistema disinserito;
- visualizzazione dello stato su LCD 16×2 I2C.
Materiale necessario
🧰 Kit Arduino consigliato
Un kit completo è utile per avere già a disposizione LED, resistenze, pulsanti, sensori, breadboard e cavetti per molti progetti Arduino.
👉 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. 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 del circuito
Schema di collegamento del sistema di allarme con sensore Hall.
Esempio di montaggio del circuito.
Collegamenti principali
| Componente | Pin Arduino |
|---|---|
| Sensore Hall | D2 |
| Buzzer | D3 |
| Pulsante | D7 |
| LED verde | D8 |
| LED rosso | D9 |
| LCD I2C | SDA / SCL |
Libreria del display
Il display LCD I2C richiede una libreria compatibile con il modulo utilizzato. Puoi importare il file ZIP direttamente dall’Arduino IDE.
⬇️ Scarica NewLiquidCrystal 1.3.4
0x27. Se il display rimane vuoto, verifica l’indirizzo del tuo adattatore I2C e regola il contrasto.Codice Arduino commentato
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Display I2C 16x2
LiquidCrystal_I2C lcd(
0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE
);
// Pin utilizzati
const int sensoreHall = 2;
const int buzzer = 3;
const int pulsante = 7;
const int ledVerde = 8;
const int ledRosso = 9;
// Stato dell'allarme
bool allarmeInserito = false;
// Serve per rilevare una sola pressione del pulsante
bool pulsantePrecedente = LOW;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(sensoreHall, INPUT);
pinMode(buzzer, OUTPUT);
pinMode(pulsante, INPUT);
pinMode(ledVerde, OUTPUT);
pinMode(ledRosso, OUTPUT);
// Stato iniziale: allarme disinserito
digitalWrite(ledVerde, LOW);
digitalWrite(ledRosso, HIGH);
noTone(buzzer);
lcd.setCursor(0, 0);
lcd.print("Allarme Porta");
lcd.setCursor(0, 1);
lcd.print("OFF");
}
void loop() {
// Legge il pulsante
bool pulsanteAttuale = digitalRead(pulsante);
// Rileva soltanto il passaggio LOW -> HIGH
if (pulsanteAttuale == HIGH &&
pulsantePrecedente == LOW) {
// Inverte lo stato dell'allarme
allarmeInserito = !allarmeInserito;
// Piccolo debounce
delay(80);
}
pulsantePrecedente = pulsanteAttuale;
// Legge il sensore Hall
int statoMagnete = digitalRead(sensoreHall);
if (allarmeInserito) {
digitalWrite(ledVerde, HIGH);
digitalWrite(ledRosso, LOW);
lcd.setCursor(0, 0);
lcd.print("Allarme Porta ");
lcd.setCursor(0, 1);
lcd.print("ON ");
// Nel circuito usato:
// LOW = magnete non rilevato / porta aperta
if (statoMagnete == LOW) {
// Allarme sonoro a 500 Hz
tone(buzzer, 500);
}
else {
// Porta chiusa: buzzer spento
noTone(buzzer);
}
}
else {
// Sistema disinserito
noTone(buzzer);
digitalWrite(ledVerde, LOW);
digitalWrite(ledRosso, HIGH);
lcd.setCursor(0, 0);
lcd.print("Allarme Porta ");
lcd.setCursor(0, 1);
lcd.print("OFF ");
}
}
Come funziona il codice
1. Il pulsante inserisce e disinserisce l’allarme
Arduino rileva il passaggio del pulsante da LOW a HIGH e inverte la variabile allarmeInserito. In questo modo una pressione inserisce il sistema e quella successiva lo disinserisce.
2. Il sensore controlla la posizione del magnete
Quando l’allarme è attivo, Arduino legge continuamente il pin D2. Se il magnete non viene rilevato, il sistema interpreta la condizione come apertura della porta o della finestra.
3. Il buzzer segnala l’apertura
Quando la porta viene aperta, tone() genera un segnale a 500 Hz sul pin D3. Quando il magnete torna vicino al sensore, noTone() spegne immediatamente il buzzer.
4. LED e display mostrano lo stato
Il LED verde indica che l’allarme è inserito, mentre quello rosso segnala il sistema disinserito. Il display LCD mostra contemporaneamente lo stato ON oppure OFF.
Immagine dello sketch
Esempio del programma per l’allarme magnetico.
Posizionare sensore e magnete
Per una porta o una finestra, monta il sensore sulla parte fissa e il magnete sulla parte mobile. Quando l’infisso è chiuso, il magnete deve trovarsi abbastanza vicino da essere rilevato con sicurezza.
Aprendo la porta o la finestra, il magnete si allontana e il sensore cambia stato.
Scarica lo sketch
Debug rapido
- controlla che il sensore Hall sia collegato a D2;
- verifica la polarità logica del modulo con magnete vicino e lontano;
- controlla il buzzer sul pin D3;
- se il pulsante cambia stato più volte, aumenta leggermente il debounce;
- se il display resta vuoto, verifica indirizzo I2C e contrasto;
- controlla la distanza tra sensore e magnete;
- usa il Monitor Seriale per verificare gli stati durante le prove.
Varianti del progetto
- aggiungere un tempo di ingresso prima dell’attivazione del buzzer;
- aggiungere un tempo di uscita dopo l’inserimento;
- usare più sensori per più porte e finestre;
- aggiungere un tastierino o RFID per l’inserimento;
- salvare gli eventi di apertura;
- inviare una notifica tramite ESP32 o Wi-Fi;
- aggiungere una sirena esterna tramite modulo relè.
Cosa devi ricordare
- Il sensore Hall rileva la presenza del magnete.
- Il sensore è collegato al pin D2.
- Il buzzer utilizza il pin D3.
- Il pulsante inserisce o disinserisce il sistema.
- I LED e il display mostrano lo stato dell’allarme.
- La logica HIGH/LOW del sensore va sempre verificata sul modulo utilizzato.
Domande frequenti
Perché l’allarme suona quando la porta è chiusa?
La logica del tuo modulo Hall potrebbe essere invertita oppure il magnete potrebbe essere troppo lontano. Verifica lo stato dell’uscita con il magnete vicino e lontano.
Il display è indispensabile?
No. Il sistema può funzionare anche senza LCD: i due LED possono indicare se l’allarme è inserito o disinserito.
Posso controllare più finestre?
Sì. Puoi aggiungere altri sensori e dedicare un ingresso Arduino a ogni apertura, oppure progettare una gestione a zone.
Posso usare un reed switch al posto del sensore Hall?
Sì, ma il collegamento e la logica possono cambiare. Il reed switch è un contatto magnetico meccanico, mentre il sensore Hall è elettronico.

