«

»

Set 19

Stampa Articolo

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: http://www.mauroalfieri.it
 */

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

#define BACKLIGHT 2
#define CONTRAST  3

char buffer[10];

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

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

72 comments

3 pings

Vai al modulo dei commenti

  1. idris

    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. Mauro Alfieri

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

      Mauro

  2. comante

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

    1. Mauro Alfieri

      Messaggio recepito 🙂
      Grazie per i complimenti !!!

  3. daniele

    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. Mauro Alfieri

      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

      1. daniele

        Ok Mauro, attenderò volentieri,
        sei un grande 😉

  4. Luca N

    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. Mauro Alfieri

      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

  5. Alessio

    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. Mauro Alfieri

      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

  6. Alessio

    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. Mauro Alfieri

      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

  7. Alessio

    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. Mauro Alfieri

      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

  8. Alessio

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

  9. Macca96

    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. Mauro Alfieri

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

      Mauro

  10. Macca96

    grazie mille !!

  11. Apprendista

    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. Mauro Alfieri

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

      Mauro

  12. cristiano

    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

  13. Giordano Settimo

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

    1. Mauro Alfieri

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

      Mauro

      1. Giordano Settimo

        Che brutta notizia ! 🙁

        1. Mauro Alfieri

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

          Mauro

  14. manuel

    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. Mauro Alfieri

      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

      1. Manuel

        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. Mauro Alfieri

          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

  15. Viviano

    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. Mauro Alfieri

      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

  16. Viviano

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

    1. Mauro Alfieri

      Ciao Viviano,
      non conosco questo metodo.

      Mauro

  17. Filippo

    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. Mauro Alfieri

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

  18. Luca

    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. Mauro Alfieri

      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.

  19. omar

    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. Mauro Alfieri

      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

    2. michele

      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

  20. fabio

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

    1. Mauro Alfieri

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

  21. michele

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

  22. PietroJoe

    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. Mauro Alfieri

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

  23. Matteo

    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. Mauro Alfieri

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

      1. Matteo

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

        1. Mauro Alfieri

          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.

  24. Guido

    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. Mauro Alfieri

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

      1. Guido

        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. Mauro Alfieri

          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.

          1. Guido

            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

          2. Guido

            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

          3. Mauro Alfieri

            Bene Guido

          4. Guido

            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

          5. Mauro Alfieri

            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.

          6. Guido

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

  25. Manuel

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

    Grazie in anticipo!

    1. Manuel

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

      1. Mauro Alfieri

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

    2. Mauro Alfieri

      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.

  26. Gerry

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

    1. Mauro Alfieri

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

  27. Mirco Lasagni

    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. Mauro Alfieri

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

  28. Salvatore

    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. Mauro Alfieri

      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.

  29. Raf

    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. Mauro Alfieri

      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.

  1. Arduino e il tempo | Geek Class

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

  2. mokArduino: Moka + Arduino - Mauro Alfieri Elettronica

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

  3. RTC DS1307 con arduino - Mauro Alfieri - Elettronica - Robotica

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

Lascia un commento

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

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>