Hoe en waarom een ​​realtimeklok toevoegen aan Arduino

Om je Arduino synchroon te houden met de wereld om hem heen, zul je een zogenoemde Real Time Clock-module nodig hebben. Hier is hoe gebruik een.

Om je Arduino synchroon te houden met de wereld om hem heen, zul je een zogenoemde Real Time Clock-module nodig hebben.  Hier is hoe gebruik een.
Advertentie

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 houden met de wereld om hem heen, zul je een zogenoemde "Real Time Clock-module" nodig hebben. Hier is hoe gebruik een.

Wat is het nut van een Real Time Clock (RTC)?

Uw computer synchroniseert waarschijnlijk zijn tijd met internet, maar hij heeft nog steeds een interne klok die zelfs zonder internetverbinding blijft draaien 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 worden gebruikt 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. U zult waarschijnlijk uw 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 u zelf moet solderen).

Dit is de module die ik heb:

RTC-module

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 behulp van het I2C-protocol, wat betekent dat er maar twee pinnen worden gebruikt - één voor de "klok" (een seriële communicatiegegevensklok, niets met tijd te maken) en één voor de gegevens. 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.

bedrading

Download vervolgens de bibliotheken Time en DS1307RTC en plaats de resulterende mappen in uw map / bibliotheken .

Sluit af en start de Arduino-omgeving opnieuw om in de bibliotheken en voorbeelden te laden.
ds1307rtc-voorbeeld-menu

U vindt twee voorbeelden in het DS1307RTC-menu: upload eerst het SetTime- voorbeeld en voer dit uit - dit stelt de RTC in op de juiste tijd. 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) ; // wait for serial delay(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("The DS1307 is stopped. Please run the SetTime"); Serial.println("example to initialize the time and begin running."); Serial.println(); } else { Serial.println("DS1307 read error! Please check the circuitry."); Serial.println(); } delay(9000); } delay(1000); } void print2digits(int number) { if (number>= 0 && number 

Merk op dat we ook de kernbibliotheek Wire.h hebben opgenomen - deze komt 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. Marvelous!

De belangrijkste code in het voorbeeld is het maken van een tmElements_t tm - dit is een structuur die we zullen invullen met de huidige tijd; en de RTC.read (tm) -functie, die de huidige tijd krijgt van de RTC-module, plaatst deze in onze tm- structuur en geeft true terug als alles goed is gegaan. Voeg uw foutopsporings- of logica-code toe aan die "als" -instructie, zoals het afdrukken van de tijd of erop 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

In this article