MH Real Time Clock Modules 2 DS1302, un orologio per Arduino

Arduino e il modulo MH Real Time Clock Modules 2 DS1302
Arduino e il modulo MH Real Time Clock Modules 2 DS1302
0
(0)

Oggi vedremo come far funzionare questo interessante modulo, ovvero il MH Real-Time Clock Modules 2 DS1302  che, come ci dice il nome stesso, è basato sul chip DS1302, che fornisce la data e l’ora attuali ad Arduino. Un semplice orologio, direte voi, ma indispensabile quando si voglia tenere traccia del tempo che scorre.
Il vantaggio di questo modulo è che può mantenere l’ora anche per più anni, quindi anche se lo staccheremo dall’Arduino, se con la sua batteria CR2032, manterrà la corretta data.

Utilizzeremo per il funzionamento la libreria DS1302.h di rinkydinkelectronics.com scaricabile dal loro sito. Per installare una libreria vi rimando a questo articolo.

I collegamenti

VCC – 5v
GND – GND
CLK(SCLK) – Pin digitale 4
DAT(I/O) – Pin digitale 3
RST(CE) – Pin digitale 2

Arduino e il modulo MH Real Time Clock Modules 2 DS1302

Arduino e il modulo MH Real Time Clock Modules 2 DS1302

 

Sketch Serial_Easy

Vedremo ora l’esempio DS1302_Serial_Easy incluso nella libreria commentato nei passaggi più importanti.

// DS1302_Serial_Easy 
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my DS1302-library to 
// quickly send time and date information over a serial link
//
// I assume you know how to connect the DS1302.
// DS1302:  CE pin    -> Arduino Digital 2
//          I/O pin   -> Arduino Digital 3
//          SCLK pin  -> Arduino Digital 4

#include <DS1302.h>

// Init the DS1302
DS1302 rtc(2, 3, 4);

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
  rtc.setDOW(SUNDAY);        // Set Day-of-Week to FRIDAY
  rtc.setTime(10, 13, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(17, 06, 2018);   // Set the date to August 6th, 2010*/
}

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);
}

13 Inclusione della libreria DS1302.h
16 Creazione dell’oggetto rtc di tipo DS1302 con costruttore parametrico. I tre parametri sono i numeri dei pin utilizzati.
21-22 Tolgono la modalità ‘sola lettura’
25 Metodo dell’oggetto Serial necessario per la comunicazione via seriale
28-30 PRESTARE ATTENZIONE Queste tre righe servono ad impostare sull’orologio la data che vogliamo dargli. Una volta caricato lo sketch la data verrà impostata (modificatelo con la data attuale), a quel punto commentate queste tre righe ponendo un // davanti, in questo modo le volte successive non reimposterà la data ma utilizzerà quella precedentemente settata. Consiglio, al fine di una regolazione al secondo, di caricare lo sketch con un orario di un minuto in avanti e di aprire la comunicazione via seriale nell’esatto momento in cui scatta il minuto. L’avvio della porta seriale riavvierà l’Arduino e quindi l’orario coinciderà esattamente con quello reale.
36 Stampa del giorno della settimana
40 Stampa della data
44 Stampa dell’ora

Lettura della seriale (MH Real Time Clock Modules 2 DS1302)

Lettura della seriale

Sketch Serial_Hard

Vediamo ora il secondo esempio chiamato DS1202_Serial_Hard

// DS1302_Serial_Hard 
// Copyright (C)2015 Rinky-Dink Electronics, Henning Karlsen. All right reserved
// web: http://www.RinkyDinkElectronics.com/
//
// A quick demo of how to use my DS1302-library to 
// retrieve time- and date-date for you to manipulate.
//
// I assume you know how to connect the DS1302.
// DS1302:  CE pin    -> Arduino Digital 2
//          I/O pin   -> Arduino Digital 3
//          SCLK pin  -> Arduino Digital 4

#include <DS1302.h>

// Init the DS1302
DS1302 rtc(2, 3, 4);

// Init a Time-data structure
Time t;

void setup()
{
  // Set the clock to run-mode, and disable the write protection
  rtc.halt(false);
  rtc.writeProtect(false);
  
  // Setup Serial connection
  Serial.begin(9600);

  // The following lines can be commented out to use the values already stored in the DS1302
  /*
  rtc.setDOW(FRIDAY);        // Set Day-of-Week to FRIDAY
  rtc.setTime(12, 0, 0);     // Set the time to 12:00:00 (24hr format)
  rtc.setDate(6, 8, 2010);   // Set the date to August 6th, 2010
  */
}

void loop()
{
  // Get data from the DS1302
  t = rtc.getTime();
  
  // Send date over serial connection
  Serial.print("Today is the ");
  Serial.print(t.date, DEC);
  Serial.print(". day of ");
  Serial.print(rtc.getMonthStr());
  Serial.print(" in the year ");
  Serial.print(t.year, DEC);
  Serial.println(".");
  
  // Send Day-of-Week and time
  Serial.print("It is the ");
  Serial.print(t.dow, DEC);
  Serial.print(". day of the week (counting monday as the 1th), and it has passed ");
  Serial.print(t.hour, DEC);
  Serial.print(" hour(s), ");
  Serial.print(t.min, DEC);
  Serial.print(" minute(s) and ");
  Serial.print(t.sec, DEC);
  Serial.println(" second(s) since midnight.");

  // Send a divider for readability
  Serial.println("  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -  -");
  
  // Wait one second before repeating :)
  delay (1000);
}

 

Le prime righe sono uguali al primo codice.

19 Dichiarazione dell’oggetto t di tipo Time. Questo oggetto è una struttura adatta a contenere la data, l’ora, etc.
41 Inizializzazione di t con l’assegnazione del metodo getTime() dell’oggetto rtc. In pratica la data attuale contenuta nell’RTC viene passata alle variabili contenute all’interno della struttura t.
44-61 Stampa delle variabili di t tramite le classiche Serial.Print()

Spero che questo tutorial su come usare il modulo MH Real Time Clock Modules 2 DS1302 con Arduino vi sia stato utile. Per dubbi, domande o altro rimango a disposizione.

Grazie,
Alessandro

Votalo e aiutami a migliorare!

Rating medio 0 / 5. Numero di voti 0

Nessun voto per il momento, vuoi essere il primo?

Clicca sul tuo social preferito.

Cosa ho sbagliato?

Hai qualche consiglio per migliorare la qualità?

Alessandro Oppo

Alessandro è un milanese che vorrebbe scappare da Milano, è appassionato di informatica ma vorrebbe vivere senza telefono, è un artigiano eppure vorrebbe robotizzare tutto, impara una cosa e già vorrebbe studiare dell’altro. Autodidatta da sempre, gli piace sbattere la testa finché tutto non funziona come vuole lui, spesso ci riesce anche! Il motto che si ripete dentro la testa è: “Se ci sono riusciti gli altri ci posso riuscire anche io”.

Potrebbero interessarti anche...

13 risposte

  1. Flavio Toniutti ha detto:

    Il settaggio corretto della data quale è?
    giorno, mese, anno
    mese, giorno anno
    //rtc.setDate(11, 28, 2018); // Set the date to August 6th, 2010

  2. Flavio Toniutti ha detto:

    Quando carichi lo sketch con l’orario impostato un minuto avanti poi avvii il monitor seriale nel preciso momento in cui sei sincronizzato, e fino qui ok, l’orologio comincia a contare dal momento che apri il monitor seriale. Poi si mettono le // per commentare le tre righe di codice relative ai settaggi di orario data formato ora e si ricarica lo sketch nuovamente, è corretto?

  3. Flavio Toniutti ha detto:

    Il monito seriale mi fa vedere questo, faccio copia e incolla:
    Wednesday 28.11.2018 — 12:38:23
    Monday 14.08.2012 — 09:22:12
    Wednesday 28.11.2018 — 12:38:25
    812:38:25 50.44.2006 — 04:14:09
    Wednesday 28.11.2018 — 12:38:27
    Monday 14.08.2012 — 09:22:14
    Wednesday 28.11.2018 — 12:38:29
    Monday 14.08.2012 — 09:22:18
    Wednesday 28.11.2018 — 12:38:31
    812:38:31 50.44.2006 — 04:14:12
    Wednesday 28.11.2018 — 12:38:33
    Monday 14.08.2012 — 09:22:20
    Wednesday 28.11.2018 — 12:38:35
    812:38:35 50.44.2006 — 04:14:13

  4. Fabio Ciotta ha detto:

    Buongiorno Alessandro,
    grazie per la spiegazione esaustiva.
    Esiste un modo per far apparire il giorno della settimana in Italiano? Lunedì, martedì….ecc.
    Ho fatto una ricerca in rete, ma niente. Ho provato anche a riscrivere il DS1302.h sostituendo i vari #define con LUNEDI 1 ecc. ma niente.
    Grazie

Lascia un commento

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.