🧲 Arduino • Sensore Hall • Allarme

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.

DifficoltàIntermedia
Sensore HallD2
BuzzerD3
In poche parole: quando il sistema è armato e il magnete si allontana dal sensore Hall, Arduino rileva il cambio di stato e attiva il buzzer. Un pulsante permette di inserire o disinserire l’allarme.

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 Hall per Arduino

Modulo sensore magnetico a effetto Hall.

Regolazione: se il modulo dispone di un potenziometro, regolalo dopo aver posizionato sensore e magnete nella posizione definitiva. La distanza utile dipende dal magnete e dal modulo utilizzato.

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

🔌 Arduino Uno
🧲 Modulo sensore Hall
🔘 Pulsante
🟢 1 LED verde
🔴 1 LED rosso
🔊 Buzzer
🖥️ Display LCD 16×2 I2C
Ω 2 resistenze da 220 Ω
Ω 1 resistenza da 10 kΩ
🔗 Cavetti e breadboard

🧰 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 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?

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 Arduino

Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.

Schema del circuito

Schema Arduino sensore Hall allarme porte finestre

Schema di collegamento del sistema di allarme con sensore Hall.

Montaggio Arduino allarme con sensore Hall

Esempio di montaggio del circuito.

Collegamenti principali

ComponentePin Arduino
Sensore HallD2
BuzzerD3
PulsanteD7
LED verdeD8
LED rossoD9
LCD I2CSDA / 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

Indirizzo I2C: nell’esempio viene utilizzato 0x27. Se il display rimane vuoto, verifica l’indirizzo del tuo adattatore I2C e regola il contrasto.

Codice Arduino commentato

Allarme magnetico porte e finestre
#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.

Miglioria importante: il pulsante viene gestito sul cambio di stato e non continuamente mentre rimane premuto. Inoltre il buzzer viene spento appena il magnete torna in posizione, evitando che continui a suonare dopo la chiusura.

Immagine dello sketch

Codice Arduino sensore Hall allarme porte finestre

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.

Prima del montaggio definitivo: prova diverse distanze e verifica che il sistema riconosca sempre la condizione di porta chiusa e porta aperta senza commutazioni casuali.

Scarica lo sketch

⬇️ Scarica lo sketch Arduino

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.