Uhrzeit und Kalenderfunktionen mit einem Echtzeituhrmodul auf Basis des DS1307 und einem Arduino

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.

Tiny RTC (DS1307) Echtzeituhr - Arduino Uno - blog.simtronyx.de

Tiny RTC (DS1307) Echtzeituhr und ein Arduino Uno

Dazu verbinden wir mit ein paar Kabeln den Arduino mit dem Echtzeituhrmodul wie in folgendem Schaltplan:

Schaltplangröße:

ATMega328P1afbgchdie1j55101015152020252530afbgchdie30j
Für weitere Informationen (z.B. Pinbelegungen von Bauteilen oder genaue Kabelverbindungen)
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
Tiny-RTC-DS1307-Echtzeituhr-Pinout-Rueckseite-blog.simtronyx.de

Tiny RTC Modul – Pinout

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);
}

Download Source Code

Anschliessend starten wir den seriellen Monitor (mit 9600 Baud Geschwindigkeit) und sollten dann etwa folgende Ausgabe bekommen:

DS1307-Echtzeituhr-Serieller-Monitor-blog.simtronyx.de

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:

Bauteile (Bezugsquellen):

eBay: Arduino Uno
Breadboard
Breadboard Kabel
DS1307
Tiny RTC Arduino
Amazon: Arduino Uno
Breadboard
Breadboard Kabel
DS1307
Tiny RTC Arduino

Gut?

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail