
William Charles
0
839
83
Udržování času na projektech Arduino není tak snadné, jak byste si mohli myslet: jakmile tam není připojení k počítači, váš nepoháněný Arduino 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 to, co se nazývá “Modul hodin reálného času”. Zde je návod, jak použít jeden.
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 pro použití mimo počítač - v tomto okamžiku, kdykoli je napájení odpojeno nebo restartováno Arduino, nebude mít absolutně tušení, kolik je hodin. Vnitřní hodiny se resetují a začnou se počítat od nuly při příštím zapnutí.
Pokud má váš projekt co do činění s potřebou času - jako je můj noční budík a budík při východu slunce, projekt Arduino Night Light a Sunrise Alarm Project Arduino Night Light and Sun Alarm Project Project, dnes budeme vyrábět budík pro východu slunce, který bude jemně a pomalu se probudíte, aniž byste se uchýlili k útočnému stroji na vytváření hluku. - to bude zjevně problém. V tomto projektu jsme problém vyřešili manuálním nastavením času každou noc poměrně hrubým způsobem - uživatel stiskl tlačítko reset těsně před tím, než šli spát, a poskytl ruční synchronizaci času. 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 jej koupit na eBay za 5 až 10 $. 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é se zasouvají do otvorů, které budete muset pájet sami).
Toto je modul, který mám:
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íte s hodinami pomocí protokolu I2C, což znamená, že se používají pouze dva kolíky - jeden pro “hodiny” (sériové komunikační datové hodiny, nic společného s časem) a jeden pro data. Ve skutečnosti můžete dokonce zřetězit až 121 zařízení I2C na stejných dvou kolících - podívejte se na tuto stránku Adafruit, kde najdete výběr dalších zařízení I2C, která byste mohli přidat, protože existuje mnoho!
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í senzor.
Poté si stáhněte knihovny Time a DS1307RTC a vložte výsledné složky do svého / knihovny složku.
Ukončete a znovu spusťte prostředí Arduino a načtěte do knihoven a příkladů.
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ů s, prostě vím, že je nutné spustit jej jednou pro provedení počáteční synchronizace času.
Dále se podívejme na příklad použití s ReadTest.
#include #include #include void setup () 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.Hour); Serial.write (':'); print2digits (tm.Minute); Serial.write (':'); print2digits (tm.Second); Serial.print (", Date (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 zastaven. Spusťte prosím SetTime"); Serial.println ("příklad inicializace času a spuštění 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(number);
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 vydává aktuální čas každou sekundu. Úžasné!
Nejdůležitější kód v příkladu je vytvoření tmElements_t tm - toto a struktura že naplníme aktuální čas; 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 něj svůj ladicí nebo logický kód “-li” prohlášení, jako je vytištění času nebo reakce na něj.
Nyní, když víte, jak si s Arduino najít 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áš?
Image Credits: Snootlab Via Flickr