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 !!!

  • Questo sito ed i suoi contenuti è fornito "così com'è" e Mauro Alfieri non rilascia alcuna dichiarazione o garanzia di alcun tipo, esplicita o implicita, riguardo alla completezza, accuratezza, affidabilità, idoneità o disponibilità del sito o delle informazioni, prodotti, servizi o grafiche correlate contenute sul sito per qualsiasi scopo.
  • Ti chiedo di leggere e rispettare il regolamento del sito prima di utilizzarlo
  • Ti chiedo di leggere i Termini e Condizioni d'uso del sito prima di utilizzarlo
  • In qualità di Affiliato Amazon io ricevo un guadagno dagli acquisti idonei qualora siano presenti link al suddetto sito.

Permalink link a questo articolo: https://www.mauroalfieri.it/elettronica/rtc-arduino-come-orologio.html

78 commenti

3 ping

Vai al modulo dei commenti

    • idris il 14 Ottobre 2012 alle 12:48
    • Rispondi

    Ciao. Ho realizzato l’orologio usando un disply 20×4 (di recupero).E’ possibile aggiungere dei tasti per modificare data e ora come sul video?.GRAZIE ancora

    1. Ciao Idris,
      è uno dei progetti in cantiere, presto ultimerò lo sketch e lo pubblico con tanto di spiegazione 🙂

      Mauro

    • comante il 22 Novembre 2012 alle 18:18
    • Rispondi

    Ciao Mauro anche io mi accodo alla richiesta di idris,facci avere notizie!
    ps complimenti per il sito

    1. Messaggio recepito 🙂
      Grazie per i complimenti !!!

    • daniele il 23 Dicembre 2012 alle 16:44
    • Rispondi

    ciao Mauro, complimenti per tutto, lo trovo molto interessante, volevo chiederti se sei riuscito nel progetto di aggiungere dei tasti per modificare ora e data. io ci sto provando ma ancora la strada per me me è molto lunga…………

    1. Ciao Daniele,
      devo chiederti scusa ma ancora, preso da mille progetti e voglia di fare, non mi ci sono concentrato.
      Cercherò di farlo per Gennaio 2013 per innaugurare un nuovo anno 🙂

      Mauro

        • daniele il 26 Dicembre 2012 alle 19:43
        • Rispondi

        Ok Mauro, attenderò volentieri,
        sei un grande 😉

    • Luca N il 26 Gennaio 2013 alle 10:57
    • Rispondi

    Ciao Mauro, finalmente un blog fatto come si deve che spieghi ai poveri mortali come usare arduino.
    Volevo chiederti un consiglio riguardo a un progetto.
    Vorrei fare in modo che a una determinata ora arduino accenda lentamente una luce led, secondo te è possibile? Magari già che ci siamo, ci metterei anche un display che segni l’ora, come hai fatto tu…
    Grazie in anticipo!

    PS io intanto leggo i tuoi tutorial per imparare ad usarlo…

    1. Ciao Luca,
      grazie per i complimenti.
      Il tuo progetto é fattibile, se ci pensi é come una sveglia, ad un certo orario esegue qualcosa, nel tuo progetto, il fare di una luce.

      Io ti consiglio di leggere i tutorial sui led e la dissolvenza, c’è ne sono molti nel blog, e poi provare ad unire questo con uno a tua scelta, il risultato sarà il tuo progetto 🙂

      Mauro

    • Alessio il 25 Febbraio 2013 alle 09:39
    • Rispondi

    Salve Mauro
    ho “copiato” il tuo sketch,ho scaricato la libreria da te consigliata, l’ho decompressa e inserita nella cartella delle libreria di arduino,ma quando lo vado a compilare mi da errore la riga 19.Ho provato a usare solo la comunicazione bus all’indirizzo 0x68 e funziona ,ma non riesco a modificarre l’ora.Mi volevo scusare per averti lasciato erroneamente lo stesso commento (sul DS1307) in un tutorial sui motori passo passo.. : |
    help me Mauro!!!
    comunque sei un luminario!!!!
    distinti saluti Alessio

    1. Ciao Alessio,
      come ti ho risposto nell’altro commento puoi indicarmi che versione dell’IDE utilizzi e quale errore ti restituisce?
      Così provo ad aiutarti.

      Mauro

    • Alessio il 25 Febbraio 2013 alle 14:40
    • Rispondi

    Salve Mauro
    la mia versione dell’IDE è 1.0.3 e il commento che mi restitusce quando lo vado a compilare è:
    sketch_feb25a:10: error: ‘RTC_DS1307’ does not name a type
    sketch_feb25a.ino: In function ‘void setup()’:
    sketch_feb25a:20: error: ‘RTC’ was not declared in this scope
    sketch_feb25a:25: error: ‘DateTime’ was not declared in this scope
    sketch_feb25a.ino: In function ‘void loop()’:
    sketch_feb25a:31: error: ‘DateTime’ was not declared in this scope
    sketch_feb25a:31: error: expected `;’ before ‘now’
    sketch_feb25a:34: error: ‘now’ was not declared in this scope
    Grazie per il tempo che mi stai dedicando….attendo tue notizie..
    P.S. ho provato anche a scaricare altre librerie prima di consultarti ma comunque non riesco a compilare lo sketch…
    Saluti Alessio

    1. L’errore che mi hai inviato si verifica:

      1. se non hai incluso la classe RTC all’inizio dello sketch
      2. la classe non ha il costruttore RTC_DS1307

      Scarica la libreria RTC per DS1307 dal sito del produttore.

      Mauro

    • Alessio il 25 Febbraio 2013 alle 16:13
    • Rispondi

    Salve Mauro
    ho cancellato tutto e ho scaricato nuovamente la libreri…Adesso la libreria la riconosce però non lo campila e mi da errore le riga 32 “RTC.sqw(1);”Lerrore lo commenta così:
    sketch_feb25b.ino: In function ‘void setup()’:
    sketch_feb25b:32: error: ‘class RTC_DS1307’ has no member named ‘sqw’
    sketch_feb25b.ino: In function ‘void loop()’:
    sketch_feb25b:53: error: expected `}’ at end of input
    Forse ancora non è quella giustà?
    Mille grazie Alessio

    1. Questa è semplice 🙂
      Il metodo RTC.sqw(1) è presente solo nella RTCLib_mod rilasciata dal produttore della RTC Shield da cui l’ho acquistata io.

      Commenta o cancella questa riga e tutto dovrebbe compilare senza difficoltà.

      Mauro

    • Alessio il 25 Febbraio 2013 alle 18:52
    • Rispondi

    Mauro l’ho detto e lo ripeto SEI UN GRANDE!!!!
    effettivamente ho appena provato e compila…Ti ringrazio per l’aiuto..
    Mille grazie
    Alessio

    • Macca96 il 22 Marzo 2013 alle 19:36
    • Rispondi

    ciao Mauro
    ho comprato i componenti per fare l’orologio.
    lo realizzato e funziona solo che quando apro il serial monitor
    l’ora riparte da l’ora preimpostata
    ho usato un codice diverso dal tuo
    questo
    http://www.logicaprogrammabile.it/usare-modulo-rtc-ds1307-arduino/

    vorrei che quando accendo arduino lui mi visualizzi sul display l’ora già aggiornata
    come faccio??
    grazie

    macca96

    1. Ciao Macca,
      ti consiglio di hiedere all’autore dello sketch, si che é molto gentile e ti risponderà.

      Mauro

    • Macca96 il 23 Marzo 2013 alle 18:18
    • Rispondi

    grazie mille !!

    • Apprendista il 16 Settembre 2013 alle 12:26
    • Rispondi

    Ciao Mauro,
    volevo farti questa domanda, ma non sapevo dove 🙂
    Come posso usare sprintf() con arduino? Non mi riconosce questa funzione. Ho provato a cercare librerie, ma non ci riesco. Sapresti consigliarmi?
    Grazie
    Paola

    1. Ciao Paola,
      in questo articolo trovi un esempio di come utilizzare la funzione sprintf() la sintassi é simile a quella del linguaggio C.

      Mauro

    • cristiano il 22 Settembre 2013 alle 20:13
    • Rispondi

    Ciao Mauro, solo oggi ho letto il tutorial, per testare LCD sulla centralina di irrigazione, devevo leggere i due tutorial con argomento LCD, ho letto tutti i commenti e visto che nessuno ha risposto alla tua domanda ( forse non leggono tutto o non osservano con attenzione) nelle foto e nel filmato ci sono i pulsanti e un IC.
    saluti Cristiano

    • Giordano Settimo il 28 Novembre 2013 alle 20:56
    • Rispondi

    Scusate ma quindi Arduino non ha un orologio interno?
    Cioè non posso ottenere una data attuale senza altri componenti?

    1. Ciao Giordano,
      no, arduino non possiede un RTC interno.

      Mauro

        • Giordano Settimo il 29 Novembre 2013 alle 15:52
        • Rispondi

        Che brutta notizia ! 🙁

        1. Ciao Giordano,
          esistono shield esterne da pochi euro che svolgono molto bene questa funzione.

          Mauro

    • manuel il 11 Dicembre 2013 alle 23:29
    • Rispondi

    Ciao Mauro, ancora complimenti per i tuoi progetti sempre molto interessanti e funzionali!
    ma ho una domanda; anzi chiedo disperatamente aiuto!!!
    vorrei creare una semplice stazione meteo, e sto utilizzando un LCD 16×4, il DS1307 e un sensore di temperatura\umidità SHT11.
    provando i due codici singolarmente, il tuo LCD+DS1307 & LCD+SHT11 funzionano correttamente.
    ma quando li unisco sull’LCD, si vede che l’RTC visualizza i secondi malamente(non rimane indietro, si blocca per il tempo del delay e poi riprende), mentre il SHT sull’LCD va e viene in contemporanea con i secondi.
    facendo un po di prove ho scoperto che modificando il delay da 1s a 2s, questo “va e viene” si allunga!!
    come posso fare in modo si sopprimere questo errore?

    grazie in anticipo
    Manuel

    1. Ciao Manuel,
      premetto che non conoscevo la SHT11 come sonda temperatura e non ne possiedo una per fare dei test, tuttavia ho letto in internet che si tratta di una sonda di temperatura ed umidità di tipo I2C.

      Il protocollo I2C è il medesimo utilizzato anche dalla RTC shield.

      Il problema che rilevi potrebbe essere dovuto al fatto che entrambi usano lo stesso indirizzo I2C, prova a verificare se è possibile eliminare questo conflitto sul circuito della sonda SHT11

      Mauro

        • Manuel il 11 Gennaio 2014 alle 15:59
        • Rispondi

        Ciao Mauro,
        credi che utilizzando arduino come master e l’RTC con le resistenze di pull up insieme all’ SHT come slave, possano funzionare??
        non ho trovato nulla nel web che mi possa aiutare con questo sensore! , mentre, ho sbirciato il tuo blog “Datalogger Arduino LCD DHT11” e funziona molto bene!!

        1. Ciao Manuel,
          mi spieghi meglio cosa intendi per master e slave ? Di cosa?
          Questo articolo non parla del DHT11 o di sensori simili, dovresti postare i tuoi commenti negli articoli corretti altrimenti mi riesce complesso aiutarti.

          Mauro

    • Viviano il 31 Gennaio 2014 alle 22:39
    • Rispondi

    Ciao Mauro
    Ho realizzato l’orologio, volevo sapere se era possibile sincronizzare l’ora via radio.
    Ringrazio in anticipo per un tuo eventuale suggerimento.
    Saluti
    Viviano

    1. Ciao Viviano,
      la parte che mi piace di più arduino è proprio quella che ti consente di realizzare molte delle idee che hai in mente, quidi direi che la risposta è sì.
      Il come è più complesso, dipende molto da che tipo di connessione radio hai in mente.

      Mauro

    • Viviano il 1 Febbraio 2014 alle 15:02
    • Rispondi

    Ciao Mauro
    Pensavo con un segnale DCF77
    Non so se ci sono metodi migliori e più semplici
    Ciao
    Viviano

    1. Ciao Viviano,
      non conosco questo metodo.

      Mauro

    • Filippo il 25 Maggio 2014 alle 22:57
    • Rispondi

    Ciao Mauro ! Innanzitutto complimenti x i tuoi progetti e per la tua PAZIENZA !!!!! Io sono alle prime armi , e sono anche uno scarso elettronico , ma la passione e più forte di tutto il resto.
    Volevo chiederti , se era possibile creare un progetto in cui arduino nano controlli il tempo in cui una macchina in questo caso una fresatrice, lavora !!!
    Potrei sfruttare un contatto del tele ruttore di “inizio lavori” e un altro x quanto rimane in stand bay , per far partire il tutto e avere i due valori.

    Spero di aver inserito il mio argomento nel posto giusto ,

    Grazie in anticipo per qualsiasi risposta….

    Filippo.

    1. Ciao Filippo,
      penso sia possibile senza grandi difficoltà con una RTC shield e se vuoi anche con un display.

    • Luca il 26 Maggio 2014 alle 15:53
    • Rispondi

    Ciao Mauro,
    Prima di tutto complimenti per il blog! Mi sto avvicinando ad Arduino abbandonando quasi del tutto i pic. Ho acquistato una board RTC e ho usato il tuo sketch per provarlo, tutto sembra funzionare ma se spengo tutto e riaccendo data e ora ripartono da quando è stata programmata la board arduino, cioè è come se l’RTC non si aggiornasse. Quale potrebbe essere il problema?

    1. Ciao Luca,
      se leggi bene la descrizione dello sketch trovi che nella setup() c’è una parte di codice che ripristina la data e l’ora della RTC al momento della compilazione se non risponde la RTC ad un test presente nell’if
      Prova a controllare che la RTC risponda in modo corretto e nel tempo necessario.

    • omar il 6 Ottobre 2014 alle 17:42
    • Rispondi

    ciao mauro!! sono ufficialmente disperato 🙁
    sto usando il modulo che acquistano tutti su ebay (ds1307) già prestampato ma ho problemi,
    innanzitutto ho provato a fare il programma per vedere l’orario e la data con il monitor seriale e li tutto bene, funziona e mi fa vedere su monitor seriale il tutto

    ma questo programma qua sopra non ne vuole sapere di andare!!! me lo carica correttamente ma sullo schermo non vedo nulla 🙁 ho smontato tutto e rimontato varie volte, ho persino montato lo schermo per fare la prova se funziona ( e con lo sketch hello world va alla grande)
    ho scaricato correttamente la libreria ( infatti con il programma ora tramite monitor seriale va)
    non so più dove mettere le mani!!!

    help me!!!

    ps. sono il ragazzo che deve fare il cancello per i cani che ti ho mandato i complimenti un paio di settimane fa ma come hifi moroni 🙂

    1. Ciao Omar,
      se l’RTC funziona e il display funziona non comprendo come possano non funzionare una volta collegati insieme.
      E’ una di quelle situazioni in cui puoi verificare con il monitor seriale cosa accade nella funzione loop().
      Questo esempio è uno dei più semplici che ho scritto e non presenta difficoltà.
      Prova anche a scrivere altre frasi sul display lasciando connesso l’RTC e includendo le librerie Wire.h e RTCLib.h

      • michele il 30 Aprile 2015 alle 09:45
      • Rispondi

      prova a modificare il valore di buffer. Io avevo lo stesso problema ma con display I2C

      char buffer[20]; // il buffer viene modificato a 20 per evitare il lampeggio del display

    • fabio il 21 Gennaio 2015 alle 00:38
    • Rispondi

    Salve ,per prima cosa congratulazioni un bel progetto ..se io ogni ora voglio che parli e dica l’ora come posso fare?

    1. Ciao Fabio,
      ti servirà probabilmente un sintetizzatore con la registrazione delle ore.
      Non ho mai provato shield con funzioni di sintetizzatore vocale, dovresti provarle.

    • michele il 30 Aprile 2015 alle 09:44
    • Rispondi

    posto il codice per il corretto funzionamento per chi volesse collegare un display con interfaccia I2C

    #include
    #include
    #include // carico la libreria del display I2C

    #define BACKLIGHT 2 // non serve più
    #define CONTRAST 3 // non serve più

    char buffer[20]; // il buffer viene modificato a 20 per evitare il lampeggio del display

    RTC_DS1307 RTC;
    LiquidCrystal lcd_I2C(0x27,16,2); // inizializzo il display con indirizzo 0x27

    void setup () {
    pinMode( BACKLIGHT, OUTPUT ); // non serve più e non sò se è possibile modificare il valore con interfaccia I2C
    pinMode( CONTRAST, OUTPUT ); // non serve più
    digitalWrite( BACKLIGHT, HIGH ); // non serve più
    analogWrite( CONTRAST, 40 ); // non serve più

    Wire.begin();
    RTC.begin();
    lcd.begin(16, 2);
    lcd.backlight(); // permette l’accensione della retroilluminazione del display

    // RTC.sqw(1) riga eliminata perchè su rtc 1307 assemblato della tiny non è presente il led
    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);
    }

    • PietroJoe il 21 Dicembre 2015 alle 12:11
    • Rispondi

    Ciao, Mauro
    innanzitutto complimenti per il blog, veramente utilissimo per qualsiasi cosa riguardi Arduino…e non solo!
    Volevo segnalarti che nello schema realizzato con Fritzing che hai postato i collegamenti delle uscite SDA ed SCL sono errati. Quelli giusti (dopo aver anche testato il tutto, ovviamente) sono:

    SDA —> pin A4
    SCL —> pin A5

    Ciao 🙂

    1. Ciao Pietro,
      grazie 1000 per la segnalazione.
      Ti rivelo un segreto .. io ci litigo sempre con questi due pin 🙂

    • Matteo il 22 Dicembre 2015 alle 00:20
    • Rispondi

    Ciao Mauro ti seguendo con molto interesse, volevo chiederti informazioni su come realizzare un conto alla rovescia che sia possibile impostare il tempo e allo scadere apre il circuito attraverso un relè.

    1. Ciao Matteo,
      esistono molti modi di farlo, in generale si può fare, nello specifico dipende da cosa deve fare il progetto.

        • Matteo il 23 Dicembre 2015 alle 11:01
        • Rispondi

        Vorrei mettere questo timer nel bromografo in modo da impostare il tempo di esposizione quando arriva a 0 le lampade si spengono

        1. Ciao Matteo,
          puoi farlo senza problemi.
          Al raggiungimento del valore 0 darai al pin sul quale è connesso il bromografo il valore LOW o HIGH in funzione di quale dei due segnali lo spegne.

    • Guido il 22 Agosto 2016 alle 13:28
    • Rispondi

    Ciao Mauro, ho acquistato Il modulo Tiny RTC DS1307 I2C come partenza per diversi progetti , ho scaricato il tuo codice con il quale mi permette di visualizzare sul display lcd la data e l’ora . Una volta effettuato l’Upload dello sketch , l’anno il mese il giorno e l’ora sono corrette mentre i minuti e i secondi non lo sono. vorrei sapere gentilmente come posso fare per risolvere questo problema . Ti ringrazio anticipatamente.
    Guido

    1. Ciao Guido,
      vuoi allineare minuti e secondi o hai già eseguito l’allineamento e si sfasano dopo un po che funziona?

        • Guido il 31 Agosto 2016 alle 14:49
        • Rispondi

        Si Mauro,vorrei allineare i minuti e i secondi , in quanto una volta effettuato ’Upload del tuo sketch i minuti e i secondi non sono allineati con quelli del mio pc. In questi giorni ho copiato dal tuo blog (complimenti per i progetti ) lo sketch con il quale mi permette di modificare la data e l’ora in manuale . Sul display leggo la data e l’ora allineate tranne i minuti e i secondi, premo il pulsante si set per modificare ma purtroppo non succede niente. Ho verificato il cablaggio dei pulsanti come tu hai descritto e sono corretti , non so cosa fare!! TI ringrazio infinitamente per il tempo che mi dedichi.
        Guido

        1. Ciao Guido,
          la sincronizzazione dell’orario è eseguita dalle linee 33-35, come descritto nella descrizione sotto lo sketch, se comprendi come funziona lo sketch vedrai che saprai sincronizzare l’orario senza problemi.
          Per il secondo quesito: i pulsanti dello sketch di modifica data ed ora in manuale, verifica con il tuo monitor seriale che il valore letto sui pulsanti sia corretto, dovrai modificare lo sketch aggiungendo le righe che ti permettono l’uso del monitor seriale per leggere i valori catturati in fase di pressione degli stessi.

            • Guido il 6 Settembre 2016 alle 18:07

            Ciao Mauro,
            al momento mi trovo all’estero , appena rientro eseguirò la verifica che mi hai suggerito di fare e poi ti farò sapere . Grazie ancora.
            Guido

            • Guido il 12 Settembre 2016 alle 16:17

            Ciao Mauro,
            ho eseguito la modifica da te suggerita , ho modificato lo sketch aggiungendo le righe che mi permettono la lettura del valore dei 3 pulsanti sul monitor seriale. Tenendo premuto il pulsante di SET leggo (ogni secondo) un valore variabile tra 850 e 880 ,pulsante PIU tra 890 e 900 ,pulsante MENO tra 850 e 890 , comunque tutti e 3 inferiore a 1000.
            Grazie.
            Guido

          1. Bene Guido

            • Guido il 13 Settembre 2016 alle 16:18

            Ciao Mauro,
            sicuramente mi sono spiegato male , in sostanza dopo aver eseguito la verifica dei pulsanti e nonostante l’esito positivo, non mi permette nessuna modifica,mi spiego meglio; ho ricaricato il tuo sketch quello che permette di modificare in manuale ora e data ,(il modulo Tiny RTC DS1307 I2C è senza batteria ) all’accensione leggo sul display la data (giusta)e ora,minuti,secondi(sbagliati). Premo il pulsante si set per iniziare la modifica (come il tuo tutorial ) ma il display non cambia,non succede nulla. Spero di esser stato chiaro e di averti dato tutte le informazioni possibili.
            Grazie ancora per la tua disponibilità.
            Guido

          2. Ciao Guido,
            se i valori dei pulsanti sono corretti, prova con il monitor seriale a comprendere perché non ti faccia entrare in modalità “setting” dell’orario.

            • Guido il 15 Settembre 2016 alle 16:28

            Ciao Mauro,
            grazie per la tua cortesia , proverò con il monitor seriale per cercare di capire.
            Guido

    • Manuel il 6 Maggio 2017 alle 19:54
    • Rispondi

    Ciao, è obbligatorio utilizzare un LCD ACM1602B o posso usare anche un LCD1602
    ti do anche il link: [link rimosso in automatico]

    Grazie in anticipo!

      • Manuel il 6 Maggio 2017 alle 20:31
      • Rispondi

      Mi potresti dire dove hai comprato il display lcd e l’rtc shield arduino?

      1. Ciao Manuel,
        io acquisto il mio materiale su robotics-3d.com

    1. Ciao Manuel,
      come hai letto nelle semplici e poche regole in fondo ad ogni articolo i link vengono rimossi perché non consentiti. Ti invito a rispettarle.
      In merito al display puoi usare qualsiasi display tu abbia, dovrai adattare collegamenti e codice al manuale del display.

    • Gerry il 6 Maggio 2017 alle 20:19
    • Rispondi

    Post molto accurato, ma lo sketch è per solo chi ha un RTC arduino Shield o anche per chi usa un RTC Module?

    1. Ciao Gerry,
      solitamente io lo utilizzo con tutti i modulo RTC purché l’integrato sia il medesimo.

    • Mirco Lasagni il 17 Maggio 2017 alle 21:07
    • Rispondi

    A cosa servono i tre pulsanti? per caso è questo l’errore a cui ti riferisci? forse pensavi di utilizzarli per impostare l’RTC manualmente? Se è così sarebbe molto interessante.

    1. Ciao Mirco,
      si i tre pulsanti servono in altri esperimenti con l’RTC che trovi nel blog.

    • Salvatore il 23 Novembre 2017 alle 08:36
    • Rispondi

    ciao Mauro, se volessi creare un timer per accende un led arari come dovrei fare?

    ho provato varie soluzioni ma non ci sono riuscito.

    puoi aiutarmi dandomi qualche dritta per il loop?

    Grazie, Salvtore

    1. Ciao Salvatore,
      non penso di aver capito la richiesta, vuoi accendere u led ad orari specifici? tipo delle lampade per idroponica?
      Puoi vedere come ho fatto nel progetto dedicato alla centralina idroponica o irrigazione.

  1. Ciao mauro io ho realizzato un orologio con rtc1302 il display funziona ed é tutto ok.
    Il problema é questo se io spengo arduinp alle 13:25 quando lo riaccendo dopo un paio di ore l’ orologio riparte da li, è normale? Io pensavo che la batteria servisse proprio per non fermare l ora. Mi puoi dare una mano?

    1. Ciao Raf,
      è un comportamento anomalo, sei sicuro di non aver impostato da qualche parte delle sovrascritture del dato proveniente dall’RTC?
      In alternativa dovresti provare con un altro modulo, questo potrebbe essere difettoso.

    • Flavio Dal Corso il 6 Marzo 2019 alle 10:15
    • Rispondi

    ciao Mauro,
    vorrei segnalarti una piccola svista. Nella riga 17 (char buffer[10];) definisci un array di 10 caratteri, che poi, alla riga 43 (sprintf(buffer, “%02d/%02d/%d”, now.day(), now.month(), now.year());) riempi con la data nel formato dd/mm/aaaa. Questa stringa ha in effetti 10 caratteri, ma nella definizione della dimensione dell’array bisogna includere anche il carattere di terminazione, come ben detto qui: https://www.arduino.cc/reference/en/language/variables/data-types/array/
    (Note that when declaring an array of type char, one more element than your initialization is required, to hold the required null character).
    Definire un array con dimensione minore di quella effettivamente utilizzata porta a conseguenze imprevedibili, perché il programma va a scrivere in locazioni potenzialmente usate da altre variabili.
    Da notare che il compilatore non controlla la congruenza della definizione dell’array, quindi lo sketch compila senza problemi.

    1. Grazie Flavio,
      conoscevo questa regola e devo aver commesso un errore in fase di digitazione, o meglio, non so contare 🙂
      Correggo lo sketch in modo che altri non incorrano in errori di esecuzione.

    • Enzo il 17 Maggio 2020 alle 11:24
    • Rispondi

    Ciao Mauro
    Sono Enzo
    Premetto che sono un matusa di 75 lustri con l’obbi dell’elettronica ma a digiuno di tutto compreso le basi,
    macon tutte le lacune riesco a divrtirmi, ed ecco il quesito, ho realizzato il tuo orologio regolato cono e tre pulsanti per regolare il tutto e debbo dire che dopo quasi un anno di prove sono riuscito a farlo andare , ora la mia domanda è questa :
    è possibile aggiungere anche i nomi dei giorni della settimana ed eventualmente il listato dove va inserito al limite se è difficoltoso per te ripublicare lo sketch di nuovo puoi mandarmelo , poi mi dirai come mandarti il mio indirizzo di posta
    complimenti per il programma in oggetto e per molti altri progetti che trovo in rete
    ciao a presto leggerti

    1. Ciao Enzo,
      innanzitutto complimenti per essere riuscito da solo a farlo funzionare.
      Il giorno della settimana è possibile recuperarlo dalla libreria rtcLib come numero da 0 a 7, non ricordo a memoria il comando ma nella documentazione dovrebbe essere riportato.
      Una volta recuperato il numero potrai usarlo per dire if ( giornoDellaSettimana == 0 ) { scrivi “Domenica” } ad esempio, opportunamente definita la variabile giornoDellaSettimana con il numero recuperato dalla libreria.

    • Enzo il 2 Giugno 2020 alle 15:28
    • Rispondi

    Scusa il ritardo con cui rispondo ma in questo periodo lo capisci da solo non ho capito bene dove trovo il comando nella libreria rtclib , quindi se ho ben capito debbo editare tutti i file della libreria e trovare l’esempio che mi interessa?
    Ma non c’è un listato che lo faccia direttamente con i tre pulsantini? come per l’ora miniti etc.
    Se ho ben capito con il tuo sistema sono io che immetto il giorno manualmente e ricaricare il tutto
    ciao a presto

    1. Ciao Enzo,
      in questo esempio, come hai capito dal codice manca tutta la parte relativa alla gestione dei pulsanti che ho inserito in un altro articolo.
      In merito al giorno della settimana, che mi chiedevi, puoi leggere nella documentazione/sito della libreria che stai utilizzando che metodo serve per fare quello che desideri, a memoria non lo ricordo.

  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

Il tuo indirizzo email non sarà pubblicato.

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