Jak a proč přidat hodiny reálného času do Arduina

Jak a proč přidat hodiny reálného času do Arduina

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





jak udělat bootovací dvd z iso

Aby byla vaše Arduino v synchronizaci s okolním světem, budete potřebovat takzvaný „modul hodin reálného času“. Zde je návod, jak jeden použít.





K čemu jsou hodiny reálného času (RTC)?

Váš počítač pravděpodobně synchronizuje svůj čas s internetem, ale stále má interní hodiny, které pokračují i ​​bez připojení k internetu nebo když je vypnuto napájení. Když používáte Arduino zapojené do počítače, má přístup k přesnému času poskytovanému vašimi systémovými hodinami. To je docela užitečné, ale většina projektů Arduino je navržena tak, aby byla používána mimo počítač - v tomto okamžiku, kdykoli bude odpojeno napájení nebo restartováno Arduino, nebude mít absolutně žádnou představu o tom, kolik je hodin. Interní hodiny se resetují a začnou počítat znovu od nuly, až se znovu zapnou.





Pokud má váš projekt něco společného s potřebou času - například moje noční světlo a budík s východem slunce - bude to zjevně problém. V tomto projektu jsme tento problém vyřešili ručním nastavením času každou noc poměrně hrubým způsobem - uživatel by stiskl tlačítko reset těsně před spaním a poskytl manuální synchronizaci času. Očividně to není ideální dlouhodobé řešení.

Modul RTC je další bit obvodů, které vyžadují malou knoflíkovou baterii, která i nadále počítá čas, i když je Arduino vypnuté. Poté, co byl jednou nastaven - udrží tuto dobu po celou dobu životnosti baterie, obvykle dobrý rok nebo tak.



TinyRTC

Nejpopulárnější RTC pro Arduino se nazývá TinyRTC a na eBay se dá koupit za zhruba 5–10 $. S největší pravděpodobností budete muset dodat vlastní baterii (je nezákonné tyto zámořské zásilky přepravovat 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 vestavěný teplotní senzor, ačkoli baterie vydrží déle, pokud ji nepoužíváte.

Počet děr na té věci vypadá docela děsivě, ale potřebujete jen čtyři z nich; GND, VCC, SCL a SDA - příslušné piny můžete použít na obou stranách modulu RTC. Mluvíte s hodinami pomocí Protokol I2C , což znamená, že jsou použity pouze dva piny - jeden pro „hodiny“ (hodiny pro sériovou komunikaci, s časem nemají nic společného) a druhý pro data. Ve skutečnosti dokonce můžete řetězit až 121 zařízení I2C na stejné dva piny - podívejte se tato stránka Adafruit pro výběr dalších zařízení I2C byste mohli přidat, protože existuje spousta!





Začínáme

Připojte svůj modul TinyRTC podle níže uvedeného schématu - růžová linka DS není potřeba, což platí pro teplotní čidlo.

Dále si stáhněte soubor Čas a DS1307RTC knihovny a umístit 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 soubor SetTime příklad první - tím se nastaví RTC na správný čas. Skutečný kód nemá cenu rozebírat do detailů, stačí vědět, že ho musíte provést jednou, abyste mohli provést počáteční synchronizaci času.

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

kde mohu dostat papíry vytištěné?

#include
#include
#include
void setup() {
Serial.begin(9600);
while (!Serial) ; // wait for serial
delay(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('The DS1307 is stopped. Please run the SetTime');
Serial.println('example to initialize the time and begin running.');
Serial.println();
} else {
Serial.println('DS1307 read error! Please check the circuitry.');
Serial.println();
}
delay(9000);
}
delay(1000);
}
void print2digits(int number) {
if (number >= 0 && number <10) {
Serial.write('0');
}
Serial.print(number);
}

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

Nejdůležitějším kódem v tomto příkladu je vytvoření souboru a 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 vkládá do našeho tm strukturu a vrací true, pokud vše proběhlo dobře. Přidejte svůj ladicí nebo logický kód do příkazu „if“, jako je vytištění času nebo reakce na něj.

nejlepší aplikace pro učení kytary pro začátečníky

Nyní, když víte, jak dosáhnout správného času s Arduinem, můžete zkusit přepsat projekt alarmu východu slunce nebo vytvořit slovní hodiny s LED - možnosti jsou nekonečné! Co budeš dělat?

Kredity obrázku: Snootlab Přes Flickr

Podíl Podíl tweet E-mailem Jak změnit vzhled a vzhled pracovní plochy Windows 10

Chcete vědět, jak vylepšit vzhled Windows 10? Pomocí těchto jednoduchých přizpůsobení si Windows 10 přizpůsobíte.

Číst dále
Související témata
  • DIY
  • Arduino
O autorovi James Bruce(707 článků zveřejněno)

James má bakalářský titul v oboru umělé inteligence a je certifikován společností CompTIA A+ a Network+. Když není zaneprázdněn jako editor recenzí hardwaru, má rád LEGO, VR a deskové hry. Před nástupem do MakeUseOf byl osvětlovacím technikem, učitelem angličtiny a technikem datového centra.

Více od Jamese Bruce

Přihlaste se k odběru našeho zpravodaje

Připojte se k našemu zpravodaji a získejte technické tipy, recenze, bezplatné elektronické knihy a exkluzivní nabídky!

Kliknutím sem se přihlásíte k odběru
Kategorie Diy