Beschreibung
DS1302 RTC (Real Time Clock) Modul mit Speicher, Batterie und Kalender – Vollständige Beschreibung und Anleitung für die Verwendung mit Arduino
🕒 Beschreibung des DS1302 RTC Moduls
Das DS1302 ist ein Real Time Clock (RTC) Modul das es ermöglicht, die Uhrzeit und das Kalenderdatum genau zu verfolgen auch ohne Stromversorgung, dank einer auch ohne Stromversorgung, dank einer (typischerweise Typ CR2032). Es wird sehr häufig in Projekten mit Arduino, ESP8266, ESP32, Raspberry Pi und anderen Mikrocontrollern verwendet. Technische Spezifikationen
Spezifikation
| Details | RTC-Chip |
|---|---|
| DS1302 | DS1302 |
| Energieversorgung | 3.3V – 5.5V (kompatibel mit Arduino) |
| Kommunikation | Serial mit 3 Leitungen (SCLK, I/O, CE) |
| Tamponebatterie | Unterstützung für CR2032 (nicht immer enthalten) |
| RAM | 31 Byte statische RAM für allgemeinen Gebrauch |
| Genauigkeit | ±1 Minute/Monat typisch (ohne Kalibrierung) |
| Datumsbereich | 01/01/1900 – 31/12/2099 |
| Funktionen | Uhr, Kalender, RAM, Batterie-Backup |
🔌 Verbindung DS1302 mit Arduino
| DS1302-Pins | Verbindung zu Arduino |
|---|---|
| VCC | 5V (oder 3.3V) |
| GND | GND |
| CLK (SCLK) | D6 |
| I/O | D7 |
| CE (RST) | D8 |
📦 Empfohlene Bibliothek für Arduino
Um den DS1302-Modul mit Arduino zu verwenden, kannst du die Bibliothek installieren „DS1302RTC“ geschrieben von Paul Stoffregen, die das Lesen/Schreiben der Uhr vereinfacht.
🔧 Installation der Bibliothek
- Öffne den Arduino IDE
- Gehe zu Sketch > Bibliothek einbinden > Bibliotheken verwalten
- Suche DS1302RTC und installiere die Bibliothek von Paul Stoffregen
🧪 Beispielskod für die Einstellung und das Lesen von Datum/Uhrzeit
#include <DS1302RTC.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Streaming.h>
// Pin collegati al modulo DS1302: CE, I/O, CLK
DS1302RTC rtc(8, 7, 6);
void setup() {
Serial.begin(9600);
// Imposta l’orario solo la prima volta
// Imposta: Anno, Mese, Giorno, Ora, Minuti, Secondi
tmElements_t tm;
tm.Year = CalendarYrToTm(2025); // Anno - 1970
tm.Month = 7;
tm.Day = 28;
tm.Hour = 15;
tm.Minute = 45;
tm.Second = 0;
rtc.write(tm);
Serial.println("Ora impostata!");
}
void loop() {
tmElements_t tm;
if (rtc.read(tm)) {
Serial << "Data: " << tm.Day << "/" << tm.Month << "/" << tmYearToCalendar(tm.Year);
Serial << " - Ora: " << tm.Hour << ":" << tm.Minute << ":" << tm.Second << endl;
} else {
Serial.println("Errore lettura RTC");
}
delay(1000);
}
📘 Nützliche Funktionen der Bibliothek
| Funktion | Beschreibung |
|---|---|
rtc.read(tm) |
Liest das Datum und die Uhrzeit vom Modul |
rtc.write(tm) |
Setzt das Datum und die Uhrzeit |
tm.Year, tm.Month |
Zugriff auf einzelne Elemente des Datums und der Uhrzeit |
tmHour, tmMinute |
Direkter Zugriff auf Uhrzeit/Minuten |
CalendarYrToTm(anno) |
Konvertierung von Kalenderjahr in Basisjahr 1970 |
tmYearToCalendar(tm) |
Umgekehrte Konvertierung (nützlich für Druck) |
⚠️ Praktische Tipps
- Setze die Uhrzeit nicht bei jedem Start: der Code zum Setzen der Uhrzeit sollte nur einmal ausgeführt werden. Danach kommentiere ihn aus.
- Überprüfe die Batterie: wenn die Uhrzeit auf Null gesetzt wird, ist die Batterie CR2032 entladen oder nicht vorhanden.
- Verkehre nicht die Pins: falsche Verbindungen führen zu falschen Lesungen oder fehlgeschlagenen Kommunikationen.
- Die Genauigkeit des DS1302 ist für allgemeinen Gebrauch gut, aber für kritische Anwendungen ist es besser, den zu verwenden DS3231 (mit einem temperaturkompensierten Oszillator).
🎯 Typische Anwendungen
- Digitale Uhren mit Anzeige (LCD, OLED, 7-Segment)
- Daten protokollieren mit Zeitstempel (z.B. auf SD-Karten)
- Wecker und automatische Timer
- Domotische Projekte mit geplanten Ereignissen
- Timer für Bewässerungssysteme
🔄 Alternativen
| RTC-Modul | Genauigkeit | Batterie | Kommunikation | Anmerkungen |
|---|---|---|---|---|
| DS1302 | Durchschnitt | CR2032 | 3 Leitungen (Serielles Interface) | Wirtschaftlich, Basis |
| DS1307 | Gut | CR2032 | I2C | Am weitesten verbreitet |
| DS3231 | Hoch | Inklusive | I2C | Hochpräzise, temperaturkompensiert |
📌 Fazit
Der RTC-Modul DS1302 ist eine ausgezeichnete Wahl für Arduino-Projekte, bei denen es erforderlich ist, die Zeit auch dann zu verfolgen, wenn der Mikrocontroller ausgeschaltet ist. Es ist wirtschaftlich, einfach zu bedienen und gut dokumentiert, obwohl es heute oft durch das präziseren DS3231.
Perfekt! Ich gebe dir zwei praktische Erweiterungen für das Modul RTC-Modul DS1302 mit Arduino:
🔹 1. Anzeigen von Datum/Uhrzeit auf Display OLED I2C (128×64)
🧰 notwendige Komponenten:
- Arduino UNO / Nano
- Modul RTC DS1302
- Display OLED 128×64 (Treiber SSD1306, Interface I2C)
- Steckbrückenkabel
🔧 Verbindungsplan
| Komponente | Pin | Arduino |
|---|---|---|
| DS1302 | VCC, GND | 5V, GND |
| CLK | D6 | |
| I/O | D7 | |
| CE (RST) | D8 | |
| OLED | VCC, GND | 5V, GND |
| SDA | A4 | |
| SCL | A5 |
📦 Bibliotheken zu installieren:
- DS1302RTC – Paul Stoffregen
- Adafruit GFX Library
- Adafruit SSD1306
Öffne das Arduino IDE → Bibliothek-Manager → Suche und installiere alle drei.
💡 Beispielcode mit OLED:
#include <DS1302RTC.h>
#include <TimeLib.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
DS1302RTC rtc(8, 7, 6); // CE, IO, SCLK
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
}
void loop() {
tmElements_t tm;
if (rtc.read(tm)) {
display.clearDisplay();
display.setCursor(0, 0);
display.printf("%02d:%02d:%02dn", tm.Hour, tm.Minute, tm.Second);
display.setTextSize(1);
display.setCursor(0, 40);
display.printf("%02d/%02d/%04d", tm.Day, tm.Month, tmYearToCalendar(tm.Year));
display.display();
} else {
display.clearDisplay();
display.setCursor(0, 0);
display.println("RTC ERROR");
display.display();
}
delay(1000);
}
🔹 2. Logger auf SD-Karte mit Zeitstempel von DS1302
🧰 Komponenten:
- Arduino UNO / Nano
- RTC DS1302
- SD-Kartenleser (mit Logikadapter falls notwendig)
- MicroSD formatiert FAT32
🔧 SD-Karte Anschluss
| SD-Kartenleser | Arduino |
|---|---|
| CS | D10 |
| MOSI | D11 |
| MISO | D12 |
| SCK | D13 |
| VCC, GND | 5V, GND |
📦 Bibliotheken zu verwenden:
- SD
- DS1302RTC
- TimeLib
💡 Beispielcode für Data Logging:
#include <SPI.h>
#include <SD.h>
#include <DS1302RTC.h>
#include <TimeLib.h>
const int chipSelect = 10;
DS1302RTC rtc(8, 7, 6); // CE, IO, SCLK
void setup() {
Serial.begin(9600);
SD.begin(chipSelect);
if (!SD.begin(chipSelect)) {
Serial.println("SD init failed!");
return;
}
Serial.println("SD OK");
}
void loop() {
tmElements_t tm;
if (rtc.read(tm)) {
File logFile = SD.open("log.txt", FILE_WRITE);
if (logFile) {
logFile.print(tmYearToCalendar(tm.Year));
logFile.print("/");
logFile.print(tm.Month);
logFile.print("/");
logFile.print(tm.Day);
logFile.print(" ");
logFile.print(tm.Hour);
logFile.print(":");
logFile.print(tm.Minute);
logFile.print(":");
logFile.println(tm.Second);
logFile.close();
Serial.println("Dati scritti su SD.");
} else {
Serial.println("Errore apertura log.txt");
}
}
delay(5000); // Log ogni 5 secondi
}
✅ Zusätzliche Tipps:
- Du kannst kombinieren OLED + SD + DS1302 im selben Projekt, wenn es keine Pin-Konflikte gibt.
- Du kannst auch loggen Sensorwerte (z.B. Temperatur, Luftfeuchtigkeit) zu der Zeichenkette hinzufügen
logFile.print(). - Denk daran die SD-Karte in FAT32 zu formatieren und einfache Dateien zu verwenden
.txt.
Tutorial: Wie man den DS1302 RTC Modul verwendet
Das DS1302 Modul ist ein Real-Time-Clock (RTC), das die Uhrzeit und das Kalenderdatum auch ohne Stromversorgung des Arduino-Betriebs behält. Ideal für Projekte, die eine hohe Zeitgenauigkeit erfordern.
Was du brauchst
- Arduino Uno oder kompatibel
- USB-Kabel
- DS1302 RTC Modul
Schritte
- VCC an 5V auf dem Arduino anschließen
- GND an die Masse auf dem Arduino anschließen
- I/O an den digitalen Pin 7 des Arduino (oder an einen beliebigen anderen Pin) anschließen
- CE an den digitalen Pin 8 des Arduino (oder an einen beliebigen anderen Pin) anschließen
- RST an den digitalen Pin 9 des Arduino (oder an einen beliebigen anderen Pin) anschließen
- Die DS1302 RTC Bibliothek in der Arduino IDE installieren
- Den Beispiel-Sketch, der von der Bibliothek bereitgestellt wird, zu laden
- Stellen Sie sicher, dass Uhrzeit und Datum korrekt sind
Beispielcode
include <DS1302.h>
DS1302 rtc(7, 8, 9);
time_t now;
void setup() {
Serial.begin(9600);
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // Imposta l'ora e la data corrente
}
void loop() {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
printDigits(now.month());
printDigits(now.day());
printDigits(now.hour());
printDigits(now.minute());
printDigits(now.second());
Serial.println();
delay(1000); // Aggiorna ogni secondo
}
void printDigits(int digits) {
Serial.print(digits / 10);
Serial.print(digits % 10);
}
Mini-Projekt
Erstellen Sie eine digitale Uhr, die die Uhrzeit und das Datum auf dem seriellen Monitor von Arduino anzeigt. Fügen Sie eine Funktion hinzu, um Uhrzeit und Datum manuell einzustellen.
Häufige Fehler
- Stellen Sie keine Verbindungen vor dem Laden des Sketches überprüfen
- Stellen Sie die Uhr ohne eine Batterie ein, was dazu führen kann, dass die zeitlichen Informationen verloren gehen, wenn Arduino ausgeschaltet wird
- Verwenden Sie einen nicht kompatiblen Pin für I/O, CE oder RST
- Ignorieren Sie die Konfiguration im Datenblatt des Moduls
Empfohlenes Zubehör
- LCD-Anzeigemodul 16×2
- Batterie CR1220 (für die Stromversorgung des RTC)
- Elektronischer Reloggiator
- LED-Matrix-Anzeige
Häufige Fragen
Wie kann ich die Uhrzeit manuell einstellen?
Verwenden Sie die Methode ‚adjust()‘ der DS1302-Bibliothek, um Uhrzeit und Datum manuell einzustellen.
Welche Pins von Arduino kann das DS1302-Modul verwenden?
Es kann jeden digitalen Pin von Arduino verwenden, stellen Sie aber sicher, dass die Verbindungen korrekt sind.










Rezensionen
Es gibt noch keine Rezensionen.