Annons

Att hålla tiden på Arduino-projekt är inte så lätt som du kanske tror: när datoranslutningen inte är där slutar din ostyrda Arduino helt enkelt att köra, inklusive dess interna ticker.

För att hålla din Arduino synkroniserad med världen runt kommer du att behöva det som kallas en "Real Time Clock-modul". Så här använder du en.

Vad är poängen med en realtidsklocka (RTC)?

Din dator synkroniserar troligen sin tid med internet, men den har fortfarande en intern klocka som fortsätter även utan internetuppkoppling eller strömmen är avstängd. När du använder en Arduino som är ansluten till en dator har den tillgång till exakt tid som din systemklocka tillhandahåller. Det är ganska användbart, men de flesta Arduino-projekt är utformade för att användas bort från en dator - där poäng, när som helst strömmen kopplas ur, eller Arduino startas om, har det absolut 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 startas.

Om ditt projekt har något att göra med att behöva tiden - till exempel min

instagram viewer
nattljus och soluppgång väckarklocka Arduino Night Light och Sunrise Alarm ProjectIdag kommer vi att göra en soluppgång väckarklocka, som försiktigt och långsamt kommer att väcka dig utan att ta till en stötande ljudgivande maskin. Läs mer - Detta kommer helt klart att bli en fråga. I det projektet kom vi runt problemet genom att manuellt ställa in tiden varje natt i en ganska rå sätt - användaren skulle trycka på återställningsknappen strax innan de gick till sängs, vilket gav en manuell tid synkronisera. Det är uppenbart att det inte är en idealisk långsiktig lösning.

En RTC-modul är en extra bit kretsar som kräver ett litet myntcellbatteri, som 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 livslängd, vanligtvis ett bra år eller så.

TinyRTC

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

Det här är den modul jag har:

rtc-modul

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

Antalet hål på den saken ser ganska läskigt ut, men du behöver bara fyra av dem; GND, VCC, SCL och SDA - du kan använda relevanta stift på vardera sidan av RTC-modulen. Du pratar med klockan med I2C-protokoll, vilket betyder att endast två stift används - en för ”klockan” (en seriekommunikationsdataklocka, ingenting att göra med tiden) och en för datan. I själva verket kedjar du till och med 121 I2C-enheter på samma två stift - kolla in den här Adafruit-sidan för ett urval av andra I2C-enheter som du kan lägga till, för det finns många!

Komma igång

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

ledningar

Ladda sedan ned Tid och DS1307RTC bibliotek och placera de resulterande mapparna i dina /libraries mapp.

Gå ut och starta om Arduino-miljön för att ladda i bibliotek och exempel.
ds1307rtc-exempel-menyn

Du hittar två exempel på DS1307RTC-menyn: ladda upp och köra Ställ klockan exempel först - detta 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.

Nästa, titta på exemplet användning med ReadTest.


#inkludera 
#inkludera 
#inkludera  void setup () {Serial.begin (9600); medan (! seriell); // vänta på seriell fördröjning (200); Serial.println ("DS1307RTC Read Test"); Serial.println ( ""); } void loop () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Timme); Serial.write ( ':'); print2digits (tm. Minut); Serial.write ( ':'); print2digits (tm. Andra); Serial.print (", Datum (D / M / Y) ="); Serial.print (tm. Dag); Serial.write ( '/'); Serial.print (tm. Månad); Serial.write ( '/'); Serial.print (tmYearToCalendar (tm. År)); Serial.println (); } annat {if (RTC.chipPresent ()) {Serial.println ("DS1307 är stoppad. Kör SetTime "); Serial.println ("exempel för att initialisera tiden och börja köra."); Serial.println (); } else {Serial.println ("DS1307 läsfel! Kontrollera kretsarna. "); Serial.println (); } fördröjning (9000); } fördröjning (1000); } void print2digits (int nummer) {if (nummer> = 0 && nummer <10) {Serial.write ('0'); } Serial.print (nummer); }

Observera att vi också har inkluderat kärnan Wire.h bibliotek - detta kommer med Arduino och används för kommunikation över I2C. Ladda upp koden, öppna seriekonsolen på 9600 baud och titta och dina Arduino matar ut aktuell tid varje sekund. Underbar!

Den viktigaste koden i exemplet är att skapa en tmElements_t tm - det här strukturera att vi kommer att fyllas med aktuell tid; och den RTC.read (tm) -funktionen, som får aktuell tid från RTC-modulen, sätter den i vår tm struktur och återkommer sant om allt gick bra. Lägg till din felsökning eller logikkod i det "if" -satsen, 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 prova att skriva om soluppgångslarmprojektet eller skapa en LED-ordklocka - möjligheterna är oändliga! Vad kommer du att göra?

Bildkrediter: Snootlab Via Flickr

James har en kandidatexamen i artificiell intelligens och är CompTIA A + och Network + certifierad. Han är ledande utvecklare av MakeUseOf och tillbringar sin fritid med att spela VR-paintball och brädspel. Han har byggt datorer sedan han var liten.