Hur och varför lägga till en realtidsklocka till Arduino

Hur och varför lägga till en realtidsklocka till Arduino / DIY

Att hålla tid på Arduino-projekt är inte lika lätt som du kanske tror: När datorns anslutning inte finns kvar slutar din unpowered Arduino helt enkelt att köra, inklusive dess interna ticker.

För att hålla din Arduino synkroniserad med världen runt den, behöver du det som kallas a “Real Time Clock-modulen”. Så här använder du en.

Vad är meningen med en realtidsklocka (RTC)?

Din dator synkroniserar sannolikt sin tid med internet, men den har fortfarande en intern klocka som fortsätter även utan en Internetanslutning eller strömmen är avstängd. När du använder en Arduino ansluten till en dator har den tillgång till korrekt tid som tillhandahålls av systemklockan. Det är ganska användbart, men de flesta Arduino-projekt är konstruerade för att användas bort från en dator. Vid vilken tidpunkt när strömmen kopplas ur, eller Arduino startas om, har det ingen aning om vilken tid det är. Den interna klockan återställs och börjar räkna från noll igen nästa gång den sätts på.

Om ditt projekt har någonting att göra med att behöva tiden - till exempel min nattljus och soluppgång väckarklocka Arduino Night Light och Sunrise Alarm Project Arduino Nattljus och Sunrise Alarm Project idag, kommer vi att göra en soluppgång väckarklocka, som försiktigt och Sakta vakna dig utan att tillgripa en offensiv brusmaskin. Läs mer - det här kommer tydligt att bli ett problem. I det projektet kom vi runt problemet genom att manuellt ställa in tiden varje natt på ett ganska oväsentligt sätt - användaren skulle trycka på återställningsknappen strax innan de gick och lägger till en manuell synkronisering. Tydligen är det inte en idealisk långtidslösning.

En RTC-modul är en extra bit av kretsar som kräver ett litet myntcellsbatteri, vilket fortsätter att räkna tiden även när din Arduino är avstängd. Efter att ha ställts in en gång - det kommer att hålla den tiden för batteriets liv, vanligtvis ett bra år eller så.

TinyRTC

Den mest populära RTC för Arduino heter TinyRTC och kan köpas för cirka $ 5- $ 10 på eBay. Du kommer sannolikt att behöva försörja ditt eget batteri (det är olagligt att skicka dessa utomlands till många ställen) och några rubriker (stiften som slår in i hålen, som du behöver lödda i dig själv).

Detta är modulen jag har:

Det har till och med en inbyggd temperatursensor, men batteriet kommer att hålla längre om du inte använder det.

Antalet hål på det där ser ganska skrämmande ut, men du behöver bara fyra av dem. GND, VCC, SCL och SDA - du kan använda relevanta pinnar på vardera sidan av RTC-modulen. Du pratar med klockan med hjälp av I2C-protokollet, vilket innebär att endast två stift används - en för “klocka” (en seriell kommunikationsdataklocka, inget att göra med tiden) och en för data. Faktum är att du till och med kedjer upp till 121 I2C-enheter på samma två stift - kolla in denna Adafruit-sida för ett urval av andra I2C-enheter du kan lägga till, eftersom det finns mycket!

Komma igång

Haka upp din TinyRTC-modul enligt diagrammet nedan - den rosa DS-linjen behövs inte, som det är för temperatursensorn.

Hämta sedan tid och DS1307RTC-bibliotek och placera de resulterande mapparna i din / bibliotek mapp.

Avsluta och starta om Arduino-miljön för att ladda i bibliotek och exempel.

Du hittar två exempel på DS1307RTC-menyn: ladda upp och kör Ställ klockan exempel först - det här ställer in RTC till rätt tid. Den faktiska koden är inte värt att gå i detalj med, bara vet att du behöver köra den en gång för att utföra den första tidssynkroniseringen.

Titta sedan på exempelförbrukningen med ReadTest.

 #inkludera  #inkludera  #inkludera  tomgångsinställning () Serial.begin (9600); medan (! Serial); // vänta på seriell fördröjning (200); Serial.println ("DS1307RTC Read Test"); Serial.println ( "-------------------");  tomrumsling () tmElements_t tm; om (RTC.read (tm)) Serial.print ("Ok, Time ="); print2digits (tm.Hour); Serial.write ( ':'); print2digits (tm.Minute); Serial.write ( ':'); print2digits (tm.Second); Serial.print (", Datum (D / M / Y) ="); Serial.print (tm.Day); Serial.write ( '/'); Serial.print (tm.Month); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm.Year)); Serial.println ();  annars om (RTC.chipPresent ()) Serial.println ("DS1307 är stoppad. Vänligen kör SetTime"); Serial.println ("exempel för att initiera tiden och börja springa."); Serial.println ();  else Serial.println ("DS1307 läsfel! Vänligen kolla kretskortet."); Serial.println ();  fördröjning (9000);  fördröjning (1000);  void print2digits (int nummer) if (number> = 0 && number 

Observera att vi också har inkluderat kärnan Wire.h bibliotek - det här kommer med Arduino och används för kommunikation över I2C. Ladda upp koden, öppna seriekonsolen vid 9600 baud och titta och din Arduino matar ut den aktuella tiden varje sekund. Underbar!

Den viktigaste koden i exemplet är att skapa en tmElements_t tm - detta a strukturera att vi kommer att fylla med den nuvarande tiden; och den RTC.read (tm) funktion, som får den aktuella tiden från RTC-modulen, sätter den i vår tm struktur och returnerar sant om allt gick bra. Lägg till din felsöknings- eller logik kod inuti det "if" -sättandet, till exempel att skriva ut tiden eller reagera på den.

Nu när du vet hur du får rätt tid med Arduino, kan du försöka skriva om soluppgångslarmprojektet eller skapa en LED-ordklocka - möjligheterna är oändliga! Vad kommer du att göra?

Bildkrediter: Snootlab Via Flickr

Utforska mer om: Arduino.