So baust du dir deine eigene Arduino Real Time Clock

So baust du dir deine eigene Arduino Real Time Clock

Arduino, Audio / Sound, Dev. Boards
27 Mai 2021

Bei verschiedenen Maker-Projekten, aber auch bei diversen Haushaltsgeräten wie Mikrowellen und Heizungen kann es notwendig sein, einen Zeitmesser einzubeziehen. Vor allem wenn es sich um ein System mit zeitgesteuerter Elektronik handelt, ist eine solche Vorrichtung unabdingbar. Real Time Clocks (kurz: RTC) gelten als ideale Lösung für diesen Zweck. Mit RTCs kannst du dir ganz einfach die aktuelle Uhrzeit auslesen lassen, ohne dass du auf eine konstante Stromzufuhr angewiesen bist. Sobald die Stromversorgung unterbrochen wird, springt stattdessen eine kleine Bufferbatterie in die Bresche, die dafür sorgt, dass die Uhr immer weiterläuft. Und das Beste ist: Mit einem Arduino Uno und einem DS3231 Real Time Clock Modul lässt sich eine Echtzeituhr im Handumdrehen nachbauen. Wir zeigen dir, wie es geht und was es zu beachten gibt.

Das benötigst du für dein Arduino Real Time Clock-Projekt

WARENKORB

Alle für dieses Projekt notwendigen Artikel (außer Lötkolben) landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

Schritt-für-Schritt-Anleitung

  1. Zuallererst gilt es, die Schaltung korrekt aufzubauen. Die folgende Abbildung soll dir dabei helfen, deinen Arduino ordnungsgemäß mit dem RTC-Modul und dem LED-Display zu verbinden.
Arduino Real Time Clock Schaltung / Circuit

Arduino Pins DS3231 Pins

A4 → SDA

A5 → (SCK)SCL

Arduino Pins TM1637 Display Pins

2 → CLK

3 → DIO

  1. Als nächstes installierst du die beiden Bibliotheken. Dazu navigierst du zu „Sketch“, wählst „Bibliothek einbinden“ und danach „Bibliotheken verwalten“. Gib anschließend rechts oben „RTClib“ ein und klicke zuletzt auf „Installieren“. Wiederhole den Vorgang mit dem Suchbegriff „TM1637“, um auch die zweite Bibliothek zu installieren.
Arduino IDE Bibliotheken einbinden
Arduino IDE Bibliotheken einbinden
  1. Im nächsten Schritt öffnest du mit deiner Arduino IDE den Code und gibst das aktuelle Datum und die aktuelle Uhrzeit an. Dabei gilt das Format Jahr/Monat/Tag bzw. Stunde/Minute/Sekunde.
Arduino Real Time Clock Code anpassungen
  1. Lade nun den Code hoch, indem du zu „Werkzeuge“ navigierst und das Board mit der Bezeichnung „Arduino Uno“ sowie den dazugehörigen Port („COM4 Arduino Uno“) auswählst.
Arduino Real Time Clock Code upload
#include "RTClib.h"
#include <TM1637Display.h>

// Define the connections pins:
#define CLK 2
#define DIO 3

// Create rtc and display object:
RTC_DS3231 rtc;
TM1637Display display = TM1637Display(CLK, DIO);

void setup() {
  // Begin serial communication at a baud rate of 9600:
  Serial.begin(9600);
  // Wait for console opening:
  delay(3000);

  // Check if RTC is connected correctly:
  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
  // Check if the RTC lost power and if so, set the time:
  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // The following line sets the RTC to the date & time this sketch was compiled:
    //rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    rtc.adjust(DateTime(2021,5,13,15,28,05));     //2021/5(Month)/16(Day) -- 15H:28H:05S
  }

  // Set the display brightness (0-7):
  display.setBrightness(5);
  // Clear the display:
  display.clear();
}

void loop() {
  // Get current date and time:
  DateTime now = rtc.now();

  // Create time format to display:
  int displaytime = (now.hour() * 100) + now.minute();

  // Print displaytime to the Serial Monitor:
  Serial.println(displaytime);

  // Display the current time in 24 hour format with leading zeros enabled and a center colon:
  display.showNumberDecEx(displaytime, 0b11100000, true);

  // Remove the following lines of code if you want a static instead of a blinking center colon:
  delay(1000);

  display.showNumberDec(displaytime, true); // Prints displaytime without center colon.

  delay(1000);
}

Falls dir das noch nicht genug DIY war, kannst du hier unsere weiteren Arduino Tutorials anschauen.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 4.6 / 5. Anzahl Bewertungen: 9

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Kommentare

  1. Hallo Fabio, habe lange gebraucht um eine für mich brauchbare Uhr-Lösung zu finden. Bin super zurecht gekommen aber natürlich
    mit deiner Zeit. Einfach nur eine neue Zeit einschreiben funktioniert bei mir nicht. Als nächste Batterie raus. Wie du siehst, ich arbeite daran. Jedenfalls finde ich deine Anleitung super.

  2. Hallo Fabio,

    gibt es einen Grund, warum du so viel delays benutzt? Im setup() ist das ja noch in Ordnung, aber gerade im loop() ist das mehr als eine fragwürdige Vorgehensweise.
    Hier sollte man lieber einen Timer nutzen, da ein delay immer genau an der Stelle den Flow anhält. Besser wäre eine if-Schleife, die die Millisekunden abfragt und die Differenz zwischen einer vorgegebenen Ablaufzeit und aktuellem Millisekundenlauf errechnet. Gerade bei Erweiterung vom Code ist das unabdingbar!

    1. Mein Vorschlag: eine Variable mit der Sekunde abspeichern und dann vergleichen, ob die sich geändert hat.
      Es empfiehlt sich sowieso, die Anzeige nicht bei jedem Durchlauf des Loops zu erneuern, sondern nur, wenn sich tatsächlich etwas ändert. Das macht sich bei manchen Displays ansonsten als Flimmern bemerkbar.
      Allerdings hat das Weglassen aller Delays auch seine Tücken.
      Meine Erfahrungen mit meinem RTC (ich benutze allerdings den DS1307) haben gezeigt, dass ein so simpler Loop, der permanent die Zeit abfragt, zu schnell ist für den RTC-Baustein.
      Der liefert dann alle Naselang Unsinn zurück.
      Wenn man also den blinkenden Doppelpunkt und die entsprechenden Zeilen weglässt, sollte man ein kleines Delay (zB 100 ms) drinlassen.

Hinterlasse ein Kommentar

XHTML: Sie können diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>