Advertentie

Tijd aan Arduino-projecten besteden is niet zo eenvoudig als je zou denken: zodra de computerverbinding er niet is, stopt je niet-aangedreven Arduino gewoon met draaien, inclusief de interne ticker.

Om je Arduino gesynchroniseerd te houden met de wereld eromheen, heb je een zogenaamde "Real Time Clock-module" nodig. Hier leest u hoe u er een gebruikt.

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 doorgaat, zelfs zonder een internetverbinding of als de stroom is uitgeschakeld. Wanneer u een Arduino gebruikt die op een computer is aangesloten, heeft deze toegang tot de nauwkeurige tijd die door uw systeemklok wordt geleverd. Dat is best handig, maar de meeste Arduino-projecten zijn ontworpen om buiten een computer te worden gebruikt - waarbij wanneer de stroom wordt losgekoppeld of de Arduino opnieuw wordt opgestart, heeft hij absoluut geen idee hoe laat het is. De interne klok wordt gereset en begint opnieuw te tellen vanaf nul de volgende keer dat hij wordt ingeschakeld.

Als uw project iets te maken heeft met het nodig hebben van de tijd - zoals mijn nachtlampje en zonsopgang wekker Arduino Night Light en Sunrise Alarm ProjectVandaag maken we een zonsopgangswekker, die je zachtjes en langzaam wakker zal maken zonder je toevlucht te nemen tot een aanstootgevende, geluidmakende machine. Lees verder - dit wordt duidelijk een probleem. In dat project hebben we het probleem omzeild door de tijd elke nacht handmatig in te stellen op een nogal ruwe manier manier - de gebruiker drukte op de resetknop net voordat hij naar bed ging, wat een handmatige tijd opleverde synchroniseren. Dat is duidelijk geen ideale oplossing voor lange tijd.

Een RTC-module is een extra stukje schakeling, waarvoor een kleine knoopcelbatterij nodig is, die de tijd blijft tellen, zelfs als je Arduino is uitgeschakeld. Na eenmaal te zijn ingesteld, zal het die tijd behouden voor de levensduur van de batterij, meestal een goed jaar of zo.

TinyRTC

De meest populaire RTC voor Arduino heet TinyRTC en kan voor ongeveer worden gekocht $ 5- $ 10 op eBay. U zult waarschijnlijk uw eigen batterij moeten leveren (het is illegaal om deze naar veel plaatsen naar het buitenland te verzenden) en enkele koppen (de pinnen die in de gaten passen, die u in uzelf 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 behoorlijk eng uit, maar je hebt er maar vier nodig; GND, VCC, SCL en SDA - u kunt de relevante pinnen aan weerszijden van de RTC-module gebruiken. Je praat tegen de klok met I2C-protocol, wat betekent dat er slechts twee pinnen worden gebruikt: een voor de 'klok' (een seriële communicatiedataklok, niets met tijd te maken) en een voor de gegevens. U kunt zelfs tot 121 I2C-apparaten aan dezelfde twee pinnen koppelen - check out deze Adafruit-pagina voor een selectie van andere I2C-apparaten die je zou kunnen toevoegen, want er zijn er veel!

Ermee beginnen

Sluit uw TinyRTC-module aan volgens het onderstaande diagram - de roze DS-lijn is niet nodig, want dat is voor de temperatuursensor.

bedrading

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

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

U vindt twee voorbeelden in het DS1307RTC-menu: upload en voer de Tijd instellen voorbeeld eerst - dit stelt de RTC in op de juiste tijd. De feitelijke code is het niet waard om in detail te treden, weet alleen dat u deze eenmaal moet uitvoeren om de eerste tijdsynchronisatie uit te voeren.

Bekijk vervolgens het voorbeeldgebruik met ReadTest.


#include 
#include 
#include  ongeldige setup () {Serial.begin (9600); terwijl (! Serial); // wacht op seriële vertraging (200); Serial.println ("DS1307RTC Leestest"); Serial.println (""); } ongeldige lus () {tmElements_t tm; if (RTC.read (tm)) {Serial.print ("Ok, Time ="); print2digits (tm. Uur); Serial.write (':'); print2digits (tm. Minuut); Serial.write (':'); print2digits (tm. Tweede); Serial.print (", Date (D / M / Y) ="); Serial.print (tm. Dag); Serial.write ('/'); Serial.print (tm. Maand); Serial.write ('/'); Serial.print (tmYearToCalendar (tm. Jaar)); 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 beginnen met lopen."); Serial.println (); } anders {Serial.println ("DS1307 leesfout! Controleer het circuit. "); Serial.println (); } vertraging (9000); } vertraging (1000); } ongeldig print2digits (int-nummer) {if (number> = 0 && number <10) {Serial.write ('0'); } Serial.print (nummer); }

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 kijk en je Arduino geeft elke seconde de huidige tijd weer. Geweldig!

De belangrijkste code in het voorbeeld is het maken van een tmElements_t tm - dit is structuur die we vullen met de huidige tijd; en de RTC.read (tm) functie, die de huidige tijd van de RTC-module haalt, plaatst deze in onze tm structuur en keert terug als alles goed is gegaan. Voeg uw foutopsporings- of logische code toe aan die 'als'-instructie, zoals het afdrukken van de tijd of erop reageren.

Nu u weet hoe u de juiste tijd met Arduino weet te krijgen, kunt u proberen het zonsopgangalarmproject te herschrijven of een LED-woordklok te maken - de mogelijkheden zijn eindeloos! Wat ga je maken

Afbeeldingscredits: Snootlab Via Flickr

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt pc's sinds zijn kindertijd.