Hoe en waarom een ​​realtimeklok toevoegen aan Arduino

Hoe en waarom een ​​realtimeklok toevoegen aan Arduino

Tijd bijhouden voor Arduino-projecten 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.





Apple bedrade toetsenbordtoetsen werken niet

Om je Arduino synchroon te houden met de wereld eromheen, heb je een zogenaamde 'Real Time Clock-module' nodig. Hier leest u hoe u er een kunt gebruiken.





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

Uw computer synchroniseert hoogstwaarschijnlijk de tijd met internet, maar hij heeft nog steeds een interne klok die doorgaat, zelfs zonder 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 wordt geleverd door uw systeemklok. Dat is best handig, maar de meeste Arduino-projecten zijn ontworpen om buiten een computer te worden gebruikt - op elk moment dat 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 weer vanaf nul te tellen de volgende keer dat hij wordt aangezet.





Als je project iets te maken heeft met tijd nodig hebben - zoals mijn nachtlampje en zonsopgangwekker - zal dit duidelijk een probleem zijn. In dat project hebben we het probleem omzeild door de tijd elke nacht handmatig in te stellen op een nogal grove manier - de gebruiker zou op de resetknop drukken net voordat ze naar bed gingen, wat een handmatige tijdsynchronisatie opleverde. Dat is duidelijk geen ideale oplossing voor de lange termijn.

Een RTC-module is een extra stukje circuit, waarvoor een kleine knoopcelbatterij nodig is, die de tijd blijft tellen, zelfs als uw Arduino is uitgeschakeld. Nadat het eenmaal is ingesteld, behoudt het die tijd voor de levensduur van de batterij, meestal een goed jaar of zo.



TinyRTC

De meest populaire RTC voor Arduino heet TinyRTC en kan op eBay voor ongeveer $ 5- $ 10 worden gekocht. U zult hoogstwaarschijnlijk uw eigen batterij moeten leveren (het is illegaal om deze naar veel plaatsen overzee te verzenden) en enkele headers (de pinnen die in de gaten passen, die u zelf moet solderen).

Dit is de module die ik heb:





Hij heeft zelfs een ingebouwde temperatuursensor, al gaat de batterij langer mee als je hem niet gebruikt.

Het aantal gaten op dat ding ziet er best 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 dataklok voor seriële communicatie, niets met tijd te maken) en een voor de gegevens. Je koppelt zelfs tot 121 I2C-apparaten aan dezelfde twee pinnen - check out deze Adafruit-pagina voor een selectie van andere I2C-apparaten die je zou kunnen toevoegen, want er zijn er veel!





Beginnen

Sluit je TinyRTC-module aan volgens onderstaand schema - de roze DS-lijn is niet nodig, want die is voor de temperatuursensor.

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

Sluit de Arduino-omgeving af en start deze opnieuw om 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 niet de moeite waard om in detail op in te gaan, weet alleen dat u deze één keer moet uitvoeren om de initiële tijdsynchronisatie uit te voeren.

Bekijk vervolgens het voorbeeldgebruik met LeesTest .

hoe dms te bekijken op instagram pc

#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 <10) {
Serial.write('0');
}
Serial.print(number);
}

Merk op dat we ook de kern hebben opgenomen Draad.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 dat we zullen vullen met de huidige tijd; en de RTC.lezen(tm) functie, die de huidige tijd van de RTC-module haalt, zet deze in onze tm structuur en geeft true terug als alles goed is gegaan. Voeg uw foutopsporings- of logische code toe aan die 'if'-instructie, zoals de tijd afdrukken of erop reageren.

hoeveel uur om een ​​meester te worden?

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

Afbeeldingscredits: Snootlab Via Flickr

Deel Deel Tweeten E-mail Hoe u het uiterlijk van uw Windows 10-bureaublad kunt veranderen

Wilt u weten hoe u Windows 10 er beter uit kunt laten zien? Gebruik deze eenvoudige aanpassingen om Windows 10 uw eigen te maken.

Lees volgende
Gerelateerde onderwerpen
  • doe-het-zelf
  • Arduino
Over de auteur James Bruce(707 artikelen gepubliceerd)

James heeft een BSc in Artificial Intelligence en is CompTIA A+ en Network+ gecertificeerd. Als hij het niet druk heeft als redacteur van hardwarerecensies, geniet hij van LEGO, VR en bordspellen. Voordat hij bij MakeUseOf kwam, was hij lichttechnicus, leraar Engels en datacenteringenieur.

Meer van James Bruce

Abonneer op onze nieuwsbrief

Word lid van onze nieuwsbrief voor technische tips, recensies, gratis e-boeken en exclusieve deals!

Klik hier om je te abonneren