Präzise 7-Segment-Uhr mit Arduino Pro Mini & DS1302 RTC – Selbstbau
Benötigte Bauteile
| Arduino Pro Mini 328 – 5 V / 16 MHz (SparkFun) | 1 | |
| DS1302 Echtzeituhr-Modul (RTC) | IC-Sockel & Quarz vom Modul ablösen & auf Platine übernehmen | 1 |
| CR1220 Knopfzelle + Halter | z. B. „5pcs Black Housing CR1220 CR1225 Button Cell Battery Socket Holder BS-1220-1“ | 1 |
| Keramik-Kondensator 0,1 µF 1206 SMD | 1 | |
| Keramik-Kondensator 10 µF 1206 SMD | 1 | |
| Taster 12 mm (Top Actuated) | Mit Tastenkappen | 4 |
| DC-DC Step-Down Converter 3 A (Mini) | Für 12 V → 5 V | 1 |
| 0,28″ Common Cathode 4-stellige 7-Segment-Anzeige | 36 | |
| MAX7219 DIP IC | LED-Treiber | 18 |
| Summer (Buzzer) | 1 | |
| Maschinen-Stiftleisten (Male & Female Header) | Ca. 8 Streifen à 40 Pins je Sorte | 1 Set |
| DC-Strombuchse 5,5 × 2,1 mm | Panel Mount, für 12 V Netzteil | 1 |
Benötigte Werkzeuge
- Lötkolben (feine Spitze, 0,5 mm Lötzinn)
- 3D-Drucker (für Gehäuse)
Software
- Arduino IDE
- Bibliothek: MD_MAX72XX (über Bibliotheksverwalter installieren)
Projektbeschreibung
Inspiriert von einer großen 7-Segment-Uhr auf Hackaday.io (von Frugha, 0,56″ Displays) entstand diese kompakte Version mit 0,28″ Displays – nur ein Viertel der Größe. Die Software wurde komplett neu geschrieben und um Wecker, Konfigurationsmenü (Zeit, Datum, Weckzeit, Melodie, Helligkeit, Datumsformat, Schriftart) erweitert.
Bedienkonzept – 4 Tasten
- SELECT (oben): Öffnet Konfigurationsmenü / wechselt zwischen Menüpunkten (Zeit, Datum, Alarm, Melodie, Helligkeit, Datumsformat, Uhr).
- ENTER (2. von oben): Wählt Menüpunkt zum Bearbeiten / wechselt zwischen Einstellungen innerhalb eines Punkts (aktive Einstellung blinkt).
- UP / DOWN (unten): Ändern der blinkenden Einstellung.
Datumsanzeige
Drückt man ENTER im Normalbetrieb, wird das Datum 5 Sekunden lang angezeigt. Im Menü „Datumsformat“ lässt sich zwischen DD-MM und MM-DD sowie zwischen zwei Schriftarten (quadratisch/schmal) wählen.
Design-Überlegungen
- 4-stellige Displays statt Einzeldisplays → einfachere Platinenlayout.
- MAX7219-Treiber auf separater Platine (Motherboard), da 0,28″ Displays sehr klein sind.
- Verbindung Display-Platinen ↔ Motherboard über maschinelle Stiftleisten (Male/Female) – präzise, steckbar.
- Eagle-Dateien liegen bei (kommerzielle Fertigung oder Selbstbau per Toner-Transfer).
Spalten-Platinen (Column Boards) – 6 Stück nötig
Jede Spaltenplatine hält 6 Stück 4-stellige Displays (insgesamt 36 Displays = 6 Spalten × 6 Displays). Löten: Mittlere Stiftleisten zuerst, dann nach außen arbeiten. Streichholz o. ä. unter die Buchse legen, um Lötzugang zu schaffen. Nach dem Bestücken: Display-Ränder matt schwarz lackieren (verdeckt weiße Kanten bei minimalem Versatz). Jede Spaltenplatine nummerieren (Marker) – erleichtert späteren Einbau in der richtigen Reihenfolge.
MAX7219-Motherboard
Die Segment-/Ziffernzuordnung der MAX7219 wurde nicht hardware-seitig korrekt verdrahtet, sondern das PCB-Layout so einfach wie möglich gehalten. Die Zuordnung wird komplett in Software korrigiert (siehe digitMap[] im Code).
Tipp: Female-Buchsen zuerst auf die Male-Pins der Spaltenplatinen stecken, dann die gesamte Einheit einlöten. So passen die Pins exakt. Beim Ausbau: Nummerierung beachten, damit jede Spalte wieder an ihren Platz kommt.
MPU-Platine (Mikroprozessor-Board)
Enthält Arduino Pro Mini, RTC, Step-Down-Converter, Summer, Taster, Kondensatoren. Die 4 Taster und die zwei SMD-Kondensatoren liegen auf der Rückseite, alle anderen Bauteile vorn. Für flaches Profil: FTDI-Header nicht auf den Pro Mini, sondern direkt auf die PCB gelötet; DTR & VCC per Drahtbrücke nach unten geführt.
Gehäuse (3D-Druck)
- STL-Dateien für Front & Rückseite liegen bei.
- Druck: 0,2 mm Schichthöhe, Brim. Front: Supports (nur Buildplate).
- MAX7219-Motherboard mit Spaltenmodulen schiebt sich von vorne ein. Falls lose: 1–2 Lagen Malerklebeband als Passung.
- MPU-Platine wird hinten per Heißkleber fixiert.
Software & Inbetriebnahme
- Bibliothek MD_MAX72XX in Arduino IDE installieren.
- Test-Sketch
Hardware_Test_V1hochladen – alle Segmente leuchten → Kurzschlüsse / defekte Verdrahtung prüfen. - Bei erfolgreichem Test: Haupt-Sketch
Clock_V4hochladen.
Code-Highlights (Auszug aus Clock_V4.ino)
// Hauptbibliotheken
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <TimeLib.h>
#include <DS1302RTC.h>
#include <EEPROM.h>
#include "button.h"
#include "Tunes.h"
#include "Digits.h"
#define HARDWARE_TYPE MD_MAX72XX::GENERIC_HW
#define MAX_DEVICES 18 // 18 MAX7219
#define LED_CLK 13, LED_DATA 11, LED_CS 10
#define SPEAKER 2
#define SW_UP 3, SW_DOWN 4, SW_ENTER 7, SW_SELECT 9
#define RTC_CLK 5, RTC_IO 6, RTC_CE 8
// EEPROM-Struktur für persistente Einstellungen
struct EEPROM_DATA {
uint32_t magic; // 0x0BAD0DAD
bool alarm; // Wecker an/aus
uint8_t minutes, hours; // Weckzeit
bool format12hr; // 12/24 h
uint8_t brightness; // 0..15
uint8_t tune; // Melodie 0..2
bool formatDmy; // DD-MM vs MM-DD
bool squareFont; // Schriftart Datum
};
// Betriebsmodi: CLOCK, TIME_SET, DATE_SET, ALARM_SET, TUNE_SET, BRIGHT_SET, FORMAT_SET
// Blinklogik im Setup-Menü (SETUP_FLASH_RATE 200 ms)
// Großziffern (6×6 Pixel pro Ziffer) über 18 MAX7219 gemappt
// Kleine/quadratische Ziffern für Datumsanzeige (5×3 / 3×3)
// Wecker-Melodien in Tunes.h (ELISE, RANGE, SUNSHINE)
// PetitFS nicht nötig – Standard-EEPROM & RTC
Dateien im Projekt
Clock_V4.ino– HauptsketchDigits.h– Ziffernmuster (Groß, Klein, Quadrat, ASCII)Tunes.h– Weckmelodien (nur Download)Button.h / Button.cpp– Entprellte Tastenklasse mit Repeat-FunktionHardware_Test_V1.zip– Testsketch (alle Segmente an)- Eagle-Dateien (PCB Layouts) –
eagle_files_KPhUOj6Ezv.zip - STL-Dateien für Gehäuse (Front hoch/niedrig, Rückseite, SIM900-Halter)
Schaltpläne & PCB
- Schema für einen MAX7219 (18× identisch)
- Spaltenplatine: hält 6× 4-stellige Displays (6 Platinen nötig)
- MPU-Platine & Motherboard in Eagle-Format
Tipps & Tricks
- Genauigkeit: DS1302 mit 32,768 kHz Quarz & CR1220 Puffer → Gangabweichung typisch ±2 min/Monat.
- Helligkeit: Per Menü 0–15 einstellbar (PWM über MAX7219 INTENSITY-Register).
- Wecker: Einmalig oder täglich? Code currently implements daily alarm when enabled.
- Erweiterung: DCF77-Empfänger für automatische Zeitsync möglich (freier Pin nötig).
- Stromversorgung: 12 V Netzteil → Step-Down → 5 V für alles. Verbrauch ca. 300–500 mA je nach Helligkeit.
Herstellungsprozess
- Arduino POV-Uhr: Persistence-of-Vision LED-Display selbst bauen
- DIY Arduino Word Clock – Elegante Wortuhr mit RTC & Schieberegistern
- Arduino Echtzeituhr für islamische Gebetszeiten bauen
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Arduino Flip Clock mit 8×8 LED-Matrix – DIY Echtzeituhr-Projekt
- 8×8 LED-Matrix mit Arduino Uno meistern: Schritt-für-Schritt-Anleitung
- eDOT: Präzise Arduino-Uhr & Wetterstation mit IR-Fernbedienung
- Kompaktes Arduino-Radar mit HC-SR04 Ultraschallsensor & 1,8″ Display
- Arduino Echtzeit-Wetteruhr: OLED-Display für Zeit, Datum & Temperatur
- Zuverlässigen Wecker mit DS1302 RTC und Arduino UNO bauen