PROGETTI ARDUINO

  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti
  • HOME
  • 200 Progetti
  • Progetti e Tutorial
  • Reti
    • Impara le reti
    • internet fibra
    • wifi mesh
    • modem router
    • diagnostica reti
    • ethernet lan
    • sicurezza configurazione
  • Elettronica
  • Recensioni
  • Manuale
  • Contatti

Progetto 140
​Sistema log eventi su LCD

🚀 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:
  • 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:
  • 🚪 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
​
  • 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
​

📚 Librerie necessarie
​

Per realizzare il progetto devi installare:
  • LiquidCrystal_I2C;
  • RTClib.
Il programma utilizza inoltre:
  • Wire;
  • EEPROM.
Queste ultime sono già incluse nell’Arduino IDE.
​
Per installare le altre librerie:
  1. apri Arduino IDE;
  2. vai su Sketch → Include Library → Manage Libraries;
  3. cerca LiquidCrystal I2C;
  4. installa una versione compatibile con il tuo display;
  5. cerca RTClib;
  6. installa la libreria sviluppata da Adafruit.

🔌 Schema di collegamento
​

Display LCD 20×4 I2C
  • VCC → 5V;
  • GND → GND;
  • SDA → A4;
  • SCL → A5.
Nel codice viene utilizzato l’indirizzo I2C 0x27.
Se il display non funziona, il tuo modulo potrebbe utilizzare l’indirizzo 0x3F.
​
Modulo RTC DS3231
  • VCC → 5V;
  • GND → GND;
  • SDA → A4;
  • SCL → A5.
Il display LCD e il modulo RTC condividono gli stessi pin I2C.

Reed switch porta
  • un terminale → pin digitale 2;
  • terminale opposto → GND.
Con INPUT_PULLUP, nel collegamento utilizzato:
  • magnete vicino e porta chiusa → LOW;
  • magnete lontano e porta aperta → HIGH.
​
Sensore PIR HC-SR501
  • VCC → 5V;
  • GND → GND;
  • OUT → pin digitale 3.
Quando rileva un movimento, l’uscita passa a livello HIGH.

Pulsante EVENTO
  • un terminale → pin digitale 4;
  • terminale opposto → GND.
Registra manualmente un evento nel registro.

Pulsante SU
  • un terminale → pin digitale 5;
  • terminale opposto → GND.
Permette di visualizzare un evento più recente.

Pulsante GIÙ
  • un terminale → pin digitale 6;
  • terminale opposto → GND.
Permette di visualizzare un evento più vecchio.
Tenendo premuti contemporaneamente SU e GIÙ per tre secondi, il registro viene cancellato.
Foto

💻 Codice Arduino
​

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:
  • 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:
  • 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:
  • 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:
  • PORTA APERTA;
  • PORTA CHIUSA.
Se il sensore lavora al contrario, è sufficiente invertire la condizione di lettura nel codice.

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

🔘 Evento manuale
​

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:
  • 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:
  • alimentazione;
  • collegamenti SDA e SCL;
  • contrasto del display;
  • indirizzo I2C.
Se 0x27 non funziona, prova 0x3F.

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:
  • 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?
  • 🗃️ 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.

Foto
Foto

© ProgettiArduino.com 2026 - Fancello Salvatore
​ Layout, immagini e testi sono di esclusiva proprietà di www.progettiarduino.com 
Privacy Policy