🚀 Introduzione
Vuoi registrare automaticamente ciò che accade in un sistema Arduino e consultare gli ultimi eventi direttamente da un display? 📋⏰
In questo progetto realizzerai un sistema di log eventi con Arduino, display LCD 20×4 e modulo RTC DS3231.
Arduino registrerà l’apertura di una porta, il rilevamento di un movimento e l’attivazione manuale di un pulsante.
Ogni evento verrà associato a:
Le ultime registrazioni verranno salvate nella memoria EEPROM, quindi rimarranno disponibili anche dopo lo spegnimento della scheda.
👉 Il progetto è una base utile per antifurti, controlli accessi, centraline domotiche e sistemi di diagnostica.
Vuoi registrare automaticamente ciò che accade in un sistema Arduino e consultare gli ultimi eventi direttamente da un display? 📋⏰
In questo progetto realizzerai un sistema di log eventi con Arduino, display LCD 20×4 e modulo RTC DS3231.
Arduino registrerà l’apertura di una porta, il rilevamento di un movimento e l’attivazione manuale di un pulsante.
Ogni evento verrà associato a:
- tipo di evento;
- ora;
- minuti;
- giorno;
- mese.
Le ultime registrazioni verranno salvate nella memoria EEPROM, quindi rimarranno disponibili anche dopo lo spegnimento della scheda.
👉 Il progetto è una base utile per antifurti, controlli accessi, centraline domotiche e sistemi di diagnostica.
🎯 Cosa realizzerai
Con Arduino creerai un sistema che:
Con Arduino creerai un sistema che:
- 🚪 rileva l’apertura e la chiusura di una porta;
- 🚶 rileva un movimento tramite sensore PIR;
- 🔘 registra un evento manuale;
- ⏰ associa data e ora a ogni evento;
- 📋 conserva gli ultimi dieci eventi;
- 💾 salva il registro nella EEPROM;
- 📟 mostra gli eventi su display LCD 20×4;
- ⬆️ permette di scorrere verso gli eventi più recenti;
- ⬇️ permette di consultare quelli più vecchi;
- 🗑️ consente di cancellare il registro con una pressione lunga.
🧰 Materiale necessario
Il reed switch e i pulsanti utilizzano le resistenze interne INPUT_PULLUP di Arduino.
- 1x Arduino UNO;
- 1x display LCD 20×4 con interfaccia I2C;
- 1x modulo RTC DS3231;
- 1x batteria CR2032;
- 1x sensore magnetico reed switch;
- 1x sensore di movimento PIR HC-SR501;
- 3x pulsanti;
- cavetti jumper;
- breadboard;
- cavo USB.
Il reed switch e i pulsanti utilizzano le resistenze interne INPUT_PULLUP di Arduino.
🛒 Non hai ancora i componenti?
Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.
👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW
📘 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.
All'interno 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.
https://amzn.to/4rfzjXE
Molti dei progetti presenti su progettiarduino.com utilizzano componenti elettronici di base come LED, resistenze, sensori e breadboard.
Se stai iniziando con Arduino, il modo più semplice è utilizzare un kit completo per principianti, che include quasi tutti i componenti necessari per realizzare molti dei progetti presenti sul sito.
👉 Kit Arduino consigliato:
ℹ️ Link di affiliazione Amazon: in qualità di Affiliato Amazon ricevo un guadagno dagli acquisti idonei, senza alcun costo aggiuntivo per te.
https://amzn.to/4b3dxjW
📘 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.
All'interno 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.
https://amzn.to/4rfzjXE
📚 Librerie necessarie
Per realizzare il progetto devi installare:
Per installare le altre librerie:
Per realizzare il progetto devi installare:
- LiquidCrystal_I2C;
- RTClib.
- Wire;
- EEPROM.
Per installare le altre librerie:
- apri Arduino IDE;
- vai su Sketch → Include Library → Manage Libraries;
- cerca LiquidCrystal I2C;
- installa una versione compatibile con il tuo display;
- cerca RTClib;
- installa la libreria sviluppata da Adafruit.
🔌 Schema di collegamento
Display LCD 20×4 I2C
Se il display non funziona, il tuo modulo potrebbe utilizzare l’indirizzo 0x3F.
Modulo RTC DS3231
Reed switch porta
Sensore PIR HC-SR501
Pulsante EVENTO
Pulsante SU
Pulsante GIÙ
Tenendo premuti contemporaneamente SU e GIÙ per tre secondi, il registro viene cancellato.
Display LCD 20×4 I2C
- VCC → 5V;
- GND → GND;
- SDA → A4;
- SCL → A5.
Se il display non funziona, il tuo modulo potrebbe utilizzare l’indirizzo 0x3F.
Modulo RTC DS3231
- VCC → 5V;
- GND → GND;
- SDA → A4;
- SCL → A5.
Reed switch porta
- un terminale → pin digitale 2;
- terminale opposto → GND.
- magnete vicino e porta chiusa → LOW;
- magnete lontano e porta aperta → HIGH.
Sensore PIR HC-SR501
- VCC → 5V;
- GND → GND;
- OUT → pin digitale 3.
Pulsante EVENTO
- un terminale → pin digitale 4;
- terminale opposto → GND.
Pulsante SU
- un terminale → pin digitale 5;
- terminale opposto → GND.
Pulsante GIÙ
- un terminale → pin digitale 6;
- terminale opposto → GND.
Tenendo premuti contemporaneamente SU e GIÙ per tre secondi, il registro viene cancellato.
💻 Codice Arduino
Il programma registra cinque tipi di evento:
Ogni registrazione contiene un codice evento e data e ora fornite dal modulo RTC DS3231.
Il registro utilizza un buffer circolare di dieci posizioni.
Quando viene inserito l’undicesimo evento, la registrazione più vecchia viene sostituita automaticamente.
Il programma registra cinque tipi di evento:
- porta aperta;
- porta chiusa;
- movimento rilevato;
- evento manuale;
- registro cancellato.
Ogni registrazione contiene un codice evento e data e ora fornite dal modulo RTC DS3231.
Il registro utilizza un buffer circolare di dieci posizioni.
Quando viene inserito l’undicesimo evento, la registrazione più vecchia viene sostituita automaticamente.
⚙️ Come funziona
Arduino controlla continuamente:
Quando uno stato cambia, viene creata una nuova registrazione.
Per esempio, aprendo la porta il sistema salva:
PORTA APERTA
insieme all’ora e alla data correnti.
Il display mostra inizialmente la schermata principale con:
Arduino controlla continuamente:
- stato della porta;
- uscita del sensore PIR;
- pulsante per l’evento manuale;
- pulsanti di navigazione.
Quando uno stato cambia, viene creata una nuova registrazione.
Per esempio, aprendo la porta il sistema salva:
PORTA APERTA
insieme all’ora e alla data correnti.
Il display mostra inizialmente la schermata principale con:
- ora corrente;
- stato della porta;
- stato del sensore PIR;
- numero di eventi presenti.
📋 Struttura di una registrazione
Ogni evento viene salvato in una struttura:
struct Evento {
byte tipo;
byte giorno;
byte mese;
byte ora;
byte minuto;
};
Questa soluzione occupa poca memoria.
Non viene salvato direttamente il testo completo dell’evento. Il programma conserva soltanto un numero che identifica il messaggio.
Per esempio:
Il testo viene ricostruito soltanto quando deve essere mostrato sul display.
Ogni evento viene salvato in una struttura:
struct Evento {
byte tipo;
byte giorno;
byte mese;
byte ora;
byte minuto;
};
Questa soluzione occupa poca memoria.
Non viene salvato direttamente il testo completo dell’evento. Il programma conserva soltanto un numero che identifica il messaggio.
Per esempio:
- 1 → porta aperta;
- 2 → porta chiusa;
- 3 → movimento;
- 4 → evento manuale.
Il testo viene ricostruito soltanto quando deve essere mostrato sul display.
💾 Salvataggio nella EEPROM
Il registro viene salvato nella EEPROM di Arduino.
La memoria contiene:
Quando Arduino viene acceso, il programma controlla la firma.
Se la firma è valida, carica il registro precedente.
Se la memoria non è mai stata inizializzata, crea automaticamente un registro vuoto.
Il registro viene salvato nella EEPROM di Arduino.
La memoria contiene:
- una firma di controllo;
- numero degli eventi disponibili;
- posizione della prossima scrittura;
- dieci registrazioni.
Quando Arduino viene acceso, il programma controlla la firma.
Se la firma è valida, carica il registro precedente.
Se la memoria non è mai stata inizializzata, crea automaticamente un registro vuoto.
🚪 Registrazione della porta
Il reed switch viene controllato continuamente.
Il programma registra un evento soltanto quando lo stato cambia.
Questo evita di salvare continuamente lo stesso messaggio.
Gli eventi possibili sono:
Il reed switch viene controllato continuamente.
Il programma registra un evento soltanto quando lo stato cambia.
Questo evita di salvare continuamente lo stesso messaggio.
Gli eventi possibili sono:
- PORTA APERTA;
- PORTA CHIUSA.
🚶 Rilevamento del movimento
Quando il sensore PIR passa da LOW a HIGH, Arduino registra:
MOVIMENTO
Il programma registra soltanto il fronte iniziale del segnale.
Il PIR può mantenere l’uscita alta per alcuni secondi, ma questo non genera decine di eventi identici.
Una nuova registrazione viene creata soltanto dopo che il sensore è tornato a LOW e rileva un nuovo movimento.
Quando il sensore PIR passa da LOW a HIGH, Arduino registra:
MOVIMENTO
Il programma registra soltanto il fronte iniziale del segnale.
Il PIR può mantenere l’uscita alta per alcuni secondi, ma questo non genera decine di eventi identici.
Una nuova registrazione viene creata soltanto dopo che il sensore è tornato a LOW e rileva un nuovo movimento.
🔘 Evento manuale
Premendo il pulsante EVENTO, Arduino salva:
EVENTO MANUALE
Questa funzione può essere utilizzata per:
Premendo il pulsante EVENTO, Arduino salva:
EVENTO MANUALE
Questa funzione può essere utilizzata per:
- registrare un test;
- annotare un controllo;
- simulare un allarme;
- verificare il funzionamento del registro.
📟 Consultazione degli eventi
Dalla schermata principale:
Ogni pagina mostra:
Dalla schermata principale:
- premi GIÙ per aprire il registro;
- premi SU per spostarti verso gli eventi più recenti;
- premi GIÙ per consultare quelli più vecchi;
- premi EVENTO per tornare alla schermata principale.
Ogni pagina mostra:
- numero dell’evento;
- tipo;
- ora;
- data.
⚠️ Problemi comuni
Il display non mostra nulla
Controlla:
Il PIR genera eventi appena acceso
Il sensore HC-SR501 può richiedere alcuni secondi per stabilizzarsi.
Durante questo periodo evita di muoverti davanti al sensore.
La porta risulta aperta quando è chiusa
Inverti nel codice:
digitalRead(PIN_PORTA) == HIGH
con:
digitalRead(PIN_PORTA) == LOW
Gli eventi scompaiono dopo lo spegnimento
Controlla che:
Il display non mostra nulla
Controlla:
- alimentazione;
- collegamenti SDA e SCL;
- contrasto del display;
- indirizzo I2C.
Il PIR genera eventi appena acceso
Il sensore HC-SR501 può richiedere alcuni secondi per stabilizzarsi.
Durante questo periodo evita di muoverti davanti al sensore.
La porta risulta aperta quando è chiusa
Inverti nel codice:
digitalRead(PIN_PORTA) == HIGH
con:
digitalRead(PIN_PORTA) == LOW
Gli eventi scompaiono dopo lo spegnimento
Controlla che:
- il codice venga caricato correttamente;
- la EEPROM non venga reinizializzata continuamente;
- la firma salvata corrisponda a quella presente nel programma.
🧠 Perché è un progetto importante
Con questo progetto impari a:
👉 Queste tecniche saranno molto utili nei progetti dedicati a robot, automazioni, sicurezza e sistemi domotici.
Con questo progetto impari a:
- creare un registro degli eventi;
- associare data e ora alle azioni;
- utilizzare strutture dati;
- creare un buffer circolare;
- salvare informazioni nella EEPROM;
- rilevare il cambiamento di un ingresso;
- distinguere stato e transizione;
- navigare tra registrazioni;
- riconoscere una pressione lunga;
- realizzare una piccola centralina di controllo.
👉 Queste tecniche saranno molto utili nei progetti dedicati a robot, automazioni, sicurezza e sistemi domotici.
🔄 Varianti possibili
Vuoi migliorare il progetto?
Vuoi migliorare il progetto?
- 🗃️ salva centinaia di eventi su microSD;
- 📆 registra anche l’anno;
- 🔔 aggiungi un buzzer;
- 🚨 assegna una priorità agli eventi;
- 🔐 aggiungi un lettore RFID;
- 🌡️ registra temperature fuori soglia;
- ⚡ salva l’attivazione dei relè;
- 📶 invia il registro tramite Wi-Fi;
- 📱 mostra gli eventi su una pagina web;
- 🔘 aggiungi un pulsante dedicato alla cancellazione;
- 📟 utilizza un display OLED;
- 🏠 integra il registro in una centralina domotica.