Oglas

Ohranjanje časa za Arduino projekte ni tako enostavno, kot bi si morda mislili: ko računalniške povezave ni, vaš nenadzorovan Arduino preprosto preneha teči, vključno s svojim notranjim odzivnikom.

Da bo vaš Arduino sinhroniziran s svetom okoli njega, boste potrebovali "modul ure v realnem času". Tukaj je opisano, kako ga uporabljati.

Kaj je smisel ure v realnem času (RTC)?

Vaš računalnik najverjetneje sinhronizira čas z internetom, vendar ima še vedno notranjo uro, ki deluje tudi brez internetne povezave ali če je napajanje izključeno. Ko uporabljate Arduino, priključen na računalnik, ima dostop do natančnega časa, ki ga zagotavlja vaša sistemska ura. To je precej koristno, toda večina projektov Arduino je zasnovana tako, da se uporablja zunaj računalnika točka, kadar koli je napajalnik izklopljen ali pa se Arduino znova zažene, popolnoma ne vem, kdaj je. Notranja ura se ponastavi in ​​začne ponovno šteti od ničle, ko jo ponovno vklopite.

Če ima vaš projekt kaj skupnega s tem, da potrebujete čas - kot je moj

instagram viewer
nočna svetloba in budilka ob sončnem vzhodu Projekt nočne luči in alarma sončnega vzhoda ArduinoDanes bomo izdelovali budilko ob sončnem vzhodu, ki vas bo nežno in počasi zbudila, ne da bi se zatekli k žaljivemu stroju. Preberi več - to bo očitno vprašanje. V tem projektu smo odpravili težavo, tako da ročno nastavimo čas vsako noč na precej surov način način - uporabnik bi pritisnil gumb za ponastavitev tik pred odhodom v posteljo in si tako zagotovil ročni čas sinhronizacija Jasno, da to ni idealna dolgoročna rešitev.

Modul RTC je dodatni kolut vezja, ki zahteva majhno baterijsko baterijo, ki še naprej šteje čas, tudi ko je vaš Arduino izklopljen. Po nastavitvi enkrat - to bo trajalo življenjsko dobo baterije, običajno dobro leto ali približno.

TinyRTC

Najbolj priljubljen RTC za Arduino se imenuje TinyRTC in ga je mogoče kupiti naokoli $ 5 do 10 $ na eBayu. Najverjetneje boste morali priskrbeti svojo baterijo (nezakonito je pošiljanje teh v tujino na več krajev) in nekaj glave (zatiči, ki se zarežejo v luknje, ki jih boste morali spajkati v sebi).

To je modul, ki ga imam:

rtc-modul

Ima celo vgrajen senzor temperature, čeprav baterija zdrži dlje, če je ne uporabljate.

Število lukenj na tej stvari izgleda precej strašljivo, vendar jih potrebujete le štiri; GND, VCC, SCL in SDA - ustrezne nožice lahko uporabite na obeh straneh modula RTC. Z uro se pogovarjate I2C protokol, kar pomeni, da se uporabljata samo dva nožica - eden za “uro” (ura za serijsko komunikacijo, nič s časom) in en za podatke. Dejansko celo verige do 121 I2C naprav na istih dveh zatičih - preverite to stran Adafruit za izbiro drugih naprav I2C, ki bi jih lahko dodali, ker jih je veliko!

Uvod

Priklopite modul TinyRTC v skladu s spodnjim diagramom - roza črta DS ni potrebna, kot je to za senzor temperature.

ožičenje

Nato prenesite Čas in DS1307RTC knjižnice in nastale mape postavite v svoje /libraries mapo.

Zaženite in znova zaženite Arduino okolje, da se naložite v knjižnice in primere.
ds1307rtc-menu-primer

V meniju DS1307RTC boste našli dva primera: naložite in zaženite Nastavi čas primer najprej - s tem bo RTC nastavljen na pravi čas. Dejanska koda se ne splača podrobno opisovati, samo vedite, da jo morate zagnati enkrat, da opravite začetno sinhronizacijo časa.

Nato si oglejte primer uporabe s ReadTest.


#include 
#include 
#include  nastavitev ničnosti () {Serial.begin (9600); medtem ((serijska); // počakajte na serijsko zamudo (200); Serial.println ("Test branja DS1307RTC"); Serial.println (""); } void loop () {tmElements_t tm; če (RTC.read (tm)) {Serial.print ("V redu, čas ="); print2digits (tm Ura); Serial.write (':'); print2digits (tm Minuta); Serial.write (':'); print2digits (tm Drugi); Serial.print (", datum (D / M / Y) ="); Serijski odtis (tm. Dan); Serial.write ('/'); Serijski odtis (tm. Mesec); Serial.write ('/'); Serijski.print (tmYearToCalendar (tm Leto)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 je ustavljen. Prosimo zaženite SetTime "); Serial.println ("primer inicializacije časa in začetek teka."); Serial.println (); } else {Serial.println ("Napaka pri branju DS1307! Preverite vezje. "); Serial.println (); } zamuda (9000); } zamuda (1000); } void print2digits (int številka) {if (število> = 0 && številka <10) {Serial.write ('0'); } Serijski.print (številka); }

Upoštevajte, da smo vključili tudi jedro Wire.h knjižnica - prihaja z Arduino in se uporablja za komunikacijo prek I2C. Naložite kodo, odprite serijsko konzolo pri 9600 baud in gledajte in vaš Arduino vsak sekundo odda trenutni čas. Čudovito!

Najpomembnejša koda v primeru je ustvarjanje tmElements_t tm - to a zgradba da se bomo naselili s trenutnim časom; in RTC.rečit (tm) funkcijo, ki dobi trenutni čas iz modula RTC, jo postavi v našo tm strukturo in vrne resnico, če bi šlo vse dobro. V to izjavo "če" dodajte svojo programsko kodo za odpravljanje napak ali logiko, na primer tiskanje časa ali odziv nanjo.

Zdaj, ko veste, kako najti pravi čas z Arduino, lahko poskusite znova napisati projekt alarma ob sončnem vzhodu ali ustvariti LED besedno uro - možnosti so neskončne! Kaj boste naredili?

Slikovni krediti: Snootlab Via Flickr

James ima doktorat iz področja umetne inteligence in ima certifikat CompTIA A + in Network +. Je vodilni razvijalec MakeUseOf in svoj prosti čas preživlja z igranjem VR paintball in družabnih iger. Z računalniki gradi že od malih nog.