Skip to content
logo9minuti120x48
Menu
  • Home
  • Tutorial
    • Zaini
    • Stampa 3d
    • ebook
    • Informatica
  • Scritti
    • Racconti
    • Articoli
    • Temi
    • Storia
  • Video
  • Progetti
    • Progetto Carcere
    • Progetto Istruzione
    • Progetto Acque pulite
    • Progetto Tecnologia
  • Chi siamo
    • LinkTree
  • Privacy Policy
    • Cookie Policy (EU)
  • Blog
  • Donazioni
Menu
Arduino e il modulo MH Real Time Clock Modules 2 DS1302

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

Posted on 17 Giugno 20183 Settembre 2019 by Alessandro Oppo

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

Dammi un 5 virtuale, clicca like e condividi.

  • Fai clic qui per condividere su LinkedIn (Si apre in una nuova finestra)
  • Fai clic per condividere su Facebook (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Twitter (Si apre in una nuova finestra)
  • Fai clic qui per condividere su Reddit (Si apre in una nuova finestra)
  • Fai clic per condividere su WhatsApp (Si apre in una nuova finestra)
  • Fai clic per condividere su Telegram (Si apre in una nuova finestra)
  • Fai clic per inviare un link a un amico via e-mail (Si apre in una nuova finestra)

Related

13 thoughts on “MH Real Time Clock Modules 2 DS1302, un orologio per Arduino”

  1. Flavio Toniutti ha detto:
    28 Novembre 2018 alle 12:09 pm

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

    Rispondi
    1. Alessandro Oppo ha detto:
      28 Novembre 2018 alle 12:24 pm

      Ciao Flavio, effettivamente non l’ho scritto. rtc.setDate(17, 06, 2018); giorno, mese, anno.
      Se ti serve altro chiedi pure.
      Alessandro

      Rispondi
  2. Flavio Toniutti ha detto:
    28 Novembre 2018 alle 12:34 pm

    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?

    Rispondi
    1. Alessandro Oppo ha detto:
      28 Novembre 2018 alle 12:37 pm

      Esattamente! Se fai così dovresti spaccare il secondo! Fammi sapere se hai problemi.

      Rispondi
  3. Flavio Toniutti ha detto:
    28 Novembre 2018 alle 12:39 pm

    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

    Rispondi
    1. Alessandro Oppo ha detto:
      28 Novembre 2018 alle 12:57 pm

      Uhm strano. Immagino tu stia usando il primo sketch. Hai fatto qualche modifica?

      Rispondi
      1. Flavio Toniutti ha detto:
        28 Novembre 2018 alle 1:03 pm

        Si, sto usando il primo sketch.
        No, nessuna modifica.

        Rispondi
      2. Flavio Toniutti ha detto:
        28 Novembre 2018 alle 1:05 pm

        Comunque,
        questa riga è corretta Wednesday 28.11.2018 — 12:38:23
        mentre questa non centra nulla Monday 14.08.2012 — 09:22:12

        Rispondi
        1. Alessandro Oppo ha detto:
          28 Novembre 2018 alle 1:51 pm

          Sì, avevo notato. Una riga giusta e una sbagliata. Il modulo è identico a quello nella foto vero?

          Rispondi
          1. Flavio Toniutti ha detto:
            16 Dicembre 2018 alle 10:22 pm

            Si, il modulo è identico.

          2. Alessandro Oppo ha detto:
            17 Dicembre 2018 alle 11:14 am

            Ciao! Non so se sia il tuo vecchio commento che si è finalmente sbloccato o se tu abbia veramente scritto. In ogni caso è una anomalia che non so da cosa possa dipendere. Mi incolleresti il codice di tutto lo sketch su pastebin.com?

  4. Fabio Ciotta ha detto:
    17 Aprile 2020 alle 11:10 am

    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

    Rispondi
    1. Alessandro Oppo ha detto:
      17 Aprile 2020 alle 11:55 am

      Ciao Fabio, dovresti aprire i file della libreria e guardare il metodo getDOWStr() come è stato scritto. Se ci sono i nomi in inglese lì dovrebbe essere possibile modificarli. Fammi sapere.

      Rispondi

Cosa ne pensi? Fammelo sapere con un messaggio Annulla risposta

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

Scoprici sui social

  • YouTube
  • Telegram
  • Facebook
  • RSS Feed

    Ultimi post

    • Buzzurretto e la scuola – Racconto breve
    • Il mio punto di vista sul progetto scuola
    • Di nuovo nuvole – Racconto breve
    • L’intelligenza artificiale, la forza della logica e la morale – ChatGPT
    • Videogrep, how to extract a certain word from a video (or more)
    • Brucerò tutto non appena è stato scritto – Racconto breve
    • C’è del lavoro da fare – Racconto breve

    Newsletter

    ©2023 9minuti | Design: Newspaperly WordPress Theme
    Manage Cookie Consent
    Usiamo cookie per ottimizzare il nostro sito web ed i nostri servizi.
    Cookie funzionali Sempre attivo
    The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
    Preferences
    The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
    Statistics
    The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
    Marketing
    The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
    Gestisci opzioni Gestisci servizi Gestisci fornitori Per saperne di più su questi scopi
    Visualizza preference
    {title} {title} {title}
     

    Caricamento commenti...