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

Per mantenere il tuo Arduino in sincronia con il mondo che lo circonda, avrai bisogno di quello che viene chiamato un modulo Real Time Clock. Ecco come usarne uno.

Per mantenere il tuo Arduino in sincronia con il mondo che lo circonda, avrai bisogno di quello che viene chiamato un modulo Real Time Clock.  Ecco come usarne uno.
Annuncio pubblicitario

Mantenere il tempo sui progetti 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 un cosiddetto "Real Time Clock module". 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 più famoso RTC 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:

RTC-modulo

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 l'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é ce ne sono molti!

Iniziare

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

cablaggio

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

Esci e riavvia l'ambiente Arduino per caricare le librerie e gli esempi.
ds1307rtc-example-menù

Troverai due esempi nel menu DS1307RTC: carica ed esegui prima l'esempio SetTime - questo imposterà l'RTC sull'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 .

#include #include #include void setup() { Serial.begin(9600); while (!Serial) ; // wait for serial delay(200); Serial.println("DS1307RTC Read Test"); 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("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number 

Nota che abbiamo incluso anche la libreria principale di Wire.h, che viene fornita con Arduino e 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 tmElements_t tm - questa una struttura che verrà compilata con l'ora corrente; e la funzione RTC.read (tm), che ottiene l'ora corrente dal modulo RTC, la inserisce nella nostra struttura tm e restituisce true 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

In this article