Zeit auf Arduino-Projekten zu halten ist nicht so einfach, wie Sie vielleicht denken: Sobald die Computerverbindung nicht mehr vorhanden ist, hört Ihr nicht mit Strom versorgtes Arduino einfach auf zu laufen, einschließlich seines internen Tickers.
Um Ihren Arduino in Einklang mit der Umgebung zu halten, benötigen Sie ein sogenanntes "Echtzeituhr-Modul". Hier ist, wie man eins benutzt.
Was ist der Sinn einer Echtzeituhr (RTC)?
Ihr Computer synchronisiert höchstwahrscheinlich seine Zeit mit dem Internet, aber es hat immer noch eine interne Uhr, die auch ohne Internetverbindung weiterläuft oder das Gerät ausgeschaltet ist. Wenn Sie einen in einen Computer eingesteckten Arduino verwenden, hat er 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 außerhalb eines Computers verwendet werden können. An diesem Punkt hat der Arduino bei jedem Stromausfall keine Ahnung, wie spät es ist. Die interne Uhr wird zurückgesetzt und beginnt beim nächsten Einschalten wieder bei Null zu zählen.
Wenn Ihr Projekt etwas mit der Zeit zu tun hat - wie mein Nachtlicht und Sonnenaufgang Wecker Arduino Nachtlicht und Sonnenaufgang Alarm Projekt Arduino Nachtlicht und Sonnenaufgang Alarm Projekt heute, wir machen einen Sonnenaufgang Wecker, die sanft und wecken Sie langsam, ohne auf eine offensive Geräuschmaschine zu setzen. Lesen Sie mehr - das wird eindeutig ein Problem sein. In diesem Projekt haben wir das Problem gelöst, indem wir die Uhrzeit jede Nacht auf eine ziemlich grobe Art und Weise manuell eingestellt haben - der Benutzer drückte den Reset-Knopf kurz bevor sie zu Bett gingen und bot eine manuelle Zeitsynchronisation. Das ist natürlich keine ideale Langzeitlösung.
Ein RTC-Modul ist ein zusätzliches Schaltungselement, das eine kleine Knopfzellenbatterie benötigt, die die Zeit auch dann noch zählt, wenn Ihr Arduino ausgeschaltet ist. Nach einmaliger Einstellung wird diese Zeit für die Lebensdauer der Batterie beibehalten, normalerweise ein gutes Jahr oder so.
TinyRTC
Die beliebteste RTC für Arduino heißt TinyRTC und kann für ca. $ 5- $ 10 bei eBay gekauft werden. Sie werden höchstwahrscheinlich Ihre eigene Batterie liefern müssen (es ist illegal, diese ins Ausland zu verschicken) und einige Header (die Pins, 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 auf diesem Ding sieht ziemlich gruselig aus, aber du brauchst nur vier davon; GND, VCC, SCL und SDA - Sie können die relevanten Pins auf beiden Seiten des RTC-Moduls verwenden. Sie sprechen mit der Uhr mit I2C-Protokoll, was bedeutet, dass nur zwei Pins verwendet werden - einer für die "Uhr" (eine serielle Kommunikations-Daten-Uhr, nichts mit der Zeit zu tun) und eine für die Daten. Tatsächlich können Sie bis zu 121 I2C-Geräte an denselben zwei Pins verkabeln - sehen Sie sich diese Adafruit-Seite für eine Auswahl anderer I2C-Geräte an, die Sie hinzufügen könnten, denn es gibt eine Menge!
Anfangen
Schließen Sie Ihr TinyRTC-Modul wie unten dargestellt an - die pinkfarbene DS-Leitung wird nicht benötigt, wie beim Temperatursensor.
Laden Sie als nächstes die Bibliotheken Time und DS1307RTC herunter, und legen Sie die resultierenden Ordner in den Ordner / libraries .
Beenden und starten Sie die Arduino-Umgebung neu, um die Bibliotheken und Beispiele zu laden.
Im DS1307RTC-Menü finden Sie zwei Beispiele: Laden Sie zuerst das SetTime- Beispiel hoch und führen Sie es aus. Dadurch wird die RTC auf die korrekte Zeit eingestellt. Der eigentliche Code ist es nicht wert, ins Detail zu gehen, aber Sie müssen ihn einmal ausführen, um die anfängliche Zeitsynchronisation durchzuführen.
Sehen Sie sich als Nächstes die Beispielverwendung mit ReadTest an .
#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
Beachten Sie, dass wir auch die Kernbibliothek Wire.h enthalten haben - diese kommt mit Arduino und wird für die Kommunikation über I2C verwendet. Laden Sie den Code hoch, öffnen Sie die serielle Konsole mit 9600 Baud und beobachten Sie, und Ihr Arduino gibt jede Sekunde die aktuelle Uhrzeit aus. Fabelhaft!
Der wichtigste Code im Beispiel ist das Erstellen eines tmElements_t tm - das ist eine Struktur, die wir mit der aktuellen Zeit füllen werden; und die RTC.read (tm) -Funktion, die die aktuelle Zeit vom RTC-Modul erhält, in unsere tm- Struktur einfügt und true zurückgibt, wenn alles gut gegangen ist. Fügen Sie Ihren Debug- oder Logikcode innerhalb dieser "if" -Anweisung hinzu, z. B. indem Sie die Zeit ausdrucken oder darauf reagieren.
Jetzt, da Sie wissen, wie Sie mit Arduino die richtige Zeit finden, könnten Sie versuchen, das Projekt für den Sonnenaufgangsalarm neu zu schreiben oder eine LED-Wordclock zu erstellen - die Möglichkeiten sind endlos! Was wirst du machen?
Bildnachweis: Snootlab Via Flickr