DIY: Wetterstation - Teil 2: Das Real Time Clock Modul

Posted by Tobias on 2013-11-22 at 10:13 pm

Weiter geht es mit dem Teil 2 meines Arduino Projektes Rund um den Bau einer eigenen Wetterstation. Gestern habe ich bereits ein klein wenig den Hintergrund der Arduinp-Plattform beschreiben und die benötigten Komponenten aufgezählt. In den nächsten Teilen möchte ich zunächst genauer auf die einzelnen Bauteile eingehen, die wir für das Projekt benötigen. In diesem Teil das RTC - Real Time Clock Modul (also die Echtzeituhr).

Das Modul selbst habe ich über Ebay aus China für umgerechnet ungefähr 1,17 Euro gekauft. Wer etwas mehr Geld investiert bekommt das Modul bereits mit fertig aufgelöteten Header-Pins. Ich wollte bewusst keine Header-Pins auf dem Modul, sondern Buchsenleisten, da das besser zu meinen Jumper-Kabeln (männlich-männlich) passt. Bei dem Modul für 1,17 Euro kann man dementsprechend selbst wahlweise Buchen oder Header-Pins anlöten.

Die RTC (Real Time Clock) Modul stellt wie der Name schon sagt eine Echtzeituhr für den Arduino bereit. Die Arduino Entwicklerplatine selbst besitzt zwar einen Timer und kann die Millisekunden seit dem letzten Einschaltvorgang mitzählen, aber eine richtige Uhr, die auch nach Stromverlust weiter läuft, gibt es nicht. Deswegen besitzt das RTC-Model auf der Rückseite auch eine Knopfzelle LIR2032 welche das RTC-Modul mit 3,6V versorgt, wenn dem Modul kein Strom über den Arduino zugeführt wird. Somit ist gewährleistet, dass die Uhrzeit (sofern eingestellt) lange Zeit auch ohne externe Stromquelle weiter läuft. Ähnlich läuft dies auch bei einem Computer - der verliert schließlich auch nicht die aktuelle Uhrzeit, wenn er vom Stromnetz getrennt wird.

Angeschlossen wird das RTC-Modul über den I2C-Bus des Arduino. Diese I2C Schnittstelle ist auf den verschiedenen Arduino Platinen an unterschiedlichen Pins verfügbar. Eine Liste der Pins gibt es unter dem Stichwort "Wire" auf Arduino.cc. Für das Anschließen des RTC-Moduls werden vier Jumper-Kabel benötigt. Je nach dem ob Buchsen oder Header-Pins auf dem RTC-Modul sind männlich-männlich oder männlich-weibliche Jumper-Kabel.

Folgende Pins müssen verbunden werden (am Beispiel eines Arduino Duemilanove):

RTC Pin RTC Pin Beschreibung Arduino Pin Arduino Pin Beschreibung
VCC 5.0 V Spannung 5V 5.0 V Spannung
GND Ground / Erdung GND Ground / Erdung
SCL Serial Clock A5 Analog-In 5
SDA Serial Data A4 Analog-In 4

Um relativ einfach mit dem RTC-Modul zu kommunizieren gibt es eine zusätzliche Library, die in die Arduino IDE (Integrated Development Environment) eingebunden werden kann. Diese Library nennt sich sprechend "Time" und gibt es auf Arduino.cc zum Herunterladen. Nachdem die Library installiert ist muss die Arduino IDE neu gestartet werden. Danach findet sich im Menü unter Datei -> Beispiele -> Time -> Examples -> TimeRTCSet. Mit Hilfe dieses Sketches lässt sich sehr einfach und komfortabel eine neue Zeit und Datum im RTC-Modul programmieren.

Um die aktuelle Zeit und Datum einzurichten muss nun das Sketch TimeRTCSet auf den Arduino mit angeschlossenen RTC-Modul hochgeladen werden. Nach dem erfolgreichen Upload muss der Serial-Monitor in der Arduino IDE mit 9600 Baud gestartet werden.

Über den Serial Monitor kann jetzt die aktuelle Zeit gesetzt werden. Das ist leider nicht ganz so einfach und durchschaubar. Die aktuelle Zeit und Datum muss über einen speziell formatierten Befehl dem Arduino mitgeteilt werden (in Sekunden seit dem 01.01.1970 - Unix Time Stamp). Dieser Zeitstempel lässt sich auf einem Linux-basierten Computer recht einfach in der Kommandozeile abfragen:

TZ_adjust=1;  echo $(($(date +%s)+60*60*$TZ_adjust)

Sollte kein Linux Computer in der Nähe sein so genügt auch ein Besuch von z.B. UnixTimeStamp.com um den aktuellen Unix Timestamp zu bekommen. Dieser (derzeit) 10-stelligen Zahl wird ein "T" vorangestellt. So erhält man dann z.B. den Befehl "T1385150196". Ggf. müssen noch ein paar Sekunden dazu gerechnet werden um die Zeitzone und Sommer- bzw. Winterzeit zu berücksichtigen.

Jedenfalls kann nun dieser generierte Befehl in den Serial Monitor eingegeben werden. Mit Enter wird der Befehl dann an den Arduino und damit an das RTC-Modul über den I2C-Bus gesendet. Jetzt wäre die Zeit gesetzt.

Um die aktuelle Zeit vom RTC-Modul abzufragen kann nun ein weiteres Sketch aus dem Beispielkatalog der Time-Library genutzt werden. Dazu wieder im Menü Datei -> Beispiele -> Time -> Examples -> TimeRTC öffnen. Nach dem Upload den Serial-Monitor mit 9600 Baud öffnen und schon sollte sekündlich die aktuelle Uhrzeit und Datum ausgegeben werden.

Auch nach längerem ausstecken ohne Strom am Arduino sollte das RTC-Modul die Uhrzeit behalten und weiterlaufen. Wird der Arduino wieder angeschlossen und die Uhrzeit über den Serial-Monitor abgefragt, sollte dort die jeweils aktuelle Uhrzeit ausgegeben werden. Wenn nicht, dann ist entweder die Batterie bzw. Stromversorgung des RTC-Moduls nicht gegeben oder das Modul ist defekt (was bei der günstigen Variante aus China durchaus der Fall sein kann - zumindest eher als bei vergleichbarer Ware aus höherwertiger Produktion).

Electronics
Comment on This Post