RTC Arduino: usa arduino come orologio

Qualche tempo fa ti ho parlato della shield RTC Arduino basata sul DS1307 della Dallas in grado di scandire il tempo nei tuoi progetti con pochi componenti aggiuntivi.

RTC Arduino

Oggi ti mostro come collegare un display LCD per visualizzare l’ora e la data riportati da questa scheda.

Componenti per il progetto RTC Arduino come orologio

Come vedi anche nell’immagine in alto i componenti che ti occorrono sono:

  • n.1 Arduino Uno R3 ( puoi usare anche la R1 o R2 e le precedenti ma vanno ponticellati 2 pin della RTC Shield)
  • n.1 RTC Arduino Shield
  • n.1 display LCD ACM1602B ( 2 linee 16 caratteri )
  • n.1 breadboard
  • un po’ di cavetti per breadboard

Schema dell’orologio RTC Arduino

Puoi osservare lo schema dei collegamenti dalla foto:

RTC Arduino

Oppure seguire le istruzioni per collegare l’LCD riportate in questo articolo, se preferisci ti ho realizzato uno schema dei collegamenti completo con Fritzing in cui non è presente la shield RTC Arduino ma ho comunque trovato un RTC basato sul medesimo chip della Dallas e realizzato i collegamenti su questo:

rtc arduino lcd

Se hai la shield RTC Arduino e una Arduino Uno Rev3 sarà più semplice.

lo sketch

Ecco lo sketch che puoi utilizare per realizzare il tuo orologio con RTC Arduino shield:

/*
 * RTC & LCD
 *
 * Autore: Mauro Alfieri
 * Tw: @mauroalfieri
 *
 * Web: https://www.mauroalfieri.it
 */

#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>

#define BACKLIGHT 2
#define CONTRAST  3

char buffer[11];

RTC_DS1307 RTC;
LiquidCrystal lcd(12, 11, 7, 6, 5, 4);

void setup () {
    pinMode( BACKLIGHT, OUTPUT );
    pinMode( CONTRAST, OUTPUT );
    digitalWrite( BACKLIGHT, HIGH );
    analogWrite( CONTRAST, 40 );

    Wire.begin();
    RTC.begin();
    lcd.begin(16, 2);

    RTC.sqw(1);
    if (! RTC.isrunning()) {
      RTC.adjust(DateTime(__DATE__, __TIME__));
    }
}

void loop () {

    DateTime now = RTC.now();
    lcd.clear();

    sprintf(buffer,  "%02d/%02d/%d", now.day(), now.month(), now.year());
    lcd.setCursor(0,0);
    lcd.print( buffer );

    char buffer[10] = "";

    sprintf(buffer,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
    lcd.setCursor(0,1);
    lcd.print( buffer );

    delay(1000);
}

inizio subito dalle prime linee:

linee 10-12: includi le librerie necessarie al funzionamento dell’RTC Arduino e dell’LCD, in particolare la libreria Wire.h serve alla corretta gestione dell’RTC Shield;

linee 14-15: definisci i pin collegati ai comandi BLACKLIGHT e CONTRAST dell’LCD, in questo modo potrai controllare direttamente da Arduino la luminosità ed il contrasto del display, in questo esempio li ho predisposti come collegamento e li imposterai fissi, in futuri progetti potresti decidere di risparmiare la batteria spegnendo il display quando non ti occorre;

linea 17: definisci una variabile di tipo array char di 11 bit denominata buffer il cui uso ti sarà chiaro in seguito;

linea 19: definisci l’istanza RTC di tipo RTD_DS1307, questo indica alla classse RTClib.h che tipo di chip RTC utilizzi;

linea 20: definisci un’istanza lcd indicando i pin a cui hai connesso l’LCD, in particolare i pin RS, ENABLE e D4-D7;

linee 23-26: definisci la modalità di funzionamento dei due pin di BLACKLIGHT e CONTRAST ed imposta un valore PWM per il contrasto ( 40 ) utilizzando il comando analogWrite() e porta ad HIGH il pin di BLACKLIGHT accendendo in questo modo il display;

linee 28-30: inizializza le istanze relative alle classi incluse alle linee 10-12 e definite alle linee 19-20;

linea 32: imposta il lampeggio del led presente nella RTC Shield ( pin SQW ) in modo che si accenda a ritmo di 1Hz ( un lampeggio al secondo, nel mio schema elettrico, senza RTC Shield, il pin SQW non è collegato se vuoi puoi metterci un led ed una resistenza per ottenere il medesimo risultato della RTC Schield;

linee 33-35: verifica che l’RTC sia correttamente connesso e che l’orario sia impostato, anche se non corretto, in quanto non può avere la percezione dell’ora esatta a meno che non gliela indichi. Se rileva una anomalia nelle impostazioni provvede ad impostare l’orario corrente prendendolo dal computer in fase di Upload dello sketch, vedi l’articolo sull’RTC pubblicato qualche mese fa.

linea 40: usa il metodo now() della classe RTC per recuperare l’ora dal DS1307;

linea 41: pulisci ogni carattere presente sull’LCD, questa operazione ti garantisce di non avere caratteri sottoimpressi ad ogni ciclo di loop();

linea 43: è una linea che comprende diversi comandi, i metodi day(), month() e year() della classe RTC recuperano rispettivamente il giorno, mese ed anno correnti impostati nel DS1307 dal metodo now() e la funzione sprintf() memorizza i 3 valori nella variabile buffer , vedi linea 17, secondo il tipo di formattazione gg/mm/aaaa insicato dal secondo parametro della funzione sprintf();

linea 44: posiziona il cursore alla prima linea e prima colonna del display;

linea 45: scrivi sul display il valore della variabile buffer;

linea 47: azzera la variabile buffer per consentirti di riutilizzarla per memorizzare l’ora corrente;

linea 49: è identica alla linea 43 con la sola differenza che i metodi hour(), minute() e second() recuperano ora, minuti e secondi, e che la formattazione è del tipo hh:mm:ss;

linea 50: sposta il cursore alla prima colonna della seconda riga;

linea 51: scrive il valore della variabile buffer;

linea 53: attendi un secondo ( 1000 millisecondi ) prima di eseguire un nuovo ciclo di lopp();

Video dell’orologio RTC Arduino

Come spesso faccio ho realizzato anche un video dell’orologio in funzione:

Nelle foto e nel video c’è una anomalia, dimmi qual’è con un commento 🙂

Buon divertimento !!!

Prima di inserire un commento, per favore, leggi il regolamento

Permanent link to this article: https://www.mauroalfieri.it/elettronica/rtc-arduino-come-orologio.html

81 pings

Skip to comment form

  1. […] programmatore Mauro Alfieri ha pensato di realizzarlo così. Sul suo sito potete trovare lo schema su come costruirne uno vostro. Che ne […]

  2. […] base è composta da Arduino, un relay con il suo circuito, un RTC tipo DS1307 ed una moka […]

  3. […] RTC Arduino: usa arduino come orologio […]

Lascia un commento

Your email address will not be published.

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