Come e perché aggiungere un orologio in tempo reale ad Arduino

Come e perché aggiungere un orologio in tempo reale ad Arduino / Fai da te

Mantenere il tempo sui progetti di Arduino non è così facile come si potrebbe pensare: una volta che la connessione al computer non è presente, il tuo Arduino non alimentato si ferma semplicemente in esecuzione, incluso il suo ticker interno.

Per mantenere il tuo Arduino in sincronia con il mondo che lo circonda, avrai bisogno di ciò che viene chiamato a “Modulo Real Time Clock”. Ecco come usarne uno.

Qual è il punto di un Real Time Clock (RTC)?

Molto probabilmente il tuo computer sincronizza il suo tempo con Internet, ma ha comunque un orologio interno che continua a funzionare anche senza una connessione Internet o l'alimentazione è spenta. Quando si utilizza un Arduino collegato a un computer, ha accesso all'orario preciso fornito dall'orologio di sistema. È piuttosto utile, ma la maggior parte dei progetti Arduino sono progettati per essere utilizzati lontano da un computer: a quel punto, ogni volta che si spegne la corrente, o riavviato Arduino, non avrà assolutamente idea di che ora sia. L'orologio interno verrà resettato e ricomincerà a contare da zero al prossimo riavvio.

Se il tuo progetto ha qualcosa a che fare con il bisogno di tempo - come la mia luce notturna e la sveglia all'alba Arduino Night Light e Sunrise Alarm Project Arduino Night Light e Sunrise Alarm Project oggi, faremo una sveglia all'alba, che farà dolcemente e svegliati lentamente senza ricorrere a una macchina offensiva che produce rumore. Per saperne di più - questo sarà chiaramente un problema. In quel progetto, abbiamo risolto il problema impostando manualmente l'ora ogni notte in un modo piuttosto crudo: l'utente premeva il pulsante di ripristino appena prima di andare a letto, fornendo una sincronizzazione manuale dell'orario. Chiaramente questa non è una soluzione ideale a lungo termine.

Un modulo RTC è un ulteriore bit di circuiteria, che richiede una piccola batteria a bottone, che continua a contare il tempo anche quando Arduino è spento. Dopo essere stato impostato una volta, manterrà quel tempo per la durata della batteria, di solito un buon anno o giù di lì.

TinyRTC

Il RTC più popolare per Arduino si chiama TinyRTC e può essere acquistato per circa $ 5- $ 10 su eBay. Molto probabilmente dovrai fornire la tua batteria (è illegale spedire questi oltreoceano in molti luoghi) e alcune intestazioni (i perni che si inseriscono nei fori, che dovrai saldare in te stesso).

Questo è il modulo che ho:

Ha anche un sensore di temperatura incorporato, anche se la batteria durerà più a lungo se non la usi.

Il numero di buchi su quella cosa sembra piuttosto spaventoso, ma hai solo bisogno di quattro di essi; GND, VCC, SCL e SDA: è possibile utilizzare i relativi pin su entrambi i lati del modulo RTC. Parli al tempo usando il protocollo I2C, il che significa che sono usati solo due pin: uno per il “orologio” (un orologio dati di comunicazione seriale, niente a che fare con il tempo) e uno per i dati. In effetti, puoi persino collegare fino a 121 dispositivi I2C sugli stessi due pin: consulta questa pagina di Adafruit per una selezione di altri dispositivi I2C che potresti aggiungere, perché ci sono molti!

Iniziare

Collega il tuo modulo TinyRTC secondo lo schema seguente: la linea rosa DS non è necessaria, come quella del sensore di temperatura.

Quindi, scaricare le librerie Ora e DS1307RTC e posizionare le cartelle risultanti nella propria / librerie cartella.

Esci e riavvia l'ambiente Arduino per caricare le librerie e gli esempi.

Troverai due esempi nel menu DS1307RTC: carica ed esegui il Tempo impostato esempio prima - questo imposterà l'RTC all'ora corretta. Il codice attuale non vale la pena di entrare nei dettagli, basta sapere che è necessario eseguirlo una volta per eseguire la sincronizzazione dell'ora iniziale.

Quindi, guarda l'esempio di utilizzo con ReadTest.

 #includere  #includere  #includere  void setup () Serial.begin (9600); while (! Serial); // aspetta il ritardo seriale (200); Serial.println ("Test di lettura DS1307RTC"); Serial.println ( "-------------------");  void loop () tmElements_t tm; if (RTC.read (tm)) Serial.print ("Ok, Time ="); print2digits (tm.Hour); Serial.write ( ':'); print2digits (tm.Minute); Serial.write ( ':'); print2digits (tm.Second); Serial.print (", Date (D / M / Y) ="); Serial.print (tm.Day); Serial.write ( '/'); Serial.print (tm.Month); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm.Year)); Serial.println ();  else if (RTC.chipPresent ()) Serial.println ("Il DS1307 si è fermato. Eseguire il SetTime"); Serial.println ("esempio per inizializzare l'ora e iniziare l'esecuzione."); Serial.println ();  else Serial.println ("Errore di lettura DS1307! Controllare i circuiti."); Serial.println ();  delay (9000);  ritardo (1000);  void print2digits (int number) if (numero> = 0 && numero 

Nota che abbiamo incluso anche il nucleo Wire.h libreria - questa viene fornita con Arduino e viene utilizzata per comunicare su I2C. Carica il codice, apri la console seriale a 9600 baud e guarda e il tuo Arduino emette l'ora corrente ogni secondo. Meravigliosa!

Il codice più importante nell'esempio è la creazione di a tmElements_t tm - questo un struttura che popoleremo con l'ora corrente; e il RTC.read (tm) funzione, che ottiene l'ora corrente dal modulo RTC, la inserisce nel nostro tm struttura, e restituisce vero se tutto è andato bene. Aggiungi il tuo debug o codice logico all'interno di questa istruzione "if", ad esempio stampando il tempo o rispondendo ad esso.

Ora che sai come ottenere il momento giusto con Arduino, puoi provare a riscrivere il progetto di allarme alba o creare un word clock LED - le possibilità sono infinite! Cosa farai?

Crediti immagine: Snootlab Via Flickr

Scopri di più su: Arduino.