Hirdetés

Az idő Arduino projekteknél történő tartása nem olyan egyszerű, mint gondolnád: ha nincs számítógépes kapcsolat, akkor a hatalom nélküli Arduino egyszerűen leáll, beleértve a belső tickerjét.

Annak érdekében, hogy Arduino-ja szinkronban legyen a környező világgal, szükséged lesz a „Real Time Clock modulra”. Így használhatja egyet.

Mi értelme van a Real Time Clocknak ​​(RTC)?

A számítógép valószínűleg szinkronizálja az idejét az internettel, de van még egy belső órája, amely még internetkapcsolat nélkül is működik, vagy ha az áramellátás ki van kapcsolva. Ha számítógéphez csatlakoztatott Arduino-t használ, akkor hozzáférhet a rendszeridő által megadott pontos időhöz. Ez nagyon hasznos, de a legtöbb Arduino projektet úgy tervezték, hogy a számítógéptől távol legyen - ahol pont, ha bármikor ki van húzva az áramellátás, vagy ha az Arduino újraindul, akkor fogalma sincs arról, hogy mikor ez. A belső óra alaphelyzetbe áll, és a következő bekapcsoláskor ismét nulláról számol.

Ha a projektnek valamilyen köze van az idő szükségességéhez - mint például az én

instagram viewer
éjszakai fény és napkelte ébresztőóra Arduino éjszakai fény és napkelte riasztási projektMa napfelkelte ébresztőórát készítünk, amely óvatosan és lassan felébreszt, anélkül, hogy egy támadó zajt okozó gépet venne igénybe. Olvass tovább - ez egyértelműen kérdés lesz. Ebben a projektben megkerüljük a kérdést azáltal, hogy manuálisan meghatározzuk az éjszakai időt meglehetősen durva módon Út - a felhasználó megnyugta a reset gombot éppen lefekvés előtt, megadva egy kézi időt szinkronizál. Nyilvánvaló, hogy ez nem ideális hosszú távú megoldás.

Az RTC modul egy további apró áramköri elem, ehhez kis érmecellás elem szükséges, amely továbbra is számolja az időt, még akkor is, ha Arduino készüléke ki van kapcsolva. Miután egyszer beállította - ez megtartja az akkumulátor élettartamát, általában kb. Jó évet.

TinyRTC

Az Arduino számára a legnépszerűbb RTC az úgynevezett TinyRTC, és körülbelül megvásárolható 5–10 USD az eBay-en. Valószínűleg be kell szállítania a saját akkumulátort (sok országba tilos külföldre szállítani), valamint néhány fejlécet (a lyukakba becsavaró csapokat, amelyeket önmagában meg kell forrasztani).

Ez a modul van:

RTC modul

Még beépített hőmérséklet-érzékelője is van, bár az akkumulátor hosszabb ideig tart, ha nem használja.

A lyukak száma ezen a dolgon elég félelmetesnek tűnik, de csak négyre van szüksége; GND, VCC, SCL és SDA - használhatja a megfelelő csapokat az RTC modul mindkét oldalán. Az órával beszélget I2C protokoll, ami azt jelenti, hogy csak két érintkezőt használnak - egyet az „óra” (egy soros kommunikációs adatóra, nincs köze az időhöz) és egy az adatokhoz. Valójában akár 121 I2C eszközt is láncolhat ugyanazon a tűn - ellenőrizze ezen az Adafruit oldalon választhat más I2C eszközökhöz, amelyeket felvehet, mert nagyon sok van!

Elkezdeni

Csatlakoztassa a TinyRTC modult az alábbi ábra szerint - a rózsaszínű DS vonalra nincs szükség, ugyanúgy, mint a hőmérséklet-érzékelőnél.

vezeték

Ezután töltse le a Idő és DS1307RTC könyvtárakat, és helyezze a kapott mappákat a mappájába /libraries mappába.

Lépjen ki és indítsa újra az Arduino környezetet, hogy betöltse a könyvtárakat és a példákat.
ds1307rtc-example-menü

Két példát talál a DS1307RTC menüben: töltse fel és futtassa a Beállítani az időt első példa - ez beállítja az RTC-t a megfelelő időre. A tényleges kóddal nem érdemes részletesen foglalkozni, csak tudja, hogy a kezdeti időszinkronizálás végrehajtásához egyszer futtatnia kell azt.

Ezután nézzük meg a példa használatát a ReadTest.


#include 
#include 
#include  érvénytelen beállítás () {Serial.begin (9600); míg (! sorozat); // várja meg a soros késleltetést (200); Serial.println ("DS1307RTC Read Test"); Serial.println ( ""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Óra); Serial.write ( ':'); print2digits (tm. Perc); Serial.write ( ':'); print2digits (tm. Második); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Nap); Serial.write ( '/'); Serial.print (tm. Hónap); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm. Év)); Serial.println (); } else {if (RTC.chipPresent ()) {Serial.println ("A DS1307 le van állítva. Kérjük, futtassa a SetTime-t "); Serial.println ("példa az idő inicializálására és a futtatás megkezdésére."); Serial.println (); } else {Serial.println ("DS1307 olvasási hiba! Ellenőrizze az áramkört. "); Serial.println (); } késés (9000); } késleltetés (1000); } érvénytelen print2digits (int szám) {if (szám> = 0 && szám <10) {Serial.write ('0'); } Serial.print (szám); }

Vegye figyelembe, hogy a magot is belefoglaltuk Wire.h könyvtár - ez az Arduino-val érkezik, és az I2C-n keresztüli kommunikációra szolgál. Töltse fel a kódot, nyissa meg a soros konzolt 9600 baud sebességgel, és figyelje, hogy az Arduino másodpercenként adja ki az aktuális időt. Csodálatos!

A példában a legfontosabb kód a tmElements_t tm - ez egy szerkezet hogy a jelenlegi idővel lakunk; és a RTC.read (tm) funkció, amely az aktuális időt az RTC modulból veszi át, beilleszti a saját tm felépítése, és igaz lesz, ha minden jól ment. Adja hozzá a hibakeresési vagy logikai kódot az „if” utasításhoz, például nyomtassa ki az időt vagy reagáljon rá.

Most, hogy tudod, hogyan lehet a megfelelő időt az Arduino-val megkapni, megpróbálhatod átírni a napkelte-riasztási projektet, vagy létrehozhat egy LED-es szóórát - a lehetőségek végtelenek! Mit fogsz csinálni?

Kép kreditek: Snootlab Flickr-en keresztül

James rendelkezik mesterséges intelligencia BSc-vel, CompTIA A + és Network + tanúsítvánnyal rendelkezik. A MakeUseOf vezető fejlesztője, és szabadidejét VR paintballon és társasjátékokon játszik. Gyerekkora óta épít PC-ket.