Reklame

At holde tiden på Arduino-projekter er ikke så let, som du måske tror: når computerforbindelsen ikke er der, stopper din ikke-styrede Arduino simpelthen med at køre, inklusive dets interne ticker.

For at holde din Arduino synkroniseret med verden omkring den, har du brug for det, der kaldes et "Real Time Clock-modul". Sådan bruges en.

Hvad er poenget med en Real Time Clock (RTC)?

Din computer synkroniserer sandsynligvis sin tid med internettet, men den har stadig et internt ur, der holder ved, selv uden en internetforbindelse eller strømmen er slukket. Når du bruger en Arduino, der er sluttet til en computer, har den adgang til den nøjagtige tid, der leveres af dit systemur. Det er ret nyttigt, men de fleste Arduino-projekter er designet til at blive brugt væk fra en computer - hvor punkt, når som helst strømmen ikke er tilsluttet, eller Arduino genstartes, har det absolut ingen idé om, hvad tid det er. Det interne ur nulstilles og begynder at tælle fra nul igen, næste gang det tændes.

instagram viewer

Hvis dit projekt har noget at gøre med at have brug for tiden - som f.eks natlys og solopgang vækkeur Arduino Night Light og Sunrise Alarm ProjectI dag laver vi et solopgang vækkeur, der forsigtigt og langsomt vækker dig uden at ty til en stødende støjfremstillende maskine. Læs mere - dette vil helt klart være et spørgsmål. I dette projekt kom vi rundt på problemet ved manuelt at indstille tiden hver nat i en temmelig rå måde - brugeren ville trykke på nulstillingsknappen lige inden de gik i seng, hvilket gav en manuel tid synkronisere. Det er klart, at det ikke er en ideel langvarig løsning.

Et RTC-modul er en ekstra bit kredsløb, der kræver et lille møntcellebatteri, som fortsat tæller tiden, selv når din Arduino er slukket. Efter at have været indstillet én gang - holder det den tid, hvor batteriet varer, normalt et godt år eller deromkring.

TinyRTC

Den mest populære RTC til Arduino kaldes TinyRTC og kan købes for omkring $ 5- $ 10 på eBay. Du bliver sandsynligvis nødt til at levere dit eget batteri (det er ulovligt at sende disse til udlandet til mange steder), og nogle overskrifter (stifterne, der går i hullerne, som du bliver nødt til at lodde i dig selv).

Dette er det modul, jeg har:

RTC-modul

Det har endda en indbygget temperatursensor, selvom batteriet holder længere, hvis du ikke bruger det.

Antallet af huller på den ting ser temmelig skræmmende ud, men du har kun brug for fire af dem; GND, VCC, SCL og SDA - du kan bruge de relevante stifter på hver side af RTC-modulet. Du taler med uret ved hjælp af I2C-protokol, hvilket betyder, at der kun bruges to stifter - en til “uret” (et seriekommunikationsdataklokke, intet at gøre med tid) og en til dataene. Faktisk kæder du endda op til 121 I2C-enheder på de samme to stifter - tjek denne Adafruit-side til et udvalg af andre I2C-enheder, du kan tilføje, fordi der er mange!

Kom godt i gang

Tilslut dit TinyRTC-modul i henhold til nedenstående diagram - den lyserøde DS-linje er ikke nødvendig, da det er for temperatursensoren.

ledninger

Download derefter Tid og DS1307RTC biblioteker, og placer de resulterende mapper i dine /libraries folder.

Gå ud og relanceret Arduino-miljøet for at indlæse i bibliotekerne og eksemplerne.
ds1307rtc-eksempel-menu

Du finder to eksempler i DS1307RTC-menuen: upload og kør Fastsat tidspunkt eksempel først - dette indstiller RTC til det rigtige tidspunkt. Den faktiske kode er ikke værd at gå i detaljer med, bare ved, at du skal køre den en gang for at udføre den første tidssynkronisering.

Derefter skal du se på eksemplet brug med ReadTest.


#omfatte 
#omfatte 
#omfatte  tom opsætning () {Serial.begin (9600); mens (! seriel); // vent på seriel forsinkelse (200); Serial.println ("DS1307RTC læsetest"); Serial.println ( ""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Time); Serial.write ( ':'); print2digits (tm. Minut); Serial.write ( ':'); print2digits (tm. Anden); Serial.print (", dato (D / M / Y) ="); Serial.print (tm. Dag); Serial.write ( '/'); Serial.print (tm. Måned); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm. År)); Serial.println (); } andet {if (RTC.chipPresent ()) {Serial.println ("DS1307 er stoppet. Kør venligst SetTime "); Serial.println ("eksempel for at initialisere tiden og begynde at køre."); Serial.println (); } else {Serial.println ("DS1307 læse fejl! Kontroller kredsløb. "); Serial.println (); } forsinkelse (9000); } forsinkelse (1000); } void print2digits (int-nummer) {if (nummer> = 0 && nummer <10) {Serial.write ('0'); } Serial.print (nummer); }

Bemærk, at vi også har inkluderet kernen Wire.h bibliotek - dette leveres med Arduino og bruges til kommunikation via I2C. Upload koden, åbn seriekonsollen ved 9600 baud, og se, og dine Arduino udsender den aktuelle tid hvert sekund. Vidunderlig!

Den vigtigste kode i eksemplet er at oprette en tmElements_t tm - det struktur at vi udfyldes med det aktuelle tidspunkt; og RTC.read (tm) funktion, der får den aktuelle tid fra RTC-modulet, sætter den i vores tm struktur og vender tilbage, hvis alt gik godt. Tilføj din debug eller din logikode i denne "if" -sætning, f.eks. Udskrivning af tiden eller reaktion på den.

Nu, hvor du ved, hvordan du får det rigtige tidspunkt med Arduino, kan du prøve at omskrive solopgangsprojektet eller oprette et LED-ordur - mulighederne er uendelige! Hvad laver du?

Billedkreditter: Snootlab Via Flickr

James har en BSc i kunstig intelligens og er CompTIA A + og Network + certificeret. Han er hovedudvikler af MakeUseOf og bruger sin fritid på at spille VR paintball og brætspil. Han har bygget pc'er siden han var barn.