Data e ora con Arduino e il modulo DS3231

Spesso in molti progetti ci si trova davanti alla necessità di conoscere la data e l’ora esatte, ad esempio comandare la pompa per innaffiare il giardino solo dalle 06:00 alle 07:00 oppure registrare la variazione della temperatura in una stanza in base all’orario o ancora realizzare una sveglia.

Se anche tu hai bisogno di far conoscere la data e l’ora alla tua scheda Arduino sei nel post giusto, continua a leggere e ti spiegherò come fare.

Il modulo RTC DS3231 e Arduino

La prima domanda che una persona che conosca in parte il funzionamento di una scheda Arduino potrebbe essere questa. Perchè Arduino ha bisogno di un modulo aggiuntivo per sapere la data e l’ora se internamente ha un quarzo con il quale potrebbe senza problemi tenere aggiornato un calendario?

Semplice, perchè una volta che togliamo l’alimentazione alla nostra Arduino perderà la data e l’ora che avevamo impostato. Quindi in nostro aiuto viene un piccolo modulo, il modulo DS3231.

Caratteristiche DS3231

Questo piccolo modulo ha diversi vantaggi:

  • E’ molto economico
  • Fornisce giorno,  mese,  anno, ore, minuti e secondi
  • Compensa automaticamente gli anni bisestili e i mesi con meno di 31 giorni
  • Può essere alimentata a 3.3V e a 5V
  • Ha una batteria 3V
  • Si basa sul protocollo I2C e questo significa che occorrono solo 2 fili per conoscere la data e l’ora

Cosa ci serve per questo tutorial

In questo piccolo tutorial vedremo come leggere la data e l’ora dal modulo DS3231 da Arduino, se ancora non li hai puoi ordinarli dai seguenti link.

*Acquistando i componenti attraverso i link qui sopra mi aiuterai sostenendo il mio lavoro, il tuo supporto è indispensabile!

Collegamento modulo DS3231 Arduino

I collegamenti tra il modulo DS3231 sono semplicissimi e come vedete dall’immagine seguente sono necessari solo 4 fili, 2 per l’alimentazione e altri due per il collegamento I2C. Se possiedi un Arduino Uno è necessario usare gli ingressi analogici 4 e 5 che sono quelli dedicati alla comunicazione seriale I2c.

Sketch e programmazione Arduino

Una volta completati i collegamenti non ci resta che fare il programma per mettere in comunicazione la nostra Arduino con il modulo DS3231.
Purtroppo il programma per comunicare con dispositivi che operano con la I2C non è ne semplice e ne corto, ma  fortunatamente esistono diverse librerie che ci semplificano di gran lunga la vita e ci mettono nelle condizioni di utilizzare il modulo I2C in poche righe di codice.

Per questo tutorial ho trovato e deciso di usare questa, libreria DS3231.

Una volta scaricata e installata la libreria potete aprire il codice di esempio che trovate nel seguente percorso.

File->Esempi->DS3231->Arduino->DS3231_Serial_Easy

e vi troverete davanti il seguente codice:

 

#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

void setup()
{
  // Setup Serial connection
  Serial.begin(115200);
  // Uncomment the next line if you are using an Arduino Leonardo
  //while (!Serial) {}
  
  // Initialize the rtc object
  rtc.begin();
  
  // The following lines can be uncommented to set the date and time
  //rtc.setDOW(WEDNESDAY);     // Set Day-of-Week to SUNDAY
  //rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  //rtc.setDate(1, 1, 2014);   // Set the date to January 1st, 2014
}

void loop()
{
  // Send Day-of-Week
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Send date
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Send time
  Serial.println(rtc.getTimeStr());
  
  // Wait one second before repeating 🙂
  delay (1000);
}

Alla prima accensione del modulo DS3231 chiaramente la data e l’ora risulteranno sbagliate, per impostare per la prima volta l’orario basta rimuovere il simbolo del commento (//) nelle ultime 3 righe della funzione setup impostare i valori corretti e inviare il programma alla nostra Arduino.

Una volta eseguita la programmazione dell’orario ricordate di riportare i commenti allo stato iniziale altrimenti ogni volta che caricherete lo sketch verranno reimpostati e questo non va bene.

Infine per interrogare il modulo DS3231 e ricevere così l’orario o la data potete fare riferimento alle righe contenute nella funzione loop().

Bene ora sapete come impostare e interrogare il modulo DS3231 per ottenere l’ora o la data, ora potrai applicare queste tue nuove conoscenze in qualsiasi progetto tu voglia realizzare.

Buona fortuna.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *