Oglas

Zadržati vrijeme na Arduino projektima nije tako lako kao što možda mislite: jednom kada veza s računalom ne postoji, vaš bez napajanja Arduino jednostavno prestaje s radom, uključujući i njegov unutarnji klik.

Da bi Arduino bio u sinkronizaciji sa svijetom oko njega, trebat će vam ono što se naziva "modul sata realnog vremena". Evo kako je koristiti.

Kakva je svrha sata u stvarnom vremenu (RTC)?

Vaše računalo najvjerojatnije sinkronizira vrijeme s internetom, ali još uvijek ima unutarnji sat koji nastavlja i dalje bez internetske veze ili ako je napajanje isključeno. Kada koristite Arduino priključen na računalo, on ima pristup točnom vremenu koje pruža sat vašeg sustava. To je prilično korisno, ali većina Arduinovih projekata dizajnirana je tako da se koristi dalje od računala točka, svaki put kad struja ne bude uključena ili se Arduino ponovno pokrene, neće imati apsolutno pojma u koje vrijeme to je. Unutarnji sat bit će resetiran i počet će odbrojavati nulu sljedeći put kad se uključi.

instagram viewer

Ako vaš projekt ima ikakve veze s potrebom vremena - kao što je moj noćna svjetlost i budilica Projekt alarma za noćno osvjetljenje i izlazak sunca ArduinoDanas ćemo napraviti budilicu za izlazak sunca, koja će vas lagano i polako probuditi bez pribjegavanja uvredljivom stroju za buku. Čitaj više - ovo će očito biti problem. U tom smo projektu zaobišli problem ručno postavljajući vrijeme svake noći poprilično sirovo način - korisnik bi pritisnuo gumb za resetiranje neposredno prije odlaska u krevet, pružajući ručno vrijeme sinkronizacija. Jasno da to nije idealno rješenje za dugo vremena.

RTC modul je dodatni bitni krug, za koji je potrebna mala kovanica s baterijom koja nastavlja brojati vrijeme čak i kad je vaš Arduino isključen. Nakon jednom postavljenog - zadržati će to vrijeme trajanja baterije, obično dobru godinu dana.

TinyRTC

Najpopularniji RTC za Arduino zove se TinyRTC i može se kupiti za oko $ 5- $ 10 na eBayu. Najvjerojatnije ćete trebati nabaviti vlastitu bateriju (ilegalno je slanje u inozemstvo na mnoga mjesta) i neke zaglavlja (igle koje prorezuju u rupe, koje ćete morati lemiti u sebi).

Ovo je modul koji imam:

RTC-modul

Čak ima ugrađeni senzor temperature, iako će baterija duže trajati ako ga ne koristite.

Broj rupa na toj stvari izgleda prilično zastrašujuće, ali potrebne su vam samo četiri; GND, VCC, SCL i SDA - možete koristiti odgovarajuće igle s obje strane RTC modula. Razgovarate s sata koristeći I2C protokol, što znači da se koriste samo dva pina: jedan za "sat" (sat serijske komunikacije, nema veze s vremenom) i jedan za podatke. Zapravo, na iste dvije igle čak lančate do 121 I2C uređaja - provjerite ovu stranicu Adafruit za izbor drugih I2C uređaja koje možete dodati jer ih ima puno!

Početak rada

Pričvrstite svoj TinyRTC modul prema donjem dijagramu - ružičasta DS linija nije potrebna jer je to senzor temperature.

ožičenje

Zatim preuzmite Vrijeme i DS1307RTC knjižnice i rezultirajuće mape smjestite u svoje /libraries mapu.

Izađite i ponovno pokrenite Arduino okruženje kako biste se učitali u knjižnice i primjere.
ds1307rtc-primjer-izbornik

Naći ćete dva primjera u izborniku DS1307RTC: prenesite i pokrenite Postavi vrijeme Primjer prvo - ovo će postaviti RTC na točno vrijeme. Stvarni kôd ne vrijedi ulaziti u detalje, samo znajte da ga trebate pokrenuti jednom da biste izvršili početnu vremensku sinkronizaciju.

Zatim pogledajte primjer uporabe sa ReadTest.


#include 
#include 
#include  void setup () {Serial.begin (9600); dok (! serijski); // čekati serijsko kašnjenje (200); Serial.println ("Test čitanja DS1307RTC"); Serial.println ( ""); } void petlja () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("U redu, vrijeme ="); print2digits (tm. Sat); Serial.write ( ':'); print2digits (tm. Minuta); Serial.write ( ':'); print2digits (tm. Drugi); Serial.print (", datum (D / M / Y) ="); Serijski otisak (tm. Dan); Serial.write ( '/'); Serijski otisak (tm. Mjesec); Serial.write ( '/'); Serijski.print (tmYearToCalendar (tm. Godina). Godina)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 je zaustavljen. Pokrenite SetTime "); Serial.println ("primjer za inicijaliziranje vremena i početak pokretanja."); Serial.println (); } else {Serial.println ("DS1307 greška kod čitanja! Provjerite krug. "); Serial.println (); } kašnjenje (9000); } kašnjenje (1000); } void print2digits (int broj) {if (broj> = 0 && broj <10) {Serial.write ('0'); } Serijski.print (broj); }

Imajte na umu da smo također uključili jezgru Wire.h knjižnica - dolazi s Arduinom i koristi se za komunikaciju preko I2C. Učitajte kôd, otvorite serijsku konzolu na 9600 baud i pazite i vaš Arduino svake sekunde emitira trenutno vrijeme. Čudo!

Najvažniji kod u primjeru je stvaranje a tmElements_t tm - ovo struktura da ćemo popuniti sadašnje vrijeme; i the RTC.pročitano (tm) funkcija koja dobiva trenutno vrijeme od RTC modula, stavlja ga u naš tm strukturu i vraća istinu ako bi sve išlo dobro. Unutar izjave „if“ dodajte program za uklanjanje pogrešaka ili logike, kao što je ispis vremena ili reagiranje na njega.

Sada kada znate kako doći u pravo vrijeme s Arduinom, mogli biste pokušati prepisati projekt alarma za izlazak sunca ili stvoriti LED riječ sat - mogućnosti su beskrajne! Što ćete napraviti?

Slikovni krediti: Snootlab Via Flickr

James je diplomirao iz umjetne inteligencije i certificiran je CompTIA A + i Network +. Vodeći je programer MakeUseOf-a, a svoje slobodno vrijeme provodi igrajući VR paintball i boardgames. Gradio je računala još od djeteta.