reklama

Udržování času na projektech Arduino není tak snadné, jak byste si mohli myslet: jakmile připojení k počítači není, váš Arduino bez napájení jednoduše přestane běžet, včetně interního tickeru.

Abyste udrželi své Arduino v synchronizaci s okolním světem, budete potřebovat tzv. Modul hodin reálného času. Zde je návod, jak jej použít.

Jaký je smysl hodin reálného času (RTC)?

Váš počítač s největší pravděpodobností synchronizuje svůj čas s internetem, ale stále má vnitřní hodiny, které nepřestávají fungovat i bez připojení k internetu nebo je vypnuto napájení. Pokud používáte Arduino připojené k počítači, má přístup k přesnému času poskytnutému systémovými hodinami. To je docela užitečné, ale většina projektů Arduino je navržena k použití mimo počítač - na kterém Kdykoli je napájení odpojeno nebo Arduino restartováno, nemá absolutně tušení, kdy to je. Vnitřní hodiny se resetují a začnou se počítat od nuly při příštím zapnutí.

Pokud má váš projekt něco společného s potřebou času - jako je můj

instagram viewer
budík pro noční světlo a svítání Alarmový projekt Arduino Night Light and Sunrise AlarmDnes budeme vyrábět svítící budík, který vás jemně a pomalu probudí, aniž byste se uchýlili k útočnému zařízení na vytváření hluku. Přečtěte si více - to bude zjevně problém. V tomto projektu jsme problém vyřešili manuálním nastavením času každou noc v poněkud hrubém stavu cesta - uživatel stiskl tlačítko reset těsně před tím, než šli spát, a poskytl manuální čas synchronizace. To samozřejmě není ideální dlouhodobé řešení.

RTC modul je další kousek obvodu, který vyžaduje malou knoflíkovou baterii, která i nadále počítá čas, i když je Arduino vypnuté. Poté, co je nastaven jednou - udrží tuto dobu po celou dobu životnosti baterie, obvykle dobrý rok.

TinyRTC

Nejoblíbenější RTC pro Arduino se nazývá TinyRTC a lze si ho koupit kolem $ 5 - $ 10 na eBay. Pravděpodobně budete potřebovat dodávat vlastní baterii (je nezákonné dodávat tyto zámoří na mnoho míst) a některé záhlaví (kolíky, které zapadají do otvorů, které budete muset pájet sami).

Toto je modul, který mám:

rtc-modul

Má dokonce zabudovaný teplotní senzor, ale pokud jej nepoužíváte, baterie vydrží déle.

Počet děr v této věci vypadá docela děsivě, ale potřebujete pouze čtyři z nich; GND, VCC, SCL a SDA - můžete použít příslušné kolíky na obou stranách modulu RTC. Mluvíš s hodinami pomocí Protokol I2C, což znamená, že se používají pouze dva piny - jeden pro „hodiny“ (sériové komunikační datové hodiny, nic společného s časem) a jeden pro data. Ve skutečnosti dokonce připojíte až 121 I2C zařízení na stejné dva piny - podívejte se tuto stránku Adafruit pro výběr dalších I2C zařízení, která byste mohli přidat, protože jich je spousta!

Začínáme

Připojte svůj modul TinyRTC podle níže uvedeného schématu - růžová linie DS není nutná, protože to platí pro teplotní čidlo.

elektrické vedení

Dále si stáhněte Čas a DS1307RTC knihovny a umístit výsledné složky do vašeho /libraries složku.

Ukončete a znovu spusťte prostředí Arduino a načtěte do knihoven a příkladů.
ds1307rtc-příklad-menu

V nabídce DS1307RTC najdete dva příklady: nahrajte a spusťte SetTime příklad první - nastaví RTC na správný čas. Skutečný kód nestojí za to jít do detailů, stačí vědět, že ho musíte spustit jednou, abyste provedli počáteční synchronizaci času.

Dále se podívejme na příklad použití s ReadTest.


#zahrnout 
#zahrnout 
#zahrnout  neplatné nastavení () {Serial.begin (9600); while (! Serial); // čekat na sériové zpoždění (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. Minuta); Serial.write (':'); print2digits (tm. Druhý); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Den); Serial.write ('/'); Serial.print (tm. Měsíc); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Rok)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("DS1307 je zastaven. Spusťte prosím SetTime "); Serial.println ("příklad inicializace času a zahájení provozu."); Serial.println (); } else {Serial.println ("Chyba čtení DS1307! Zkontrolujte obvody. "); Serial.println (); } zpoždění (9000); } zpoždění (1000); } void print2digits (int number) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (číslo); }

Všimněte si, že jsme také zahrnuli jádro Wire.h knihovna - přichází s Arduino a používá se pro komunikaci přes I2C. Nahrajte kód, otevřete sériovou konzoli rychlostí 9600 baudů a sledujte a vaše Arduino zobrazuje aktuální čas každou sekundu. Úžasné!

Nejdůležitější kód v příkladu je vytvoření tmElements_t tm - toto struktura že se naplníme aktuálním časem; a RTC.read (tm) funkce, která získává aktuální čas z modulu RTC, jej vloží do našeho tm struktura a vrací se pravda, pokud všechno šlo dobře. Přidejte do tohoto příkazu „if“ svůj ladicí nebo logický kód, například vytiskněte čas nebo na něj reagujte.

Nyní, když víte, jak si s Arduino udělat správný čas, můžete zkusit přepsat projekt poplachu při východu slunce nebo vytvořit LED slovní hodiny - možnosti jsou nekonečné! Co uděláš?

Obrazové kredity: Snootlab Přes Flickr

James má bakalářský titul v oboru umělé inteligence a je držitelem certifikátu CompTIA A + a Network +. Je hlavním vývojářem MakeUseOf a tráví svůj volný čas hraním VR paintballu a deskových her. Staví počítače od dětství.