Uhrzeit auf dem Arduino

Wer auf einem Arduino die aktuelle Uhrzeit haben möchte, hat im Wesentlichen drei Optionen. Im Folgenden ein Überblick der Vor- und Nachteile, ohne Anspruch auf Vollständigkeit.

PS: Dieser Post ist eine Karteileiche, insofern kann ich (inzwischen) fast nichts mehr dazu sagen, aber vielleicht helfen die Links ja der einen oder anderen.

DS3231

Ein DS3231-Modul ist quasi eine klassische Uhr: Quarzbasiert, batteriebetrieben, ohne Funk. Beim 3231 wacht ein Temperatursensor darüber, dass eventuelle Abweichungen kompensiert werden (im Gegensatz zum DS1302, DS1307, …). Das Buzzword zu den genannten Modulen lautet “Real Time Clock” (RTC), und es gibt sie bsplw. von Adafruit oder auf Ebay aus China.

Der Vorteil ist offensichtlich: Alles in einem. Anschließen, auslesen, fertig. Allerdings wird die Zeit nur ein mal “gestellt”, und zwar beim Kompilieren. Ist die Batterie leer, oder die Gangabweichung über die Monate (Jahre?) zu groß, oder die Zeitumstellung wird nicht berücksichtigt, oder oder oder, heißt es neu zu kompilieren. Diese Lösung scheint mir die am wenigsten autarke zu sein, deshalb habe ich mich da nicht weiter mit beschäftigt.

NTP

Die für einen Softwareentwickler naheliegende Lösung ist das Auslesen eines Zeitservers. Dazu benötigt man eine Verbindung zu so einem Server, also vermutlich LAN oder WLAN. Die kostengünstigste Version (die praktischerweise auch sehr klein ist) für den Arduino lautet ESP8266, auf Ebay bekommt man welche für << 2€ inklusive Versand aus China 😄.

ABER: Die sind schon deutlich unübersichtlicher zu verwenden! Es gibt aktuell fast zwanzig verschiedene Versionen (plus Abversionen), und sie erfordern 3,3V, während die meisten (gängigen) Arduinos auf 5V basieren. Sie sind nicht mal originär für den Arduino, sondern standalone Bausteine! Es gibt Adapter, Anleitungen, etc.; man muss sich halt dieser Komplexität bewusst sein. Außerdem vermeidet man zwar das (erneute) Stellen der Uhrzeit, ist aber abhängig von genau diesem einen WLAN mit genau diesem Passwort.

DCF77

DCF77 ist das kluge Wort für eine Funkuhr. Es gibt entsprechende Module bei Pollin, Reichelt, Conrad, ELV, … (hier ein Vergleich), leider nicht aus China 🙃. Ich habe von früher noch den hier, der kann auch 5V. Das Auslesen ist nicht trivial, dafür ist man nur so wirklich autark.

Was heißt also “nicht trivial”? Nun,

  • das Signal an sich wird sekundenweise binär übertragen, aber für die Dekodierung gibt es Libraries (aktuell drei offizielle). Man benötigt mindestens eine volle Minute, bis man ein mal alle nötigen Bits empfangen hat – und das unter Idealbedingungen!
  • die verschiedenen Module unterstützen unterschiedliche Spannungen, was man bei der Planung berücksichtigen muss.
  • um ein sekundenbasiertes Signal zuverlässig zu verarbeiten, muss man zuverlässig eine Sekunde erkennen. Dazu benötigt man einen Arduino mit Quarz (halt wie in einer Uhr), die meisten haben aber keinen. Den Pro Mini gab es in einer 5V-Version (damit fällt das Modul von Pollin schon mal raus) mit Quarz, aber den Pro Mini gibt es offiziell nicht mehr… auf Ebay gibt es aber noch welche für ebenfalls deutlich unter 2€ aus China.
  • die Module sind grundsätzlich störanfällig; die Antenne sollte waagerecht ausgerichtet sein, die Leitungen kurz, Röhrenbildschirme weit weg, Z-Dioden helfen. Das macht das Auslesen des Signals nicht schneller, und das Debugging entsprechend langwierig. Im o.g. Vergleich wurden bis zu 20 Minuten gemessen, bis das Signal erkannt war!

PS: Die Library von Udo Klein rühmt sich, besonders widerstandsfähig gegen Störsignale zu sein.

hf!

Leave a Reply

Your email address will not be published. Required fields are marked *

Ich erkläre mich damit einverstanden, dass alle eingegebenen Daten und meine IP-Adresse zum Zweck der Spamvermeidung durch das Programm Akismet in den USA überprüft und gespeichert werden. Weitere Informationen zu Akismet und Widerrufsmöglichkeiten.