Reklama
Udržiavanie času na projektoch Arduino nie je také ľahké, ako by ste si mohli myslieť: akonáhle pripojenie k počítaču neexistuje, váš nematovaný Arduino jednoducho prestane fungovať, vrátane jeho vnútorného tickeru.
Ak chcete udržiavať svoje Arduino v synchronizácii so svetom v jeho okolí, budete potrebovať tzv. Modul Hodiny v reálnom čase. Tu je návod, ako ho použiť.
Aký je účel hodín reálneho času (RTC)?
Váš počítač s najväčšou pravdepodobnosťou synchronizuje svoj čas s internetom, ale stále má interné hodiny, ktoré stále fungujú aj bez pripojenia na internet alebo je vypnuté napájanie. Ak používate Arduino zapojené do počítača, má prístup k presnému času, ktorý poskytujú vaše systémové hodiny. To je celkom užitočné, ale väčšina projektov Arduino je navrhnutá na použitie mimo počítača - na ktorom Po každom odpojení napájania alebo po reštarte Arduina nebude mať vôbec tušenie, kedy to je. Vnútorné hodiny sa vynulujú a pri ďalšom zapnutí sa začnú znova počítať od nuly.
Ak má váš projekt niečo spoločné s potrebou času - napríklad môj
budík pre nočné svetlo a svitanie Alarmový projekt pre nočné svetlo a svitanie ArduinoDnes urobíme východ slnka budík, ktorý vás jemne a pomaly zobudí bez toho, aby ste sa uchýlili k útočnému stroju na vytváranie hluku. Čítaj viac - bude to jednoznačne problém. V tomto projekte sme sa dostali k problému tým, že sme každú noc ručne nastavili dosť hrubý čas spôsobom - používateľ stlačil tlačidlo reset tesne pred tým, ako išli do postele, čím poskytol manuálny čas sync. Toto nie je ideálne dlhodobé riešenie.Modul RTC je ďalší obvod, ktorý vyžaduje malú gombíkovú batériu, ktorá stále počíta čas, aj keď je Arduino vypnuté. Po nastavení raz - zachová sa tak životnosť batérie, zvyčajne dobrý rok.
TinyRTC
Najobľúbenejší RTC pre Arduino sa nazýva TinyRTC a dá sa kúpiť okolo 5 až 10 dolárov na eBay. Pravdepodobne budete musieť dodať svoju vlastnú batériu (je nezákonné prepravovať tieto zámoria na mnoho miest) a niektoré hlavičky (kolíky, ktoré sa zasunú do otvorov, ktoré si budete musieť spájkovať sami).
Toto je modul, ktorý mám:
Má dokonca zabudovaný snímač teploty, ale ak batériu nepoužívate, vydrží dlhšie.
Počet dier v tejto veci vyzerá dosť strašidelne, ale potrebujete iba štyri z nich; GND, VCC, SCL a SDA - môžete použiť príslušné kolíky na oboch stranách modulu RTC. Hovoríte s hodinami pomocou Protokol I2C, čo znamená, že sa používajú iba dva kolíky - jeden pre „hodiny“ (sériové komunikačné dátové hodiny, nič nesúvisiace s časom) a jeden pre dáta. V skutočnosti dokonca pripájate až 121 zariadení I2C na rovnaké dva kolíky - vyskúšajte túto stránku Adafruit na výber ďalších zariadení I2C, ktoré by ste mohli pridať, pretože ich je veľa!
Začíname
Pripojte svoj modul TinyRTC podľa schémy nižšie - ružová čiara DS nie je potrebná, pretože je to pre snímač teploty.
Potom si stiahnite čas a DS1307RTC knižnice a výsledné priečinky vložte do priečinka /libraries zložky.
Ukončite a znova spustite prostredie Arduino, aby sa načítali do knižníc a príkladov.
V ponuke DS1307RTC nájdete dva príklady: nahrajte a spustite Nastavte čas príklad prvý - nastaví RTC na správny čas. Skutočný kód nestojí za to ísť do detailov, stačí vedieť, že ho musíte spustiť raz, aby ste vykonali počiatočnú synchronizáciu času.
Ďalej sa pozrite na príklad použitia pomocou ReadTest.
#include
#include
#include void setup () {Serial.begin (9600); while (! Serial); // čakať na sériové oneskorenie (200); Serial.println ("DS1307RTC Read Test"); Serial.println ( ""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Hodina); Serial.write ( ':'); print2digits (tm. Minúta); Serial.write ( ':'); print2digits (tm. Sekundu); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Deň); Serial.write ( '/'); Serial.print (tm. Mesiac); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm. Rok)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 je zastavený. Spustite SetTime “); Serial.println ("príklad na inicializáciu času a spustenie prevádzky."); Serial.println (); } else {Serial.println ("Chyba čítania DS1307! Skontrolujte obvody. "); Serial.println (); } oneskorenie (9000); } oneskorenie (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (číslo); }
Upozorňujeme, že sme zahrnuli aj jadro Wire.h knižnica - prichádza s Arduino a používa sa na komunikáciu cez I2C. Nahrajte kód, otvorte sériovú konzolu pri rýchlosti 9600 baudov a sledujte, či vaše Arduino zobrazuje aktuálny čas každú sekundu. Podivuhodný!
Najdôležitejším kódom v príklade je vytvorenie tmElements_t tm - toto štruktúra že naplníme aktuálny čas; a RTC.read (tm) funkcia, ktorá získa aktuálny čas z modulu RTC, vloží ho do nášho tm Štruktúra a vracia sa pravda, ak všetko dopadlo dobre. Pridajte do tohto príkazu „if“ svoj ladiaci alebo logický kód, napríklad vytlačte čas alebo naň reagujte.
Teraz, keď viete, ako sa dostať k Arduinu v správny čas, môžete skúsiť prepísať projekt budíka pri východe slnka alebo vytvoriť LED hodiny slov - možnosti sú nekonečné! Čo urobíš?
Kredity obrázkov: Snootlab Via Flickr
James má bakalárske štúdium v oblasti umelej inteligencie a je držiteľom certifikátu CompTIA A + a Network +. Je popredným vývojárom MakeUseOf a trávi svoj voľný čas hraním VR paintballu a spoločenských hier. Staval počítače od malička.