Arduinouhr mit einem RTC-Modul (Real-Time-Clock) bauen

Ein Nachteil des Arduinos ist, dass das Board nicht in der Lage ist, Auskunft über die aktuelle Uhrzeit zu geben. Trotzdem gibt es Abhilfe: Schon für wenig Geld gibt es sogenannte RTC-Module zu kaufen, die über die I²C-Schnittstelle angeschlossen werden können, um den Arduino um diese Funktion zu erweitern. Ich zeige euch, wie ihr das kostengünstige Modul DS1307 zum Laufen bringt.

Warum hat der Arduino keine integrierte RTC?

Dafür gibt es verschiedene Gründe. Zum einen verbraucht eine RTC viele Hardware- und Softwareressourcen, die dem Board die Arbeit abnehmen. Ressourcen die der Arduino selbst nicht gibt und auch nicht geben soll, denn ein Merkmal des Arduinos ist seine Einfachheit. Deshalb laufen die normalen Arduinos auch ohne USB-Host-Funktion, SD-Karte oder integrierter Grafik mit einem Linuxsystem. Dafür gibt es dann die Highend-Arduinos, wie dem Arduino Yún oder dem Arduino-zertifizierten Intel Galileo. Doch diese Boards sind auch für die Bastler die erhöhte Ansprüche haben. Doch selbst diese Boards haben keine RTC, weil diese Funktion schlicht unnötig ist, und eben über Module und Shields verwirklicht werden kann.

Wie funktioniert das RTC-Modul?

Das RTC-Modul besteht grob gesagt aus einem Quarz (silbener Zylinder mit zwei Pins), einem IC und einer Knopfzellenbatterie. Der Quarz gibt der Schaltung den eigentlichen Takt vor, der IC übernimmt das Rechnen, Zählen und Speichern, und die Batterie sorgt dafür, dass dieser Prozess nicht unterbrochen wird, und die Zeit auch dann weiterläuft, wenn der Arduino ausgeschaltet ist.

Voraussetzungen

  • Ein Arduinoboard (Ich benutze den Arduino Mega 2560 R1)
  • Das Modul DS1307 (mit bereits verarbeitetem Quarz)
  • Eine Knopfzellenbatterie, falls nicht schon mitgeliefert
  • Vier Jumperkabel

Schritt 1: Das Verdrahten

Diesmal stelle ich wieder meine fritzing-Zeichungen zur Verfügung. Dieses Mal seht ihr zwei Boards in der Steckplatinen- und der Schaltplansicht: Einen Arduino UNO und einen Mega 2560. Der Grund: Das RTC-Modul kommuniziert über die SDA- und SCL-Schnittstellen der Arduinoboards. Diese werden durch bestimmte Pins auf den Boards angesprochen, die jedoch boardspezifisch sind. Beim Arduino UNO, dem populärsten Arduino, ist der Analog-Pin 4 der SDA-Pin und Analog-Pin 5 der SCL-Pin. Beim Mega sind es jedoch die Digital-Pins 20 & 21. Beim Arduino Mega kann man sogar die Aufschrift SDA und SCL an diesen Pins lesen. Außerdem hat der Arduino Mega noch zwei extra Pins, mit der Aufschrift SDA und SCL. Sie befinden sich links vom AREF-Pin, der sich links vom Digital-Pin 13 befindet. SCL ist hier links außen, SDA ist quasi der zweite Pin auf der Leiste. Beim Verdrahten können auch diese Pins genutzt werden.

Zusammenfassung:

Arduino Mega: SDA an Digital-Pin 20 und als Extrapin; SCL an Digital-Pin 21 und als Extrapin.
Arduino UNO: SDA an Analog-Pin 4; SCL an Analog-Pin 5

DS1307 RTC-Modul an Arduino - Steckplatinenansicht
Steckplatinenansicht
DS1307 RTC-Modul an Arduino - Schaltplanansicht
Schaltplanansicht

Als Text zusammengefasst:

  • SDA an SDA (Boardspezifisch)
  • SCL an SCL (Boardspezifisch)
  • GND an GND
  • VCC an 5V

Schritt 2: Die Library installieren

Im Netz gibt es viele Sketche, die das RTC-Modul auch ohne Library zum Laufen bringen. Meiner Meinung nach sind diese Sketche allerdings unübersichtlich und kompliziert, sodass eine Erweiterung der Programme, insbesondere für Anfänger, schwierig ist. Deswegen empfehle ich eine Library zu installieren, die einem im Hintergrund die meiste Arbeit nimmt. Ich selber nutze die Library „RTCLib“ die Adafruit auf github.com unter diesem Link zur Verfügung stellt: Link. Einfach auf Link drücken, und die Library mit einem Klick auf „Download Zip“ herunterladen. Die Zip-Datei dann im eigenen Library-Order extrahieren und Ordner ggf. auf RTCLib umbenennen.

Schritt 3: Die Programmierung

Adafruit stellt mit der Library auch Beispiele zur Verfügung, die man über die Arduino-IDE aufrufen kann. Das Beispielskript „ds1307“ stellt einem die Uhr und sendet die aktuelle Uhrzeit über den Seriellen Monitor an den PC. Dazu noch einige Zusatzinfos. Das Beispiel zeigt zwar, wie die Library funktioniert und ist sogar ziemlich übersichtlich – jedoch meiner Meinung nach nicht wirklich praxisnah. Warum sollte man die aktuelle Uhrzeit des Arduinos am PC lesen wollen? Deshalb habe ich mir die Zeit genommen einen eigenen Sketch zu schreiben, als Erweiterung zu dem Beispiel, der Datum und Uhrzeit auf einem LCD-Display anzeigt. Gerne könnt ihr weiter an meinen Skripten schreiben und sie weiter erweitern.

 Download des Sketches und der Library