Annuncio pubblicitario
Trascorrere del tempo sui progetti Arduino non è così facile come si potrebbe pensare: una volta che la connessione al computer non è lì, il tuo Arduino non alimentato smette semplicemente di funzionare, incluso il suo ticker interno.
Per mantenere il tuo Arduino in sincronia con il mondo che lo circonda, avrai bisogno di quello che viene chiamato un "modulo orologio in tempo reale". Ecco come usarne uno.
Qual è il punto di un Real Time Clock (RTC)?
Molto probabilmente il tuo computer si sincronizza con Internet, ma ha ancora 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'ora esatta fornita dall'orologio di sistema. È piuttosto utile, ma la maggior parte dei progetti Arduino sono progettati per essere utilizzati lontano da un computer, a cui punto, ogni volta che si scollega l'alimentazione o si riavvia Arduino, non si ha assolutamente idea di che ora è. L'orologio interno verrà ripristinato e inizierà a contare nuovamente da zero la prossima volta che viene acceso.
Se il tuo progetto ha a che fare con il bisogno del tempo, come il mio sveglia notturna e all'alba Progetto Arduino Night Light e Sunrise AlarmOggi creeremo una sveglia all'alba, che ti sveglierà dolcemente e lentamente senza ricorrere a una macchina offensiva che produce rumore. Leggi di più - questo sarà chiaramente un problema. In quel progetto, abbiamo risolto il problema impostando manualmente l'ora ogni notte in modo piuttosto grezzo modo - l'utente preme il pulsante di reset appena prima di andare a letto, fornendo un orario manuale sync. Chiaramente questa non è una soluzione ideale da molto tempo.
Un modulo RTC è un ulteriore circuito, 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.
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 oltremare in molti luoghi) e alcune intestazioni (i pin che si inseriscono nei fori, che dovrai saldare in te).
Questo è il modulo che ho:
Ha anche un sensore di temperatura incorporato, anche se la batteria durerà più a lungo se non la si utilizza.
Il numero di buchi su quella cosa sembra piuttosto spaventoso, ma ne hai solo bisogno di quattro; GND, VCC, SCL e SDA: è possibile utilizzare i pin pertinenti su entrambi i lati del modulo RTC. Parli con l'orologio usando Protocollo I2C, il che significa che vengono utilizzati solo due pin: uno per il "clock" (un clock di dati di comunicazione seriale, nulla a che fare con il tempo) e uno per i dati. In effetti, puoi persino concatenare fino a 121 dispositivi I2C sugli stessi due pin: dai un'occhiata 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 DS rosa non è necessaria, poiché è per il sensore di temperatura.
Quindi, scarica il Tempo e DS1307RTC librerie e posizionare le cartelle risultanti nel tuo /libraries cartella.
Esci e riavvia l'ambiente Arduino per caricarlo nelle librerie e negli esempi.
Troverai due esempi nel menu DS1307RTC: carica ed esegui il file Tempo impostato primo esempio - questo imposterà RTC sull'ora corretta. Non vale la pena approfondire il codice attuale, basta sapere che è necessario eseguirlo una volta per eseguire la sincronizzazione temporale iniziale.
Quindi, guarda l'uso di esempio con ReadTest.
#includere
#includere
#includere void setup () {Serial.begin (9600); while (! Serial); // attendere il ritardo seriale (200); Serial.println ("DS1307RTC Leggi test"); Serial.println ( ""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Ora); Serial.write ( ':'); print2digits (tm. Minuto); Serial.write ( ':'); print2digits (tm. Secondo); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Giorno); Serial.write ( '/'); Serial.print (tm. Mese); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm. Anno)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 è stato arrestato. Esegui SetTime "); Serial.println ("esempio per inizializzare l'ora e iniziare l'esecuzione."); Serial.println (); } else {Serial.println ("Errore di lettura DS1307! Si prega di controllare i circuiti. "); Serial.println (); } ritardo (9000); } ritardo (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (numero); }
Tieni presente che abbiamo incluso anche il core Wire.h libreria: viene fornita con Arduino e viene utilizzata per comunicare tramite 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) La funzione, che ottiene l'ora corrente dal modulo RTC, la inserisce nel nostro tm struttura e restituisce true se tutto è andato bene. Aggiungi il tuo codice di debug o logico all'interno dell'istruzione "if", come stampare l'ora o reagire ad essa.
Ora che sai come ottenere il momento giusto con Arduino, potresti provare a riscrivere il progetto della sveglia all'alba o creare un word clock a LED: le possibilità sono infinite! Che cosa farai?
Crediti immagine: Snootlab Via Flickr
James ha una laurea in Intelligenza Artificiale ed è certificato CompTIA A + e Network +. È lo sviluppatore principale di MakeUseOf e trascorre il suo tempo libero giocando a paintball e giochi da tavolo VR. Costruisce PC da quando era bambino.