Hoe en waarom een realtimeklok toevoegen aan Arduino
Het bijhouden van de tijd op Arduino-projecten is niet zo eenvoudig als je misschien denkt: zodra de computerverbinding er niet is, stopt je Arduino zonder stroom gewoon met draaien, inclusief de interne ticker.
Om je Arduino synchroon te laten lopen met de wereld om hem heen, heb je wat je noemt nodig “Real Time Clock-module”. Hier is hoe gebruik een.
Wat is het nut van een Real Time Clock (RTC)?
Uw computer synchroniseert hoogstwaarschijnlijk de tijd met internet, maar heeft nog steeds een interne klok die zelfs zonder een internetverbinding blijft werken of de stroom is uitgeschakeld. Wanneer u een Arduino gebruikt die is aangesloten op een computer, heeft deze toegang tot de precieze tijd die door uw systeemklok wordt geboden. Dat is behoorlijk nuttig, maar de meeste Arduino-projecten zijn ontworpen om weg te werken van een computer - op welk moment, elke keer dat de stroom wordt losgekoppeld, of de Arduino opnieuw is opgestart, het absoluut geen idee heeft van hoe laat het is. De interne klok wordt opnieuw ingesteld en begint weer met tellen vanaf nul als hij de volgende keer wordt ingeschakeld.
Als je project iets te maken heeft met tijd nodig hebben - zoals mijn nachtlampje en zonsopgangwekker Arduino Night Light en Sunrise Alarm Project Arduino Night Light en Sunrise Alarm Project Today, maken we een zonsopgangwekker, die zachtjes en langzaam je wakker maken zonder gebruik te maken van een aanstootgevend lawaai makende machine. Lees meer - dit is duidelijk een probleem. In dat project hebben we dit probleem opgelost door de tijd elke nacht handmatig in te stellen op een nogal ruwe manier - de gebruiker drukte op de resetknop vlak voordat ze naar bed gingen, met een handmatige tijdsynchronisatie. Dat is duidelijk geen ideale oplossing voor de lange termijn.
Een RTC-module is een extra stukje schakeling, waarvoor een kleine knoopcelbatterij nodig is, die de tijd blijft tellen, zelfs wanneer uw Arduino is uitgeschakeld. Nadat het eenmaal is ingesteld, zal het die tijd behouden voor de levensduur van de batterij, meestal een goed jaar of zo.
TinyRTC
De populairste RTC voor Arduino heet TinyRTC en kan op eBay voor $ 5- $ 10 worden gekocht. Je zult waarschijnlijk je eigen batterij moeten leveren (het is illegaal om deze overzeese naar vele plaatsen te verzenden), en enkele headers (de pinnen die in de gaten glijden, die je zelf moet solderen).
Dit is de module die ik heb:
Het heeft zelfs een ingebouwde temperatuursensor, hoewel de batterij langer meegaat als je hem niet gebruikt.
Het aantal gaten in dat ding ziet er nogal eng uit, maar je hebt er maar vier nodig; GND, VCC, SCL en SDA - u kunt de relevante pinnen aan beide kanten van de RTC-module gebruiken. Je praat tegen de klok met het I2C-protocol, wat betekent dat er maar twee pinnen worden gebruikt - een voor de “klok” (een seriële communicatie dataklok, niets te maken met tijd) en een voor de data. Je kunt zelfs tot 121 I2C-apparaten op dezelfde twee pinnen koppelen - bekijk deze Adafruit-pagina voor een selectie andere I2C-apparaten die je zou kunnen toevoegen, want er zijn veel!
Ermee beginnen
Sluit uw TinyRTC-module aan volgens het onderstaande schema - de roze DS-lijn is niet nodig, want dat is voor de temperatuursensor.
Download vervolgens de bibliotheken Time en DS1307RTC en plaats de resulterende mappen in uw map / bibliotheken map.
Sluit af en start de Arduino-omgeving opnieuw om in de bibliotheken en voorbeelden te laden.
U vindt twee voorbeelden in het DS1307RTC-menu: upload en voer de Tijd instellen voorbeeld eerst - hierdoor wordt de RTC op de juiste tijd ingesteld. De eigenlijke code is het niet waard om in detail te gaan met, weet alleen dat je het een keer moet uitvoeren om de initiële tijdsynchronisatie uit te voeren.
Bekijk vervolgens het voorbeeldgebruik met ReadTest.
#include #include #include void setup () Serial.begin (9600); while (! Serial); // wacht op seriële vertraging (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 ("De DS1307 is gestopt. Voer de SetTime uit"); Serial.println ("voorbeeld om de tijd te initialiseren en te starten."); Serial.println (); else Serial.println ("DS1307 read error! Controleer de circuits."); Serial.println (); vertraging (9000); vertraging (1000); void print2digits (int number) if (number> = 0 && number
Merk op dat we ook de kern hebben opgenomen Wire.h bibliotheek - deze wordt geleverd met Arduino en wordt gebruikt voor communicatie via I2C. Upload de code, open de seriële console op 9600 baud en bekijk en uw Arduino voert de actuele tijd elke seconde uit. wonderbaar!
De belangrijkste code in het voorbeeld is het maken van een tmElements_t tm - dit is structuur dat we zullen vullen met de huidige tijd; en de RTC.read (tm) functie, die de huidige tijd krijgt van de RTC-module, stopt deze in onze tm structuur en geeft als resultaat als alles goed is gegaan. Voeg uw foutopsporings- of logica-code toe aan die "als" -instructie, zoals het afdrukken van de tijd of reageren.
Nu je weet hoe je de juiste tijd met Arduino kunt krijgen, kun je proberen het zonsopgangalarmproject te herschrijven of een LED-woordklok te maken - de mogelijkheden zijn eindeloos! Wat ga je maken??
Afbeelding Credits: Snootlab Via Flickr
Ontdek meer over: Arduino.