Da Arduinos nicht direkt über die Möglichkeit verfügen die aktuelle Zeit zu speichern, erweitern wir heute unseren Arduino mit einem kleinen DS1307-RTC-Board (wobei RTC die englische Abkürzung für Real-Time-Clock ist – also auf deutsch: Echtzeituhr), welches sich batteriegepuffert, sowohl die Zeit als auch das Datum „merken und mitzählen“ kann.
Dazu verbinden wir mit ein paar Kabeln den Arduino mit dem Echtzeituhrmodul wie in folgendem Schaltplan:
mit der Maus über Elemente fahren (oder im Touch-Modus: Elemente antippen)...
Arduino (Nano, Uno) |
Arduino (Mega, Mega 2560) |
Tiny RTC-Modul DS1307 |
5V (VCC) | 5V (VCC) | VCC |
GND | GND | GND |
A4 (SDA) | D20 (SDA) | SDA |
A5 (SCL) | D21 (SCL) | SCL |
Sourcecode (Sketch):
Zusätzlich müssen wir noch die RTClib von jcw installieren und laden danach noch folgenden Code auf den Arduino:
// Tiny RTC (DS1307) #include <Wire.h> // I2C-Bibliothek einbinden #include "RTClib.h" // RTC-Bibliothek einbinden RTC_DS1307 RTC; // RTC Modul void setup(void) { // Initialisiere I2C Wire.begin(); // Initialisiere RTC RTC.begin(); // Serielle Ausgabe starten Serial.begin(9600); // Begrüßungstext auf seriellem Monitor ausgeben Serial.println("Starte Datum und Zeit - blog.simtronyx.de"); // Prüfen ob RTC läuft if (! RTC.isrunning()) { // Aktuelles Datum und Zeit setzen, falls die Uhr noch nicht läuft RTC.adjust(DateTime(__DATE__, __TIME__)); Serial.println("Echtzeituhr wurde gestartet und auf Systemzeit gesetzt."); } else Serial.println("Echtzeituhr laeuft bereits."); } void loop(){ DateTime now=RTC.now(); // aktuelle Zeit abrufen show_time_and_date(now); // Datum und Uhrzeit ausgeben delay(30000); // 30 Sekunden warten bis zur nächsten Ausgabe } // Wochentag ermitteln String get_day_of_week(uint8_t dow){ String dows=" "; switch(dow){ case 0: dows="So"; break; case 1: dows="Mo"; break; case 2: dows="Di"; break; case 3: dows="Mi"; break; case 4: dows="Do"; break; case 5: dows="Fr"; break; case 6: dows="Sa"; break; } return dows; } // Datum und Uhrzeit ausgeben void show_time_and_date(DateTime datetime){ // Wochentag, Tag.Monat.Jahr Serial.print(get_day_of_week(datetime.dayOfWeek())); Serial.print(", "); if(datetime.day()<10)Serial.print(0); Serial.print(datetime.day(),DEC); Serial.print("."); if(datetime.month()<10)Serial.print(0); Serial.print(datetime.month(),DEC); Serial.print("."); Serial.println(datetime.year(),DEC); // Stunde:Minute:Sekunde if(datetime.hour()<10)Serial.print(0); Serial.print(datetime.hour(),DEC); Serial.print(":"); if(datetime.minute()<10)Serial.print(0); Serial.print(datetime.minute(),DEC); Serial.print(":"); if(datetime.second()<10)Serial.print(0); Serial.println(datetime.second(),DEC); }
Anschliessend starten wir den seriellen Monitor (mit 9600 Baud Geschwindigkeit) und sollten dann etwa folgende Ausgabe bekommen:

DS1307-Echtzeituhr – Serieller Monitor
Jetzt ist es uns möglich auch nach einem Stromausfall (oder nach dem Trennen des Arduinos von der Stromversorgung und einem späteren wieder Anschliessen) trotzdem noch die genaue und aktuelle Zeit, als auch das Datum, anzuzeigen und zu verwenden. Sollte die Uhr (was schon mal passieren kann) nach einiger Zeit falsch gehen, so müssen wir leider die Batterie kurzzeitig entfernen, wieder einsetzen und dann den Sketch erneut aufspielen.
Weiterführende Projekte mit dem DS1307:
- Einfache (Raum-)Klimaüberwachung mit einem Arduino
- Tiny RTC DS1307 Echtzeituhr mit zusätzlichem Temperatursensor DS18B20
Bauteile (Bezugsquellen):
eBay: | Arduino Uno Breadboard Breadboard Kabel DS1307 Tiny RTC Arduino |
Amazon: | Breadboard Breadboard Kabel DS1307 Tiny RTC Arduino |
Gut?











