RTC-Modul

Lese­zeit: 4 Minu­ten

Der Ardui­no kann nur ab dem Zeit­punkt des Ein­schal­tens die Zeit mes­sen. Das aktu­el­le Datum und die Zeit kann nur mit einem RTC-Modul (RealTimeClock) gesetzt und gele­sen wer­den. Beim ers­ten Start muss das aktu­el­le Datum und die aktu­el­le Zeit manu­ell gesetzt wer­den, anschlie­ßend lauft die Zeit mit Hil­fe der Bat­te­rie wei­ter. Außer­dem misst das hier ver­wen­de­te Modul DS3231 zusätz­lich die Temperatur.

Der Schalt­plan:

Benö­tig­te Bibliothek:

Sketch → Biblio­thek ein­bin­den → Biblio­the­ken verwalten

Die Funk­tio­nen der Biblio­thek RTC­Lib:
rtc -> Name des Moduls
aktu­ell -> Name der über rtc​.now() ermit­tel­ten Zeit

Funk­tio­nen der Biblio­thek RTC­lib Adafruit

Schlüs­sel­wortAnzeige/Parameter
adjust(DateTime(Jahr Monat, Tag, Stun­de, Minu­te, Sekunde)Bei­spiel:
rtc.adjust(DateTime(2022, 12, 13, 13, 31, 30));
now()aktu­el­le Zeit holen
day­OfT­he­Week()Num­mer des Wochentages
0 = Sonntag
1 = Montag
. . .
6 = Samstag
day()Tag
month()Monat
1 = Januar
2 = Februar
...
12 = Dezember
year()Jahr
hour()Stun­de
minu­te())Minu­te
second())Sekun­de
Uhr­zeit als Array definieren:
char Zeit[] = "Uhr­zeit: hh:mm:ss"
print(aktuell.toString(Zeit))
hh = Stunden
mm = Minuten
ss = Sekunden
Datum als Array definieren:
char Datum[] = "DD.MM.YYYY"
print(aktuell.toString(Datum))
DD = Tag
MM = Monat
YYYY = 4-stel­li­ges Jahr
get­Tem­pe­ra­tu­re()Tem­pe­ra­tur ermitteln

Bei­spiel: Datum, Zeit und Tem­pe­ra­tur im Seri­el­len Moni­tor anzeigen

Das dazu­ge­hö­ri­ge Programm:

// benötigte Bibliothek einbinden
# include <RTClib.h>
// Name des RTC-Moduls (rtc)
RTC_DS3231 rtc;
void setup()
{
  // RTC-Modul starten
  rtc.begin();
  Serial.begin(9600);
  /*
    wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
    Jahr, Monat, Tag, Stunde, Minute, Sekunde
    Beispiel:  2022 August 31. 10 Uhr 30 Minuten 30 Sekunden
    rtc.adjust(DateTime(2022, 8, 31, 10, 31, 30));
 */
}

void loop()
{
  // rtc.now() -> aktuelle Zeit holen
  DateTime aktuell = rtc.now();
  /*
    Datumsformat festlegen
    DD -> Tag mit führender 0
    MM -> Monat mit führender 0
    YYYY -> vollständige Angabe des Jahres
  */
  char Datum[] = "DD.MM.YYYY ";

  // Datum in Zeichenkette (String) umwandeln und anzeigen
  Serial.print(aktuell.toString(Datum));

  // Format der Zeitangabe festlegen
  char Zeit[] = "hh:mm:ss";

  // Zeitangabe in Zeichenkette (String) umwandeln und anzeigen
  Serial.print(aktuell.toString(Zeit));

  // Temperatur ermitteln
  String Temperatur = String(rtc.getTemperature());

  // Wert wid im angelsächsisches Zahlenformat ermittelt
  // . durch , ersetzen
  Temperatur.replace(".", ",");
  Serial.println(" Temperatur: " + Temperatur + "°C");

  // 1 Sekunde Pause
  delay(1000);
}

Erwei­ter­te Ver­si­on mit Anzei­ge der Namen der Wochen­ta­ge und der Monatsnamen:

Das dazu­ge­hö­ri­ge Programm:

# include <RTClib.h>

// Name des RTC-Moduls
RTC_DS3231 rtc;

void setup()
{
  // RTC-Modul starten
  rtc.begin();
  Serial.begin(9600);

  /*
    wenn Datum und Zeit nicht korrekt -> Datum/Zeit setzen
    Jahr, Monat, Tag, Stunde, Minute, Sekunde
    Beispiel:  2022 August 31. 10 Uhr 30 Minuten 30 Sekunden
    rtc.adjust(DateTime(2022, 8, 31, 10, 31, 30));
 */
}

void loop()
{
  // aktuelle Zeit holen
  DateTime aktuell = rtc.now();

  /*
    Wochentag anzeigen
    0 = Sonntag
    1 = Montag
    ...
    6 = Samstag
  */
  switch (aktuell.dayOfTheWeek())
  {
    case 0:
      Serial.print("Sonntag");
      break;

    case 1:
      Serial.print("Montag");
      break;

    case 2:
      Serial.print("Dienstag");
      break;

    case 3:
      Serial.print("Mittwoch");
      break;

    case 4:
      Serial.print("Donnerstag");
      break;

    case 5:
      Serial.print("Donnerstag");
      break;

    case 6:
      Serial.print("Samstag");
      break;
  }

  // Leerzeichen hinzufügen
  Serial.print(" ");

  // Datum anzeigen
  Serial.print(String(aktuell.day()) + ".");

  /*
    Monatsnamen anzeigen
    1= Januar
    2 = Februar
    ...
    12 = Dezember
  */
  Serial.print(" ");

  switch (aktuell.month())
  {
    case 1:
      Serial.print("Januar");
      break;
    case 2:

      Serial.print("Februar");
      break;
    case 3:
      Serial.print("M\u00e4rz");
      break;

    case 4:
      Serial.print("April");
      break;

    case 5:
      Serial.print("Mai");
      break;

    case 6:
      Serial.print("Juni");
      break;

    case 7:
      Serial.print("Juli");
      break;

    case 8:
      Serial.print("August");
      break;
    case 9:
      Serial.print("September");
      break;

    case 10:
      Serial.print("Oktober");
      break;

    case 11:
      Serial.print("November");
      break;

    case 12:
      Serial.print("Dezember");
      break;
  }

  char Zeit[] = " Uhrzeit: hh:mm:ss";
  Serial.print(aktuell.toString(Zeit));

  // Temperatur ermitteln
  String Temperatur = String(rtc.getTemperature());

  // Anzeige im angelsächsisches Zahlenformat
  // . durch , ersetzen
  Temperatur.replace(".", ",");
  Serial.println(" Temperatur: " + Temperatur + "°C");

  delay(1000);
}

Letzte Aktualisierung: 15. Feb 2023 @ 10:07