Nota

Ciao e benvenuto nella Community Facebook degli appassionati di SunFounder Raspberry Pi, Arduino ed ESP32! Approfondisci le tue competenze su Raspberry Pi, Arduino ed ESP32 insieme ad altri maker come te.

Perché unirsi?

  • Supporto Esperto: Risolvi problemi post-vendita e affronta sfide tecniche con il supporto del nostro team e della nostra community.

  • Impara e Condividi: Scambia consigli e tutorial per migliorare le tue competenze.

  • Anteprime Esclusive: Accedi in anteprima a nuovi annunci di prodotto e contenuti esclusivi.

  • Sconti Speciali: Approfitta di sconti esclusivi sui nostri prodotti più recenti.

  • Promozioni Festive e Giveaway: Partecipa a concorsi e promozioni durante le festività.

👉 Pronto a scoprire e creare con noi? Clicca su [qui] ed entra oggi stesso!

Lezione 16: Modulo Orologio in Tempo Reale (DS1302)

In questa lezione imparerai a configurare e utilizzare un modulo RTC (Real Time Clock) con Arduino. Vedremo come inizializzare il modulo DS1302, visualizzare la data e l’ora correnti sul monitor seriale e garantire una misurazione del tempo accurata. Questa sessione è ideale per chi è interessato a progetti basati sul tempo nei sistemi embedded e offre un’esperienza pratica nella gestione di data e ora, nell’uso di librerie RTC e nella risoluzione dei problemi più comuni. Il progetto è adatto a chi ha già familiarità con le basi di Arduino.

Componenti Necessari

Per questo progetto sono necessari i seguenti componenti.

È sicuramente comodo acquistare un kit completo. Ecco il link:

Nome

CONTENUTO DEL KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

Puoi anche acquistare i componenti separatamente dai link sottostanti.

Descrizione del Componente

Link per l’acquisto

Arduino UNO R3 o R4

ACQUISTA

Modulo Orologio in Tempo Reale (DS1302)

ACQUISTA

Collegamenti

../_images/Lesson_16_DS1302_module_circuit_uno_bb.png

Codice

Nota

Per installare la libreria, apri l’Arduino Library Manager, cerca «Rtc by Makuna» e installala.

Analisi del Codice

  1. Inizializzazione e inclusione delle librerie

    Nota

    Per installare la libreria, apri l’Arduino Library Manager, cerca «Rtc by Makuna» e installala.

    In questa sezione vengono incluse le librerie necessarie per l’utilizzo del modulo RTC DS1302.

    #include <ThreeWire.h>
    #include <RtcDS1302.h>
    
  2. Definizione dei pin e creazione dell’istanza RTC

    Vengono definiti i pin per la comunicazione e viene creata un’istanza dell’oggetto RTC.

    const int IO = 4;    // DAT
    const int SCLK = 5;  // CLK
    const int CE = 2;    // RST
    
    ThreeWire myWire(4, 5, 2);  // IO, SCLK, CE
    RtcDS1302<ThreeWire> Rtc(myWire);
    
  3. Funzione setup()

    Questa funzione inizializza la comunicazione seriale e configura il modulo RTC. Sono inclusi diversi controlli per assicurarsi che il modulo funzioni correttamente.

    void setup() {
      Serial.begin(9600);
    
      Serial.print("compiled: ");
      Serial.print(__DATE__);
      Serial.println(__TIME__);
    
      Rtc.Begin();
    
      RtcDateTime compiled = RtcDateTime(__DATE__, __TIME__);
      printDateTime(compiled);
      Serial.println();
    
      if (!Rtc.IsDateTimeValid()) {
        // Cause comuni:
        //    1) è la prima esecuzione e l’orologio non era attivo
        //    2) la batteria del modulo è scarica o assente
    
        Serial.println("RTC lost confidence in the DateTime!");
        Rtc.SetDateTime(compiled);
      }
    
      if (Rtc.GetIsWriteProtected()) {
        Serial.println("RTC was write protected, enabling writing now");
        Rtc.SetIsWriteProtected(false);
      }
    
      if (!Rtc.GetIsRunning()) {
        Serial.println("RTC was not actively running, starting now");
        Rtc.SetIsRunning(true);
      }
    
      RtcDateTime now = Rtc.GetDateTime();
      if (now < compiled) {
        Serial.println("RTC is older than compile time!  (Updating DateTime)");
        Rtc.SetDateTime(compiled);
      } else if (now > compiled) {
        Serial.println("RTC is newer than compile time. (this is expected)");
      } else if (now == compiled) {
        Serial.println("RTC is the same as compile time! (not expected but all is fine)");
      }
    }
    
  4. Funzione loop()

    Questa funzione legge periodicamente data e ora dal modulo RTC e li visualizza sul monitor seriale. Controlla anche che il modulo mantenga una data valida.

    void loop() {
      RtcDateTime now = Rtc.GetDateTime();
    
      printDateTime(now);
      Serial.println();
    
      if (!now.IsValid()) {
        // Cause comuni:
        //    1) batteria scarica o mancante e interruzione dell’alimentazione
        Serial.println("RTC lost confidence in the DateTime!");
      }
    
      delay(5000);  // cinque secondi
    }
    
  5. Funzione per la stampa di data e ora

    Funzione di supporto che riceve un oggetto RtcDateTime e stampa la data e l’ora in formato leggibile sul monitor seriale.

    void printDateTime(const RtcDateTime& dt) {
      char datestring[20];
    
      snprintf_P(datestring,
                 countof(datestring),
                 PSTR("%02u/%02u/%04u %02u:%02u:%02u"),
                 dt.Month(),
                 dt.Day(),
                 dt.Year(),
                 dt.Hour(),
                 dt.Minute(),
                 dt.Second());
      Serial.print(datestring);
    }