DS1307 RTC am Arduino

DS1307 RTC am Arduino Titelbild

Wie viel Uhr ist es? Diese Frage gehört wohl zu den häufigsten im Leben und lässt sich in der Regel mit einem kurzen Blick auf eine Uhr klären. Aber woher weiß die Uhr, wie viel Uhr es gerade ist? Unser Smartphone bekommt z.B.: seine Uhrzeit übers Internet während andere sich diese über aktuell zusenden lassen. Wenn wir jetzt die Aktuelle Uhrzeit in Projekt von uns brauchen wäre das Internet eine Möglichkeit das ist für den Raspberry auch Praktisch und Möglich aber für den Arduino schon wieder relativ umständlich. Wir könnten zwar beim Arduino die Uhrzeit per Hand speichern und dann einfach immer weiter zählen, hätten da aber da aber die Problem das ohne eine Stromverbindung der Arduino nicht weiterzählen würde und dafür bei längeren Zeiträumen auch schnell ungenau wird. Eine Technische Lösung ist dabei die sogenannte RTC das steht für Real-Time-Clock oder auch Echtzeituhr. Dieses Bauteil besteht aus einem Chip, einem Taktgeber und einer Baterrie. Wenn dort die Uhrzeit einmal eingestellt wird, kann die aktuelle Uhrzeit jederzeit abgerufen werden. Durch die eingesetzte Batterie verliert das RTC kann immer weitergezählt werden. Dieses Weiterzählen übernimmt dabei der Taktgeber und ist so sehr genau.

Beim DS1307 handelt es sich um solch ein RTC Modul, diese kann einfach über I2C an den Arduino angeschlossen werden und überträgt dann die aktuelle Uhrzeit. Es gibt auch noch die Möglichkeit die RTC nachträglich richtig zu stellen.

Kurz gesagt funktioniert das I2C Kommunikationsprotokoll so, dass es einen Meister und diverse Empfänger gibt. Jeder Empfänger hat dabei eine eigene Adresse und diese Adresse kann es auch nur einmal geben. Sie wird gebraucht, weil auf der Datenleitung (SDA) immer nur einer Sprechen kann. Auf der SCL Leitung, auch Clock genannt, wird genau getimt, wer wann sprechen darf.

Bibliothek einrichten

Die .Zip Datei kannst du dir hier herunterladen:

https://github.com/coding-world/rtclib/archive/master.zip

Bevor du die Bibliothek benutzen kannst, musst du diese noch in der Arduino IDE hinzufügen. Das geht unter: Sketch-> Bibliothek Einbinden -> .Zip-Bibliothek hinzufügen Wenn du darauf klickst sollte öffnet sich ein neues Fenster. In diesem kannst du dann .zip Datei auswählen und mit dem Klicken auf den "OK" Button hinzufügen. Du wirst die Datei vermutlich im Download Ordner mit dem Namen rtclib-master.zip finden.

DS1307 Anschließen

Arduino DS1307
5V 5V
GND GND
A4 (SDA) SDA
A5 (SCL) SCL

Wenn du jetzt den Seriellen Monitor öffnest, siehst du die Eingaben von dem Arduino.

Schritt für Schritt erklärt

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

void setup() {
  Wire.begin();
  RTC.begin();
  Serial.begin(9600);
  if (! RTC.isrunning()) {
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
  else Serial.println("Echtzeituhr laeuft bereits.");
}

void loop() {
  DateTime uhrzeit=RTC.now();

  Serial.println("Uhrzeit: ");
  Serial.print(uhrzeit.day(),DEC);
  Serial.print(".");
  Serial.print(uhrzeit.month(),DEC);
  Serial.print(".");
  Serial.println(uhrzeit.year(),DEC);

  Serial.print(uhrzeit.hour(),DEC);
  Serial.print(":");
  Serial.print(uhrzeit.minute(),DEC);
  Serial.print(":");
  Serial.println(uhrzeit.second(),DEC);
  delay(1000);
}

So sollte das den aussehen: RTC DS1307 Serieller Monitor Arduino

Schritt für Schritt

In den ersten beiden Zeilen binden wir die Bibliotheken ein, die für das Programm brauchen. Die Wire Bibliothek ist eine Standardbibliothek der Arduino IDE und deswegen schon installiert und wird auch für die I2C Komunikation gebraucht. Die RTClib Bibliothek haben wir im vorherigen Schritt hinzugefügt.

In Zeile fünf definieren wir eine Variable mit dem RTC vom Typ RTC_DS1307. Diese brauchen wir später um mit der RTC zu arbeiten.

In der setup() Funktion werden zunächst die einzelnen Bibliotheken gestartet. In Zeile 10 bis 13 wird kontrolliert ob die Verbindung zur RTC richtig aufgebaut wurde. Wenn das der Fall ist wird in Zeile 13 eine Nachricht über die Serielle Ausgabe ausgegeben.

In der loop() Schleife fangen wir dann an mit der aktuellen Uhrzeit zu arbeiten. In Zeile 17 wird eine Variable mit dem Namen uhrzeit erstellt welche vom Typ DateTime ist. Mit diesem Variablen Typen können wir vereinfacht mit Uhrzeiten arbeiten. Die Uhrzeit wird aufgerufen über RTC.now(). Mit dieser Funktion in der Bibliothek wird die aktuelle Uhrzeit von dem RTC Bauteil aufgerufen.

Im nächsten Schritt werden die Verschiedenen Zeiteinheiten abgerufen. Das passiert einfach mit: nameDerVariable.funktion(). Das können wir so machen weil der Typ DateTime schon eingebaute Funktionen hat um uns das Leben einfacher zu machen.

Funktion Aufruf
Tag im Monat (1-31) .day()
Monat im Jahr (1-12) .month()
Jahr (z.B.: 2017) .year()
Stunde (0-24) .hour()
Minute (0-60) .minute()
Sekunde (0-60) .second()

Fehler

Dieser Fehler kann Auftreteten wenn die Kabel zwischen der RTC und dem Arduino nicht richtig verbunden wurden. Fehler beim Anschließen DS1307

Dieser Fehler zeit an das keine Bibliothek unter dem angegebenen Namen gefunden wurde. Hier solltest du unbedingt nochmal das Installieren der Bibliothek kontrollieren und gegebenen falls wiederhohlen. Keine eingebundene Bibliothek

Noch Fragen oder Feedback?

Bevor du eine Frage stellen kannst musst du dich zuerst Anmelden oder Regestrieren!