Kako i zašto dodati sat u stvarnom vremenu Arduinu

  • Peter Holmes
  • 0
  • 4905
  • 1469
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.

Kako bi vaš Arduino bio u sinkronizaciji sa svijetom oko njega, trebat će vam ono što se zove “Modul sata u stvarnom vremenu”. Evo kako koristiti jedan.

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 - u tom trenutku, kad god se isključi struja ili se Arduino ne pokrene, neće imati apsolutno pojma koliko je sati. Unutarnji sat će se resetirati i ponovno početi odbrojavati od nule, sljedeći put kada se uključi.

Ako vaš projekt ima ikakve veze s potrebnim vremenom - poput budilice za noćnu svjetlost i izlaska Arduino noćno svjetlo i Projekta alarma za izlazak sunca Arduino noćno svjetlo i Projekt alarma izlaska sunca danas, napravit ćemo budilicu za izlazak sunca, koja će nježno i polako vas budi bez pribjegavanja uvredljivom stroju za stvaranje buke. - ovo će očito biti problem. U tom smo projektu riješili problem ručnim postavljanjem vremena svake noći na prilično grub način - korisnik bi pritisnuo tipku za resetiranje neposredno prije odlaska u krevet, pružajući ručnu sinkronizaciju vremena. Jasno da to nije idealno rješenje za dugo vremena.

RTC modul dodatni je 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 opskrbiti baterijom (ilegalno ih slati u inozemstvo na mnoga mjesta) i nekim zaglavima (igle koje urezuju u rupe, koje ćete morati lemiti u sebi).

Ovo je modul koji imam:

Čak ima ugrađeni senzor temperature, iako će baterija trajati duže 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 relevantne igle s obje strane RTC modula. Sa satom razgovarate pomoću I2C protokola, što znači da se koriste samo dva igle - jedan za “sat” (sat za serijsku komunikaciju, nema veze s vremenom) i jedan za podatke. U stvari, čak 121 I2C uređaje vežete na iste dvije igle - pogledajte ovu stranicu Adafruit za odabir drugih I2C uređaja koje možete dodati jer ima puno!

Početak rada

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

Zatim preuzmite Time i DS1307RTC knjižnice i smjestite rezultirajuće mape u svoje / knjižnice mapa.

Izađite i ponovno pokrenite Arduino okruženje kako biste se učitali u biblioteke i primjere.

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 poništavanje postave () Serial.begin (9600); dok (! serijski); // čekati serijsko kašnjenje (200); Serial.println ("Test čitanja DS1307RTC"); Serial.println ( "-------------------");  void petlja () tmElements_t tm; ako (RTC.read (tm)) Serial.print ("U redu, vrijeme ="); print2digits (tm.Hour); Serial.write ( ':'); print2digits (tm.Minute); Serial.write ( ':'); print2digits (tm.Second); Serial.print (", datum (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 ("DS1307 je zaustavljen. Molimo pokrenite SetTime"); Serial.println ("primjer za inicijaliziranje vremena i početak pokretanja."); Serial.println ();  else Serial.println ("Greška kod čitanja DS1307! Provjerite krug."); Serial.println ();  kašnjenje (9000);  kašnjenje (1000);  void print2digits (int broj) if (broj> = 0 && broj < 10)  Serial.write('0');  Serial.print(number);  

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 gledajte i vaš Arduino svake sekunde ispisuje trenutno vrijeme. veličanstven!

Najvažniji kod u primjeru je stvaranje a tmElements_t tm - ovo struktura da ćemo popuniti sadašnje vrijeme; i the RTC.read (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 toga dodajte program za uklanjanje pogrešaka ili logike “ako” izjavu, poput ispisivanja vremena ili reagiranja 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




Još ne komentari

O modernoj tehnologiji, jednostavnoj i pristupačnoj.
Vaš vodič u svijetu moderne tehnologije. Naučite kako koristiti tehnologije i uređaje koji nas okružuju svaki dan i naučite kako otkriti zanimljivosti na Internetu.