RTC DS3231 per arduino

L’RTC DS3231 per arduino è un integrato RTC che mi è stato consigliato da un Maker sempre attento alle novità offerte dal mercato: Alberto

RTC DS3231 per arduino

Come sai Arduino non possiede un RTC ( Real Time Clock ) che possa consentirti di tener sotto controllo l’orario.

Nell’orologio neopixel ho simulato il tracorrere dei secondi, minuti ed ore sapendo che non sarà mai preciso, si è trattato solo di una simiulazione.

Nei miei precedenti progetti ho sempre utilizzato un altro RTC il DS1307 puoi leggere qualche alrticolo:

Nei diversi esperimenti ho verificato che tale tipo di RTC perde qualche secondo ogni giorno e cumulato nei mesi diventa uno scarto considerevole che può avere delle implicazioni importanti nel funzionamento del progetto stesso, pensa ad esempio ad un DataLogger se ogni mese perdi qualche minuto al termine di un monitoraggio su lungo periodo ( 3-6 mesi ) ti troverai dati non concordi con il reale orario di raccolta.

L’imprecisione del DS1307 non è legata al chip stesso, piuttosto al quarzo esterno di cui tale integrato necessita per tener sincronizzato il clock interno. Se il quarzo “perde colpi” l’ora non è più fedele.

L’RTC DS3231 per arduino possiede la caratteristica di essere molto preciso, come riportato nel datasheet del produttore in quanto:

The DS3231 is a low-cost, extremely accurate I2C real-time clock (RTC) with an integrated temperature compensated crystal oscillator (TCXO) and crystal.

possiede al suo interno un oscillatore con temperatura controllata ed una sonda di temperatura che utilizza per compensare la frequenza di oscillazione.

Collega l’RTC DS3231 per arduino

I collegamenti elettrici dell’RTC DS3231 per arduino sono molto semplici in quanto il modulo è alimentato a 3,3v e comunica con arduino mediante I2C quindi attraverso i pin SDA ed SCL

RTC DS3231 arduino pin

ho utilizzato i fili di colore giallo e verde per la comunicazione I2C.

Libreria DS3231

Come già per il DS1307 anche per l’RTC DS3231 per arduino è necessaria una libreria, cercando nel web trovi diverse librerie utili tra le quali ho provato questa:

JChristensen DS3231 DS3232RTC

anche se si chiama DS3232 è valida sia per il DS3232 sia per il DS3231. Puoi provare uno degli esempi: TimeRTC

Al primo tentativo di compilazione potresti imbatterti nel medesimo errore in cui mi sono imbattuto io:

RTC DS3231 arduino error library

la necessità di aggiungere la libreria Time.h a quelle installate nel tuo IDE, seguendo il link consigliato dall’autore la trovi qui, una volta installata la compilazione dello sketch dovrebbe procedere correttamente.

Apri il monitor seriale per verificare la data e l’ora restituita dal tuo RTC DS3231 per arduino.

Al primo collegamento l’orario riportato era errato: 01Jan2000 00:00:01, devi impostare l’orario per sincronizzarlo con l’ora corrente.

Tra gli esempi di JChristensen trovi un utilissimo esempio SetSerial.ino che ti permette di impostare l’orario dell’RTC DS3231 per arduino mediante connessione seriale.

Invia questo esempio sul tuo arduino, apri il monitor seriale e dovresti ottenere una schermata simile:

RTC DS3231 arduino set serial

nota che nella linea di invio dei dati seriali è presente una riga, che ho scritto io, secondo le indicazioni presenti nei commenti dello sketch: YYYY,MM,DD,hh,mm,ss sostituendo ai campi i valori della data e dell’ora che desideri impostare e premendo “send” ottieni un cambio dei valori sull’RTC DS3231 per arduino e sul monitor seriale vedrai:

RTC DS3231 arduino time setting

in questo momento il tuo RTC DS3231 è impostato con la data e l’ora che hai deciso di impostare.

Nota che nella prima schermata del monitor seriale dopo alcune linee viene restituita la temperatura, questo perché lo sketch prevede di recuperare la temperatura dal sensore installato sul modulo e di restituirtela ogni minuto.

Cortesemente, prima di inserire i commenti leggi il regolamento

Permanent link to this article: http://www.mauroalfieri.it/elettronica/rtc-ds3231-per-arduino.html

74 comments

2 pings

Skip to comment form

    • Antonio on 10 ottobre 2015 at 17:25
    • Reply

    …si, si verissimo! nei casi da me analizzati il DS1307 mi anticipa mediamente di 15 sec. al giorno! Ottima l’idea del DS3231.

    1. Ciao Antonio,
      si il DS1307è un buon prodotto a patto di accettare la perdita elevata di secondi sui cicli giornalieri.

  1. non capisco perchè ma non mi mantiene l’ora impostata pur avendo la batteria inserita, inoltre anche la temperatura rilevata e’ sballata (0 gradi) idee ?

    1. Ciao Stefano,
      potrebbe essere danneggiato ?

    • Ettore on 31 gennaio 2016 at 21:44
    • Reply

    Buona sera, ho riscontrato problemi di compatibilità con libreria time e la libreria ds3231 come risolvere il conflitto?
    Grazie saluti
    Ettore

    1. Ciao Ettore,
      senza conoscere il conflitto posso solo suggerirti di trovare un’altra libreria che non presenti conflitti o di modificarti le libreria se ne sei capace.

    • Alessio on 30 aprile 2016 at 12:19
    • Reply

    Ciao.grazie per tutti gli aiuti 😀

    non riesco a settare l’ora e la data! non riesco a capire come modificarla.grazie

    1. Ciao Alessio,
      hai letto l’articolo e compreso? tra le due schermate relative al monitor seriale è scritto chiaramente, oltre che nei commenti dello sketch, il formato in cui lo sketch si attende la data e l’ora: yyyy,mm,dd,hh,mm,ss

    • luigi on 6 maggio 2016 at 11:42
    • Reply

    Buongiorno Mauro,
    ho provato a settare il nuovo orario e mi riporta i dati corretti (RTC set to: 06May2016 11:41:45
    06May2016 11:41:45
    06May2016 11:41:46
    06May2016 11:41:47 )
    ma quando riavvio la connessione seriale mi ritorna al settaggio originale (06May2016 11:42:27
    RTC Sync FAIL!
    01Jan1970 00:00:01
    01Jan1970 00:00:02

    cosa posso fare?

    grazie

    Luigi

      • luigi on 6 maggio 2016 at 11:47
      • Reply

      risolto, avevo invertito i cavi sda scl.

      grazie
      Luigi

      1. Bene Luigi,
        ti ho appena risposto.

    1. Ciao Luigi,
      il messaggio “RTC Sync FAIL!” mi dice che non stai veramente comunicando con il chip RTC, probabilmente hai solo impostato i valori corretti nella memoria genuino, ma il tuo DS3231 è mal collegato.

    • lino grieco on 8 luglio 2016 at 20:26
    • Reply

    mauro!!!!!
    sempre lino…..ho problemi ad impostare data e ora!!!
    ho seguito la guida….l’errore che mi dà è quando trova nella verifica dello
    sketch arduino mega 2560 in mio possesso….
    che faccio?

    1. Ciao Lino,
      se non mi dici l’errore è impossibile che io riesca ad aiutarti. Solitamente gli errori in fase di compilazione sono chiari, prova ad inviarmelo insieme alla versione del tuo IDE e delle librerie che stai utilizzando.

    • lino grieco on 12 luglio 2016 at 15:48
    • Reply

    scusami mauro…forse ero un pò stanco….ho provato oggi e funziona..
    l’unica cosa che il mio pc segna le 15:45 e l’ora viene impostata quando apro il monitor seriale
    alle 15:15….per quanto riguarda la data ok

    1. Ciao Lino,
      la differenza di orario potrebbe dipendere da un errato setting captato dall’IDE al momento della compilazione.
      Prova ad impostare tu il valore orario e verifica che il setting avvenga correttamente.

      Dimmi poi come è andata.

        • lino grieco on 13 luglio 2016 at 11:08
        • Reply

        niente da fare…..stamattina mi portava un ora rispetto al pc di almeno 30 minuti indietro…la data ok

        vado nel serial monitor, inserisco in alto data ed ora faccio invia ma non succede nulla

        1. Ciao Lino,
          hai provato altre librerie?

    • lino grieco on 13 luglio 2016 at 15:53
    • Reply

    cmq mauro…sei un grande…..ho riletto il post e mi mancava la libreria streaming.h nel file di esempio setserial.

    ho seguito alla lettera tutto e va una bomba…..

    domanda: una volta settata la data e l’ora……dopo aver staccato tutto rimane in memoria nel DS3231 grazie alla batteria al litio incorporata?

    1. Ciao Lino,
      ti ringrazio per i complimenti.
      Mi spiace solo che tu abbia perso tanto tempo per capire che il problema era una libreria come ti avevo suggerito già nei primi commenti, a volte basta leggere con attenzione anche le risposte per risolvere prima.

        • lino grieco on 19 luglio 2016 at 15:59
        • Reply

        caro mauro….adesso ho bisogno di altre informazioni riguardo al DS3231.
        sto lavorando su un progetto che consiste nel far partire degli attuatori(pompa acqua, areatori, motoriduttori) legati ad una scheda relè grazie alla lettura di sensori di temperatura ed umidità che tu ben conosci….

        per ora riesco a far girare il tutto ogni volta che lancio il mio sketch o quando questo è già caricato su arduino mega2560 con alimentazione esterna….

        quello che voglio fare adesso è legare il funzionamento di questi attuatori all’ora e alla data che arduino mi legge grazie al DS3231.

        quello che intendo fare è trattare l’ora e la data come due variabili e far funzionare i miei attuatori ogni tre ore o addirittura dopo due giorni a partire da un certo momento x……..mi puoi dare delle dritte?

        1. Ciao Lino,
          leggi come funziona la centralina di irrigazione; dovrai adattare il codice al DS3132 in quanto scritta per il DS1307.

    • lino grieco on 22 luglio 2016 at 17:27
    • Reply

    grazie…inizio a studiarmela e poi torno a stressarti…

    grazie ancora

    • Erik on 10 ottobre 2016 at 13:23
    • Reply

    ciao a tutti, ogni volta che cerco qualche sito su come usare o impostare certe schede con arduino capito sempre su questo blog molto utile, al momento lo trovo molto più utile del forum ufficiale, ho un problemino, ho provato varie librerie per utilizzare il DS3231RTC e fin’ora solo uno mi ha dato risultati senza sorta di errori, purtroppo nn è questo pubblicato nn sono mai riuscito a risolvere il problema del Time.h riportato in alto e dal pc del lavoro nn riesco a trovare quello che ho usato io per poterlo linkare, ma suppongo che i comandi per utilizzarlo siano sempre gli stessi, ho impostato la data e l’ora ma nn capisco come inizializzare la scheda, per impostare ad una certa ora l’attivazione o la disattivazione di un relè, inoltre al posto del monitor seriale ho impostato un lcd in I2C dove quando carico lo sketch mi mostra la data e ora + la temperatura ma l’unica cosa che si aggiorna automaticamente è la temperatura, l’orario rimane fisso (solo su lcd) se resetto la scheda o ricompilo la scheda allora si aggiorna. Mi potete aiutare? Nel caso stasera quando sono a casa posto il codice come l’ho scritto io così è più utile.

    1. Ciao Erik,
      non so se possa aiutarti ma per la memorizzazione di un allarme è una cosa che penso non sia possibile con il solo RTC; dovrai scrivere del codice arduino che valuti la data e l’ora e porti HIGH un pin a cui è connesso il relè.
      Sul secondo problema sei certo che la lettura dell’orario sia corretta? nel monitor seriale vedi scorrere il tempo?

    • Michelangelo on 19 ottobre 2016 at 16:13
    • Reply

    ciao mauro, scusa il disturbo, ho collegato rtc d3231 all’arduino e quando carico il codice e apro il monitor seriale mi dice:
    RTC Sync FAIL!
    01Jan1970 00:00:01
    e cosi fa ogni volta che riapro il monitor… cosa posso fare??

    1. Ciao Michelangelo,
      hai provato a verificare che i collegamenti siano corretti e che l’indirizzo i2c sia quello del tuo modulo?
      Se non conosci l’indirizzo del modulo puoi verificarlo sulla documentazione del produttore o venditore da cui hai acquistato l’RTC3231

        • Michelangelo on 1 novembre 2016 at 20:44
        • Reply

        I collegamenti sono corretti, può essere che la batteria sia scarica?
        Cmq non so cosa sia “l’indirizzo I2C”, se magari potresti spiegarmelo te ne sarei grato; ho acquistato il modulo su internet e mi è arrivato senza niente

        1. Ciao Michelangelo,
          trovi degli articoli in cui ho descritto non solo di cosa si tratta ma anche come reperirlo se non lo possiedi.
          In generale evito di acquistare componenti su siti che non rilasciano adeguata documentazione perché spesso risultano inutilizzabili.

        • Michelangelo on 1 novembre 2016 at 20:51
        • Reply

        Ho provato a fare uno scanner dell’indirizzo i2c attraverso uno sketch: 0x57. Ora cosa devo fare?
        (scusa ma non me ne intendo molto di programmazione in c/c++ in quanto il mio campo è Java)

        1. Ciao Michelangelo,
          hai letto il mio commento linea per linea a questo articolo? Dovrei aver scritto dove viene indicato l’indirizzo I2C.
          Se qualche passaggio non ti è chiaro della mia spiegazione chiedi pure attraverso i commenti.

    • Erik on 10 dicembre 2016 at 18:14
    • Reply

    Ciao Mauro, ho ripreso a mano il progetto per sistemarlo un po’, ho visto subito che l’orario nn corrisponde, cioè quando l’avevo impostato quest’estate andava bene ora segna un’ora avanti, avevo anche eliminato la parte che mi faceva vedere la data e l’ora via seriale ho rispristinato e nella riga della seriale ho provato a rinserire la data e l’ora ma nn prende più i nuovi dati, se aggiungo un pulsante posso ottenere il medesimo risultato? sono un po’ scarso in programmazione aiutami almeno a capire (avrei preferito via seriale ma se nn funziona)… il settaggio via seriale funziona solo da nuovo o se cambio batteria?

    1. Ciao Erik,
      hai controllato che lo sketch sia quello che ho pubblicato io?
      Se via seriale vedi il dato che passa, allo stesso modo dovrai poter eseguire le modifiche.
      Se qualcosa non funziona puoi aggiungerti delle righe di Serial.println() per capire cosa gli stai passando, non dovresti avere difficoltà se hai compreso come funziona lo sketch.

        • Erik on 17 dicembre 2016 at 14:56
        • Reply

        ciao, ne avevo provati diversi, perché ognuno mi dava un problema, del tipo il tuo ma anche quello più aggiornato che ho trovato il setserial mi da errore sulla libreria schematic, allora avevo usato timertc che dava un errore sulla parte del Time.h ho aperto la libreria e ho fatto le giuste correzioni per poter lanciare lo sketch, una volta avviato ho aperto la seriale e ho impostato l’orario, questo un paio di mesi fa, settembre – ottobre prima del cambio dell’ora, dopo ho aggiunto il progetto dell’rtc a quello che già avevo fatto e ho tolto le parti che riguardano il seriale per permettere la visualizzazione su lcd, se rimetto la visualizzazione sul seriale vedo le prime 2 cifre dei minuti che invio al lcd poi vedo l’orario completo e poi la data, ti faccio un esempio di quello che vedo

        :13 01:13:40 17:12:2016

        sul seriale al momento visualizzo la data e l’ora in questo modo e nn riesco a cambiare l’ora per passare dall’ora legale a quella solare e viceversa

          • Erik on 17 dicembre 2016 at 18:09
          • Reply

          quando parlo dello sketch setserial ho sbagliato a scrivere, volevo riferirmi al streaming.h e invece ho scritto schematic, nel momento che scrivevo mi son sbagliato

          1. OK

        1. Ciao Erik,
          se ho compreso bene il problema hai dovuto modificare la librerai per consentire l’impostazione dell’ora?
          Nel mio caso non è stato necessario.
          Prova a rimettere le modifiche e lasciale permanenti in modo che tu possa eseguire il cambio dell’ora ogni volta che lo desideri o programma una routine di cambio ora calcolato sulla base dell’algoritmo usato per il cambio dell’ora in tutti gli apparati dotati di RTC e sprovvisti di connessione verso un Ntp server.

            • Erik on 19 dicembre 2016 at 19:33

            ci ho provato ma nn riesco… che stress 😛 pensavo di aggiungere 2 pulsanti uno per aumentare e uno per diminuire l’ora manualmente, ma sinceramente nn saprei come fare :S

            tipo nn so:

            button up
            if button up true + hour()

            l’ho buttata giù cosi perché sto uscendo, immagino che ci sia molto più da scrivere 😛

          1. Ciao Erik,
            il concetto mi sembra buono.

    • lorenzo on 14 dicembre 2016 at 00:07
    • Reply

    Ciao io uso un arduino nano su cui i pin analogici A4 e A5 sono fuori asse, sono spostati verso il centro della scheda e non è comodo saldarli per usarli su breadboard.
    Ho cercato dove modificare le linee di codice perchè uso A2 e A3 e non riesco a trovarle. puoi aiutarmi ? 🙂
    il risultato quando collego il tutto mi da:

    “Unable to sync with the RTC
    0:00:00 0 0 1970
    0:00:01 1 1 1970”

    complimenti per il blog !!

      • lorenzo on 14 dicembre 2016 at 00:33
      • Reply

      Stavo leggendo ” DS3232RTC_h ” e mi chiedevo se non dovessi modificare qualcuna di queste parti:

      //DS3232 I2C Address
      #define RTC_ADDR 0x68

      //DS3232 Register Addresses

      //Alarm mask bits

      ….

      //Control register bits

      ….

      1. Ciao Lorenzo,
        dipende da quale indirizzo possiede la tua scheda.
        Sul blog troverai degli esempi per esplorare gli indirizzi I2C.
        Leggi, comprendi e prova gli sketch per trovare le tue impostazioni.

    1. Ciao Lorenzo,
      iniziamo a dire che devi usare i pin SDA ed SCL e no puoi usare dei pin a caso sulla board.
      Sull’arduino Nano ( se cerchi un pinout sul web ) dovrebbero corrispondere a D2 e D3, controlla, e non sono decentrati.

      Sei certo del modello di scheda che stai utilizzando ?

      1. [[ link rimosso in automatico ]]

        Ciao Mauro questa è esattamente la board che ho io, su G immagini si vede come cercando “arduino pro mini” si trovino delle board anche molto diverse tra loro, non solo per la disposizione dei pin ma anche per il numero.
        qui sotto il pinout dove si vede che il pin digitale 18 e il 19 sono decentrati 😉

        [[ link rimosso in automatico ]]

        1. Ciao Lorenzo,
          a parte la regola che hai violato inserendo link a siti non autorizzati, vedi fondo di ogni articolo, non ricordo quale sia il tuo dubbio.
          Si la Pro Mini ha i pin A4 ed A5 ( alias 18 e 19 ) su una fila interna rispetto a tutti gli altri pin di input/output

            • lorenzo on 25 dicembre 2016 at 07:42

            Ciao Mauro, la regola dove è scritta ?
            ho letto quella di non incollare sketch e non l’ho fatto, ma la regola dei “siti non autorizzati” non l’ho mai vista sul tuo sito.
            cmq la mia domanda era quella se si potessero cambiare i pin di arduino a cui collegare la RTC, ma hai già risposto prima 😉

          1. Ciao Lorenzo,
            è una regola dettata dalla netiquette dei blog, ma hai ragione è meglio scriverla, la aggiungerò.

    • Fabrizio on 5 febbraio 2017 at 16:59
    • Reply

    risolto grazie

    1. Ciao Fabrizio, sono contento .. se ti va scrivici come.

    • giancarlo on 8 febbraio 2017 at 14:49
    • Reply

    ciao, da quello che so il DS3231 ha anche una piccola “rom” per memorizzare degli alarm, sai se esistono librerie che la supportano e permettono di impostare questi alarm?
    sto progettando una sveglia e mi farebbe davvero comodo

    1. Ciao Giancarlo,
      no purtroppo non so se le librerie per arduino supportino la gestione della rom interna del DS3231.
      Se ne conosci le specifiche puoi proporre all’autore della libreria ufficiale una estensione scritta magari a 4 mani.
      Se ti serve solo per memorizzare degli allarmi puoi usare la EEPROM di arduno, considerando il fatto che ne avrai almeno uno nel tuo progetto.

        • Riccardo on 22 marzo 2017 at 12:19
        • Reply

        Noi sul forum di Arduino abbiamo scritto questo codice funzionante su DS3231 senza usare librerie:

        #include
        byte ore; /* ore correnti */
        byte minuti; /* minuti correnti */
        byte secondi; /* secondi correnti */
        byte error; /* errore al RTC */
        byte HOURS; /* variabile BCD ore */
        byte MINUTES; /* variabile BCD minuti */
        byte SECONDS; /* variabile BCD secondi */

        byte BCDbin(byte n){return ((n >> 4) * 10) + (n & 0x0F);} /* converte BCD in binario */
        byte binBCD(byte n){return ((n / 10) << 4) | (n % 10);} /* converte binario in BCD */

        void leggiRTC(){
        Wire.beginTransmission(0x68); /* indirizzo RTC su bus i2c */
        Wire.write(0); /* punta al registro 0 */
        if (Wire.endTransmission()){
        error = 1; /* errore di connessione */
        return;
        }
        Wire.requestFrom(0x68, 3); /* tre registri da leggere */
        if (Wire.available() != 3){
        error = 2; /* errore di ricezione */
        return;
        }
        HOURS = Wire.read(); /* leggi ore RTC */
        MINUTES = Wire.read(); /* leggi minuti RTC */
        SECONDS = Wire.read(); /* leggi secondi RTC */
        error = 0; /* azzera variabile errore RTC */
        }

        void impostaRTC(){
        Wire.beginTransmission(0x68); /* indirizzo RTC su bus i2c */
        Wire.write(0); /* punta al registro 0 */
        Wire.write(SECONDS); /* imposta secondi RTC */
        Wire.write(MINUTES); /* imposta minuti RTC */
        Wire.write(HOURS); /* imposta ore RTC */
        Wire.endTransmission(); /* fine trasmissione */
        }

        void setup() {
        Serial.begin(9600);
        Wire.begin(); /* inizializza bus i2c */
        ore = 23;
        minuti = 59;
        HOURS = binBCD(ore);
        MINUTES = binBCD(minuti);
        impostaRTC(); /* imposta RTC alle 23:58 */

        }

        voi loop() {
        leggiRTC();
        ore = BCDbin(HOURS);
        minuti = BCDbin(MINUTES);
        secondi = BCDbin(SECONDS);
        Serial.print(ore, minuti, secondi);
        }

        Questo codice imposta l'orario a 23:59 ogni volta che Arduino si accende. Per evitare questo basta cancellare le righe di impostazione dalla sezione setup() con un secondo caricamento dello sketch modificato.
        La cosa interessante è che con questo sketch noi abbiamo scritto "a mano" il registro per le ore, i minuti e i secondi. Da quello che ho capito vedendo i datasheet dovrebbero esserci anche dei registri per l'allarme, ma non abbiamo ancora provato ad usarli. Comunque puntando a quei registri teoricamente dovrebbe essere possibile impostare l'orario dall'allarme. Però facendo tutto quanto a mano. Comunque preferisco questo ad utilizzare la libreria. Ho capito molto di più il funzionamento ed ho l'impressione di avere pieno controllo su quello che faccio.

          • Lello Guidi on 25 aprile 2018 at 15:01
          • Reply

          Ciao,
          volevo provare il listato senza uso di librerie, ma mi da errore subito sulla linea #define.
          Manca la definizione ?
          Cosa altro devo includere per farlo funzionare?
          Dove tre tutto il documento sul Forum di Arduino?
          Grazie
          e saluti

          1. Ciao Lello,
            questo articolo tratta la lettura del DS3231 mediante la libreria di JChristensen che ho linkato, senza di essa è normale che u riceva un errore non è scritto per funzionare senza la libreria.

          • Lello Guidi on 26 aprile 2018 at 22:49
          • Reply

          Questo listato non funziona con Arduino UNO, sulla seriale vedo sempre l’orario impostato inizialmente.
          Con il comando “Serial.println(error);” vedo che mi da errore 2, da questa istruzione “Wire.requestFrom(0x68,3);”.
          Saluti

          1. Ciao Lello,
            verifica che l’indirizzo IIC della tua DS3231 sia il medesimo impostato nella libreria e indicami quale esempio stai utilizzando della libreria proposta.

    • Boris on 7 aprile 2017 at 16:19
    • Reply

    Ciao Mauro.
    Innanzitutto, vorrei farti i miei complimenti per il Blog.
    Sto facendo una stazione metro de esterno con tutti i sensori per gas nel aria MQ e DHT11 e ho pensato di mettere un Trasmettitore 433mhz per inviare tutti i dati al interno e fin qui tutto ok:
    Pero adesso mi sono imbattuto in un piccolo problemino, speravo mi potessi dare una mano.
    Sto cercando di collegare Arduino NANO sullo schermo 3.5′ e ho messo anche Ricevitore 433mhz e i pin bastano.
    Pero, mettendo lo schermo mi si occupano i pin Analogici da A0-A4.
    Adesso questo mi crea il problema se voglio mettere pure un RTC con I2C perche come spieghi tu servono A4 e A5 dei pin Analogici.
    Arduino nano ne ha fino A7.
    Per di più anche Digitali sono occupati dal D2 a D9

    Grazie e buona giornata a tutti!

    1. Ciao Boris,
      controlla sullo schema e le caratteristiche dell’arduino nano se i pin SDA ed SCL siano corrispondenti ad A4 ed A5, poi valuta se puoi liberarli collegando i pin del display ad altri rimasti liberi.

    • Giuseppe on 17 aprile 2017 at 10:13
    • Reply

    salve a tutti,
    ho un modulo 3231 montato con uno schift register 74hc595 e display LCD.
    Il tutto funziona, ma come mai ogni 10 ore circa il modulo sfasa l’ora di circa 1 minuto e 30 secondi indietro?
    Grazie a tutti e buona Pasquetta.
    Giuseppe

    1. Ciao Giuseppe,
      che questo tipo di modulo abbia una perdita è comprensibile, la tua mi sembra eccessiva.
      Lascio il commento on-line perché altri, più esperti, possano darti maggiori spiegazioni.

    • Valerio on 24 aprile 2017 at 22:53
    • Reply

    Salve,

    ho un DS3231 AT24C32 IIC collegato ad Arduino UNo secondo questo schema: SCL-> pin4, SDA-> pin5. Uso un IDE su mac versione 1.6.9 e ho scaricato le librerie DS3232RTC e Time come da vostro suggerimento.
    Ho caricato lo sketch TimeRTC.ino ma ricevo questo errore:
    chmod: Unable to change file mode on /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: Read-only file system
    /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude: line 6: /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: Permission denied
    /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude: line 6: exec: /private/var/folders/q8/4_9mnr8s4s75mnl7d4d6drdr0000gn/T/AppTranslocation/C4CBCA12-28B2-42D5-AB59-B014C35AD0E7/d/Arduino-2.app/Contents/Java/hardware/tools/avr/bin/avrdude_bin: cannot execute: Undefined error: 0

    e nella finestra seriale la data è fissa su Sun 00.00.2000 — 00:00:0

    Cosa sbaglio? Ti rignrazio se vorrai aiutarmi 🙂

    Valerio

    1. Ciao Valerio,
      l’errore non è relativo allo sketch o alle librerie, sembra più un problema di filesystem: “chmod: Unable to change file mode on ” e a seguire “Read-only file system” che mi fa pensare tu possa avere qualche problema sul mac o con l’installazione dell’IDE.
      Prova ad aggiornare l’IDE alla 1.8.2 e installare le librerie solo da Library Manager

    • Lasagni Mirco on 23 giugno 2017 at 22:32
    • Reply

    Dov’è la riga a cui fai riferimento dicendo
    nota che nella linea di invio dei dati seriali è presente una riga, che ho scritto io, secondo le indicazioni presenti nei commenti dello sketch: YYYY,MM,DD,hh,mm,ss sostituendo ai campi i valori della data e dell’ora che desideri impostare e premendo “send” ottieni un cambio dei valori sull’RTC DS3231 per arduino e sul monitor seriale vedrai:
    Io non ho capito dov’è la riga inserita/modificata da te

    1. Ciao Mirco,
      nell’immagine del monitor seriale, la riga che devi inviare è yyyy,mm,dd,hh,mm,ss come puoi leggere e serve a configurare la data e ora corrente.

    • FAA on 22 ottobre 2017 at 12:01
    • Reply

    Ciao Mauro
    Complimenti e grazie per le informazioni che condividi sul sito sto passandolo al setaccio 🙂
    Ho due problemi con la scheda ds3231: non mi legge la temperatura (t:0.00) secondo se levo la batteria (nuova) non mantiene l’ora…
    Hai suggerimenti grazie

    1. Ciao FAA,
      puoi provare a togliere la batteria, se alimentato non perderai l’ora ma dubito cambi qualcosa.
      Se vuoi resettare il DS3231 completamente togli la batteria e l’alimentazione .. perderai tutte le impostazioni ma potresti risolvere.

    • FAA on 24 ottobre 2017 at 09:33
    • Reply

    Grazie Mauro
    Già provato ma nulla.. si resetta sempre.. provo a ordinarne un altro;
    Nel frattempo smanetterò con rs485
    🙂

    1. Ciao FAA,
      potrebbe essere difettoso.

    • Pietro on 16 dicembre 2017 at 08:00
    • Reply

    Ciao, ottimo tutorial… una domanda: come posso programmare gli allarmi interno del modulo rtv ad ogni ora?
    In modo da farli inviare un impulso?

    1. Ciao Pietro,
      puoi leggere e comprendere qualche sketch tipo la centralina di irrigazione per capire come su utilizza il comando if in queste situazioni.

    • Giorgio on 25 marzo 2018 at 00:06
    • Reply

    Ciao. Seguo sempre con molto interesse i tuoi progetti, complimenti.
    Volevo sapere se con il modulo DS3231 non sia possibile creare un cronometro con approssimazione al centesimo di secondo, ed in caso affermativo se si possa avere qualche sketch di esempio.
    Ho già provato ad usare la funzione millis(), ma non va bene nel mio caso, in quanto serve una buona precisione.
    Grazie.

    Giorgio

    1. Ciao Giorgio,
      non penso che questo modulo supporti tale precisione o informazione.

    • Carmine on 10 ottobre 2018 at 15:57
    • Reply

    Ciao Mauro ti volevo chiedere un informazione un paio di anni fa realizzai un controllo automatico della campanella a scuola utilizzando una scheda arduino e RTC DS1307 fino a l’anno scorso andava bene perchè l’orario era uguale per tutti i giorni della settimana, quest’anno invece la dirigente ha voluto un orario che i giorni dispari abbiamo 6 ore e l’ultima ora suona dalle 13.05 alla 13.55 mentre i giorni pari abbiamo 5 ore l’ultima suona dalle 12.15 alle 13.10. quindi per questa diversificazione mi comporta ad avere un informazione da parte del RTC sui 7 giorni della settimana come posso mfre per tirarli fuori dal RTC ti ringrazio e ti saluto Carmine

    1. Ciao Carmine,
      sul blog ci dovrebbe essere un articolo o un commento relativo a come ottenere l’informazione che ti serve.
      Prova a cercare, magari in un articolo dedicato al DS1307 perché nel DS3231 ( questo in cui hai inserito il commento ) potrebbe essere differente.

  1. […] « RTC DS3231 per arduino […]

  2. […] RTC DS3231 […]

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.