Wie und warum sollte eine Echtzeituhr zu Arduino hinzugefügt werden
Die Zeit für Arduino-Projekte zu behalten, ist nicht so einfach, wie Sie vielleicht denken: Sobald die Computerverbindung nicht mehr besteht, wird Ihr nicht mit Strom versorgter Arduino einfach beendet, einschließlich des internen Tickers.
Um Ihr Arduino mit der Welt in der Umgebung zu synchronisieren, benötigen Sie ein sogenanntes “Echtzeituhrmodul”. Hier ist, wie man eins benutzt.
Was ist der Sinn einer Echtzeituhr (RTC)?
Ihr Computer synchronisiert höchstwahrscheinlich seine Zeit mit dem Internet, aber er verfügt immer noch über eine interne Uhr, die auch ohne Internetverbindung oder Ausschalten des Stroms weiterläuft. Wenn Sie ein Arduino verwenden, das an einen Computer angeschlossen ist, hat es Zugriff auf die genaue Uhrzeit, die von Ihrer Systemuhr bereitgestellt wird. Das ist ziemlich nützlich, aber die meisten Arduino-Projekte sind so konzipiert, dass sie auch außerhalb eines Computers verwendet werden können. Wann immer der Strom getrennt wird oder der Arduino neu gestartet wird, hat er keine Ahnung, wie spät es ist. Die interne Uhr wird zurückgesetzt und beginnt beim nächsten Einschalten wieder von Null zu zählen.
Wenn Ihr Projekt etwas mit dem Bedarf an Zeit zu tun hat - wie etwa mein Nachtlicht und Sonnenaufgangswecker Arduino Nachtlicht und Sonnenaufgangswarnprojekt Arduino Nachtlicht und Sonnenaufgangswarnprojekt Heute werden wir einen Sonnenaufgangswecker machen, der sanft und sanft wird wecken Sie langsam, ohne auf eine anstößige Geräuschmaschine zurückzugreifen. Lesen Sie mehr - dies wird eindeutig ein Thema sein. In diesem Projekt haben wir das Problem gelöst, indem Sie die Uhrzeit jede Nacht auf eine ziemlich grobe Weise manuell eingestellt haben - der Benutzer drückte die Reset-Taste kurz vor dem Schlafengehen und stellte eine manuelle Zeitsynchronisation bereit. Das ist eindeutig keine ideale Langzeitlösung.
Ein RTC-Modul ist eine zusätzliche Schaltung, die eine kleine Knopfzellenbatterie erfordert, die die Zeit auch dann zählt, wenn Ihr Arduino ausgeschaltet ist. Nach einmaliger Einstellung bleibt diese Zeit für die Lebensdauer der Batterie erhalten, normalerweise etwa ein gutes Jahr.
TinyRTC
Die beliebteste Echtzeituhr für Arduino heißt TinyRTC und kann für etwa 5 bis 10 USD bei eBay erworben werden. Sie werden höchstwahrscheinlich Ihre eigene Batterie bereitstellen müssen (es ist unzulässig, diese Produkte an vielen Orten im Ausland zu versenden) und einige Header (die Stifte, die in die Löcher gesteckt werden, die Sie selbst einlöten müssen)..
Dies ist das Modul, das ich habe:
Es hat sogar einen eingebauten Temperatursensor, obwohl der Akku länger hält, wenn Sie ihn nicht benutzen.
Die Anzahl der Löcher an diesem Ding sieht ziemlich beängstigend aus, aber Sie brauchen nur vier davon; GND, VCC, SCL und SDA - Sie können die entsprechenden Pins auf beiden Seiten des RTC-Moduls verwenden. Sie sprechen mit der Uhr über das I2C-Protokoll, dh es werden nur zwei Pins verwendet - einer für die “Uhr” (eine serielle Kommunikationsdatenuhr, die nichts mit der Zeit zu tun hat) und eine für die Daten. Sie ketten sogar bis zu 121 I2C-Geräte auf den gleichen zwei Pins. Auf dieser Adafruit-Seite finden Sie eine Auswahl weiterer I2C-Geräte, die Sie hinzufügen könnten, denn es gibt viele!
Fertig machen
Schließen Sie Ihr TinyRTC-Modul gemäß der folgenden Abbildung an - die rosa DS-Leitung wird nicht benötigt, da dies für den Temperatursensor der Fall ist.
Laden Sie als Nächstes die Time- und DS1307RTC-Bibliotheken herunter und legen Sie die resultierenden Ordner in Ihren Ordner ab / Bibliotheken Mappe.
Beenden Sie die Arduino-Umgebung und starten Sie sie erneut, um sie in die Bibliotheken und Beispiele zu laden.
Im DS1307RTC-Menü finden Sie zwei Beispiele: Upload und Ausführen von Zeit einstellen Beispiel zuerst - Dadurch wird die Echtzeituhr auf die richtige Uhrzeit eingestellt. Der eigentliche Code ist es nicht wert, ins Detail zu gehen. Sie müssen ihn nur einmal ausführen, um die anfängliche Zeitsynchronisation durchzuführen.
Als Nächstes sehen Sie sich die Beispielnutzung mit an ReadTest.
#umfassen #umfassen #umfassen void setup () Serial.begin (9600); während (! seriell); // auf serielle Verzögerung warten (200); Serial.println ("DS1307RTC Read Test"); Serial.println ("-------------------"); void loop () tmElements_t tm; if (RTC.read (tm)) Serial.print ("Ok, Time ="); print2digits (tm.Stunde); Serienschreiben (':'); print2digits (tm.Minute); Serienschreiben (':'); print2digits (tm.Second); Serialdruck (", Datum (D / M / Y) ="); Serialdruck (tm.Day); Serienschreiben ('/'); Serialdruck (tm.Monat); Serienschreiben ('/'); Serialprint (tmYearToCalendar (tm.Year)); Serial.println (); else if (RTC.chipPresent ()) Serial.println ("Der DS1307 wird gestoppt. Bitte führen Sie die SetTime aus"); Serial.println ("Beispiel zur Initialisierung der Zeit und Beginn der Ausführung"); Serial.println (); else Serial.println ("DS1307 Lesefehler! Bitte überprüfen Sie die Schaltung."); Serial.println (); Verzögerung (9000); Verzögerung (1000); void print2digits (int number) if (number> = 0 && number.)
Beachten Sie, dass wir auch den Kern enthalten haben Wire.h Bibliothek - dies kommt mit Arduino und wird für die Kommunikation über I2C verwendet. Laden Sie den Code hoch, öffnen Sie die serielle Konsole bei 9600 Baud und beobachten Sie, wie Ihr Arduino jede Sekunde die aktuelle Uhrzeit ausgibt. Wunderbar!
Der wichtigste Code im Beispiel ist das Erstellen eines tmElements_t tm - Dies ein Struktur dass wir mit der aktuellen Zeit bevölkern werden; und das RTC.read (tm) Funktion, die die aktuelle Uhrzeit vom RTC-Modul erhält, legt sie in unser tm Struktur und gibt wahr zurück, wenn alles gut gelaufen ist. Fügen Sie Ihren Debug- oder Logikcode in diese "if" -Anweisung ein, z. B. die Uhrzeit ausdrucken oder darauf reagieren.
Nun, da Sie wissen, wie Sie mit Arduino die richtige Zeit finden, können Sie versuchen, das Sunrise-Alarm-Projekt umzuschreiben oder eine LED-Wordclock zu erstellen - die Möglichkeiten sind endlos! Was machst du??
Bildnachweise: Snootlab Via Flickr
Erfahren Sie mehr über: Arduino.