DCF-Funkuhr mit LED-Display
DCF Radio Clock With 6-Digit LED Display and ARDUINO
Eine Funkuhr bzw. einen Funkwecker kann man überall preisgünstig kaufen. Lohnt dann eigentlich der Selbstbau? Für mich gab es zwei Gründe, dies trotzdem zu tun:
1. Es ist schon einige Jahre her, als ich mich für dieses Projekt entschied. Zu diesem Zeitpunkt waren Funkwecker mit LED-Display nirgends im Handel erhältlich, nur Wecker mit LCD-Display. Diese benötigen (nachts) eine Hindergrundbeleuchtung, die mit einer Taste eingeschaltet werden muss, was ich als ziemlich lästig empfand. Hierzu kommt, dass irgendwann die Batterie soweit entladen ist, dass die Beleuchtung aussteigt (während die Uhr noch wochenlang weiterarbeitet).
Für das LED-Display ist natürlich Netzbetrieb erforderlich, was ich nicht als Nachteil empfinde (die Steckdose ist vorhanden)
2. Zu dieser Zeit hatte ich einen Einstieg in die Programmierung des Arduino gesucht. Das Funkuhr-Projekt passte gut, da auch schon Software für die Entschlüsselung des DCF-Signals verfügbar war.
Stromlaufplan
Im Mittelpunkt der Schaltung stehen die drei zweistelligen LED-Displays H1...3, die im Multiplexbetrieb angesteuert werden. Hierzu sind die gleichnamigen Anodenanschlüsse der einzelnen Ziffern miteinander verbunden und über die Vorwiderstände R1...8 am Arduino angeschlossen. Um auch die Katoden direkt anzuschließen, wären insgesamt 14 Ports allein für die LED-Displays erforderlich. Die Ports des Arduino UNO reichen dann nicht aus.
Die Ansteuerung der Katoden erfolgt deshalb über drei Ports, die (entsprechend der Position der Ziffer) eine dreistellige Binärzahl ausgegeben. Diese wird mit dem 3-to-8-Line Decoder D1 decodiert. Der Treiber N1 liefert den notwendigen Strom für die Displays.
Die Tasten S1...4 werden zur Aktivierung der Weckfunktion und zum Einstellen der Weckzeit benötigt, eine Taste dient weiterhin zum Umschalten von Uhrzeit auf Datum (ausführliche Beschreibung siehe Bedienungsanleitung). Zum Auslesen der Tasten werden vier der decodierten Signale von D1 bzw. N1 verwendet. Der gemeinsame Anschluß der Tasten liefert ein Signal an den Eingang A0 des Arduino. Dieses Signal ist normal HIGH. Es wird LOW, sobald eine Taste gedrückt wird und gleichzeitig die zugehörige Ziffer aktiv (Katode = LOW) ist. Der Analogeingang ist als solcher hier nicht zwingend notwendig, er wird verwendet, weil alle Digitalports bereits belegt sind.
Weiterhin ist das DCF-Empfangsmdul Typ DCF1 (von Pollin-Electronic) am Arduino angeschlossen. Neben dem Datenausgang DATA gibt es bei diesem Modul den Eingang PON. Zum Start des Empfängers muss dieser Eingang von HIGH auf LOW geschaltet werden. Bei Modulen anderer Hersteller ist dieser Eingang nicht vorhanden, in diesem Fall können auch die entsprechenden Befehle im Sketch weggelassen werden.
Schließlich gib es noch den Anschluß für einen Buzzer (X1, X2), der das Wecksignal erzeugt Der Buzzer ist ein Typ mit internem Oszillator, der vom Arduino geschaltet wird. Mit R13 wird die gewünschte Lautstärke eingestellt.
Die Betriebsspannung kann über die Hohlstecker-Buchse des Arduino von einem Steckernetzteil zugeführt werden. Aus konstruktiven Gründen ist beim Mustergerät eine Buchse in der Gehäusewand montiert, die über die Verpolschutzdiode VD1 mit dem Eingang Vin (Pin 6) des Arduino verbunden ist.
Software
Für die Dekodierung des DCF77-Signals sind die Libraries
- Wire.h
- DCF77.h
- TimeLib.h
zuständig.
Im Hauptprogamm [void loop()] wird im Wesentlichen die Anzeige von Uhrzeit bzw. Datum durch Multiplex-Ansteuerung der 7-Segment-Displays realisiert. Dabei werden weiterhin bei jedem Durchlauf die vier Tasten abgefragt. Sobald eine Taste gedrückt ist, wird das entsprechende Unterprogramm aufgerufen.
Mit den Tasten werden folgende Funktionen ausgeführt:
- Umschaltung zwischen Uhrzeit- und Datumsanzeige
- Einstellung der Weckzeit
- Aktivierung/Deaktivierung des Weckers
- Snooze-Funktion
Eine genaue Beschreibung der Tastenfunktionen enthält die Bedienungsanleitung.
Konstruktiver Aufbau
Die gesamte Schaltung ist (mit Ausnahme der vier Tasten) auf einer Einlagen-Leiterplatte (114 mm x 68 mm) untergebracht. Auf der Bestückungsseite befinden sich die 7-Segment-Displays sowie einige Drahtbrücken (Bild 1). Auf der Lötseite sind die restlichen Komponenten in SMD-Technik montiert, ebenso die Steckverbinder für die Aufnahme des ARDUINO-Moduls und des DCF-Empfängers (Bild 2). Zwei Lötstifte (X3 und X4) zur Zuführung der Betriebsspannung sind mittels Schaltlitze mit einer Hohlstecker-Buchse verbunden. An den Lötstiften X1 und X2 ist der Buzzer angeschlossen.
Für die Tasten ist eine weitere Leiterplatte (100 mm x 11 mm) vorgesehen, die an der Oberseite des Gehäuses angebracht ist (Bild 3).
Der Einbau der beiden Leiterplatten und des Buzzers erfolgt in ein Gehäuse 135 mm x 75 mm x 49 mm (Bild 6). Die Ferritantenne des DCF-Empfängers ist außen an der Gehäuserückwand in einer kleinen Gehäuseschale (60 mm x 35 mm x 17 mm) angebracht (Bild 8). Sie sollte ursprünglich auch innerhalb des Gehäuses montiert werden (der Platz innen an der Rückwand ist vorhanden), ich musste aber feststellen, dass dann der Empfänger nicht funktioniert. Offensichtlich ist bei dem geringen Abstand die Störstrahlung von der Digital-Elektronik zu hoch.
Auf der Frontseite des Gehäuses ist eine grün gefärbte Acrylglas-Platte (3 mm dick) als Farbfilter für die Anzeige angebracht (mit doppelseitigen Klebestreifen geklebt). Mit diesem Filter ist das Display wesentlich besser ablesbar. Die verbleibende Lichtstärke ist bei Tageslicht ausreichend und in der Nacht (Schlafzimmer!) nicht zu hell. Sollte eine dünnere Filterplatte, die das Licht weniger dämpft, verwendet werden, so muss u. U. die Lichtstärke des Displays verringert werden. Dies erfolgt durch Vergrößern der Widerstände R1 bis R8.
Weitere Einzelheiten zum konstruktiven Aufbau sind den den Bildern 1 bis 9 zu entnehmen.
Bedienungsanleitung
Funktion der Tasten (siehe Bild 10)
Taste 0: - Zurück zur Zeitanzeige
(aus Datumsanzeige oder Betriebsart „Alarmzeit setzen“)
- Weckalarm (Buzzer) ausschalten (auch bei Snooze)
Die Alarmeinstellung bleibt aktiviert für nächsten Alarm (nach 24 Std.)
Taste 1: - in der Betriebsart „Zeitanzeige“ > Alarm deaktivieren
- in der Betriebsart „Alarmzeit setzen“ > ausgewählte Ziffer hochzählen
Taste 2: - Umschalten in Betriebsart „Alarmzeit setzen“
(dabei wird gleichzeitig der Alarm aktiviert)
- Alarm aktivieren
(die bereits gesetzte Alarmzeit bleibt erhalten)
- in der Betriebsart „Alarmzeit setzen“ > zur nächsten Ziffer weiterschalten
Taste 3: - Datum anzeigen
- wenn Alarm eingeschaltet ist > Snooze aktivieren
DP0: Dezimalpunkt in der äußersten rechten Stelle („Sekunden-Einer“)
DP1: Dezimalpunkt in der zweiten Stelle von rechts („Sekunden-Zehner“)
usw.
Zeit- und Datumsanzeige
- Standardmäßig wird die Uhrzeit im Format hh:mm:ss angezeigt.
- Mit Taste 3 zur Datumsanzeige
- Mit Taste 0 zurück zur Zeitanzeige
Weckalarm einstellen
- Taste 2 drücken
Umschalten in die Betriebsart „Alarmzeit setzen“. Es werden nur Stunden und Minuten
angezeigt, die Sekundenanzeige ist erloschen.
In der Stelle „Minuten-Einer“ leuchtet der Dezimalpunkt (DP3). Diese Stelle kann jetzt mit
Taste 1 auf die gewünschte Weckzeit hochgezählt werden.
- Durch erneutes Drücken der Taste 2 wird die nächste Stelle („Minuten-Zehner“)
ausgewählt (der Dezimalpunkt erscheint jetzt an dieser Ziffer).
Mit Taste 1 jetzt diese Stelle auf die gewünschte Weckzeit hochgezählt.
Die Einstellung der „Stunden-Einer“ und „Stunden-Zehner“ erfolgt analog.
- Nachdem die Weckzeit korrekt eingestellt ist gelangt man mit Taste 0 zurück in die
normale Zeitanzeige. Gleichzeitig wird die Alarmfunktion aktiviert, DP0 leuchtet.
Wecken
- Sobald Uhrzeit mit der eingestellten Weckzeit übereinstimmt, wird der Alarm
eingeschaltet, d. h., der Buzzer ertönt. Gleichzeitig leuchtet DP1.
- Mit Taste 0 wird der Alarm (Buzzer) ausgeschaltet, DP1 erlischt. Der Alarm bleibt weiter
aktiviert (DP0 leuchtet weiter), so dass er am nächsten Tag zur gleichen Zeit wieder
ausgelöst wird.
- Wird der Alarm nicht ausgeschaltet, Verstummt der Buzzer nach einer Minute, DP1
leuchtet weiter. Nach vier Minuten ertönt der Buzzer erneut für eine Minute. Dieser
Vorgang wiederholt sich bis nach Ablauf von ca. einer Stunde. Dann wird der Alarm
ausgeschaltet, DP1 erlischt. Der Alarm bleibt weiter aktiviert (DP0 leuchtet weiter),
so dass der Alarm am nächsten Tag zur gleichen Zeit wieder ausgelöst wird.
- Deaktivieren des Alarms (z. B. Wochenende, Urlaub) mit Taste 1, DP0 erlischt
Snooze-Funktion
- Der Alarm kann auch mit Taste 3 (Snooze-Funktion) zeitweise ausgeschaltet werden.
In diesem Fall leuchtet der DP1 weiter. Nach vier Minuten Pause ertönt der Buzzer
erneut für eine Minute.Sofern in der Folge keine Taste gedrückt wird, wiederolt sich
der Vorgang für ca. eine Stunde lang.
- Wird währen des aktiven Buzzers erneut die Taste 3 betätigt, erstummt der Buzzer
wieder für vier Minuten und wird wieder für eine Minute aktiv.
- Mit Taste 0 wird der Alarm endgültig ausgeschaltet, unabhängig davon, ob der
Buzzer gerade aktiv ist oder ausgeschaltet. DP1 erlischt. Der Alarm bleibt weiter
aktiviert (DP0 leuchtet weiter)..
1. Es ist schon einige Jahre her, als ich mich für dieses Projekt entschied. Zu diesem Zeitpunkt waren Funkwecker mit LED-Display nirgends im Handel erhältlich, nur Wecker mit LCD-Display. Diese benötigen (nachts) eine Hindergrundbeleuchtung, die mit einer Taste eingeschaltet werden muss, was ich als ziemlich lästig empfand. Hierzu kommt, dass irgendwann die Batterie soweit entladen ist, dass die Beleuchtung aussteigt (während die Uhr noch wochenlang weiterarbeitet).
Für das LED-Display ist natürlich Netzbetrieb erforderlich, was ich nicht als Nachteil empfinde (die Steckdose ist vorhanden)
2. Zu dieser Zeit hatte ich einen Einstieg in die Programmierung des Arduino gesucht. Das Funkuhr-Projekt passte gut, da auch schon Software für die Entschlüsselung des DCF-Signals verfügbar war.
Stromlaufplan
Im Mittelpunkt der Schaltung stehen die drei zweistelligen LED-Displays H1...3, die im Multiplexbetrieb angesteuert werden. Hierzu sind die gleichnamigen Anodenanschlüsse der einzelnen Ziffern miteinander verbunden und über die Vorwiderstände R1...8 am Arduino angeschlossen. Um auch die Katoden direkt anzuschließen, wären insgesamt 14 Ports allein für die LED-Displays erforderlich. Die Ports des Arduino UNO reichen dann nicht aus.
Die Ansteuerung der Katoden erfolgt deshalb über drei Ports, die (entsprechend der Position der Ziffer) eine dreistellige Binärzahl ausgegeben. Diese wird mit dem 3-to-8-Line Decoder D1 decodiert. Der Treiber N1 liefert den notwendigen Strom für die Displays.
Die Tasten S1...4 werden zur Aktivierung der Weckfunktion und zum Einstellen der Weckzeit benötigt, eine Taste dient weiterhin zum Umschalten von Uhrzeit auf Datum (ausführliche Beschreibung siehe Bedienungsanleitung). Zum Auslesen der Tasten werden vier der decodierten Signale von D1 bzw. N1 verwendet. Der gemeinsame Anschluß der Tasten liefert ein Signal an den Eingang A0 des Arduino. Dieses Signal ist normal HIGH. Es wird LOW, sobald eine Taste gedrückt wird und gleichzeitig die zugehörige Ziffer aktiv (Katode = LOW) ist. Der Analogeingang ist als solcher hier nicht zwingend notwendig, er wird verwendet, weil alle Digitalports bereits belegt sind.
Weiterhin ist das DCF-Empfangsmdul Typ DCF1 (von Pollin-Electronic) am Arduino angeschlossen. Neben dem Datenausgang DATA gibt es bei diesem Modul den Eingang PON. Zum Start des Empfängers muss dieser Eingang von HIGH auf LOW geschaltet werden. Bei Modulen anderer Hersteller ist dieser Eingang nicht vorhanden, in diesem Fall können auch die entsprechenden Befehle im Sketch weggelassen werden.
Schließlich gib es noch den Anschluß für einen Buzzer (X1, X2), der das Wecksignal erzeugt Der Buzzer ist ein Typ mit internem Oszillator, der vom Arduino geschaltet wird. Mit R13 wird die gewünschte Lautstärke eingestellt.
Die Betriebsspannung kann über die Hohlstecker-Buchse des Arduino von einem Steckernetzteil zugeführt werden. Aus konstruktiven Gründen ist beim Mustergerät eine Buchse in der Gehäusewand montiert, die über die Verpolschutzdiode VD1 mit dem Eingang Vin (Pin 6) des Arduino verbunden ist.
Software
Für die Dekodierung des DCF77-Signals sind die Libraries
- Wire.h
- DCF77.h
- TimeLib.h
zuständig.
Im Hauptprogamm [void loop()] wird im Wesentlichen die Anzeige von Uhrzeit bzw. Datum durch Multiplex-Ansteuerung der 7-Segment-Displays realisiert. Dabei werden weiterhin bei jedem Durchlauf die vier Tasten abgefragt. Sobald eine Taste gedrückt ist, wird das entsprechende Unterprogramm aufgerufen.
Mit den Tasten werden folgende Funktionen ausgeführt:
- Umschaltung zwischen Uhrzeit- und Datumsanzeige
- Einstellung der Weckzeit
- Aktivierung/Deaktivierung des Weckers
- Snooze-Funktion
Eine genaue Beschreibung der Tastenfunktionen enthält die Bedienungsanleitung.
Konstruktiver Aufbau
Die gesamte Schaltung ist (mit Ausnahme der vier Tasten) auf einer Einlagen-Leiterplatte (114 mm x 68 mm) untergebracht. Auf der Bestückungsseite befinden sich die 7-Segment-Displays sowie einige Drahtbrücken (Bild 1). Auf der Lötseite sind die restlichen Komponenten in SMD-Technik montiert, ebenso die Steckverbinder für die Aufnahme des ARDUINO-Moduls und des DCF-Empfängers (Bild 2). Zwei Lötstifte (X3 und X4) zur Zuführung der Betriebsspannung sind mittels Schaltlitze mit einer Hohlstecker-Buchse verbunden. An den Lötstiften X1 und X2 ist der Buzzer angeschlossen.
Für die Tasten ist eine weitere Leiterplatte (100 mm x 11 mm) vorgesehen, die an der Oberseite des Gehäuses angebracht ist (Bild 3).
Der Einbau der beiden Leiterplatten und des Buzzers erfolgt in ein Gehäuse 135 mm x 75 mm x 49 mm (Bild 6). Die Ferritantenne des DCF-Empfängers ist außen an der Gehäuserückwand in einer kleinen Gehäuseschale (60 mm x 35 mm x 17 mm) angebracht (Bild 8). Sie sollte ursprünglich auch innerhalb des Gehäuses montiert werden (der Platz innen an der Rückwand ist vorhanden), ich musste aber feststellen, dass dann der Empfänger nicht funktioniert. Offensichtlich ist bei dem geringen Abstand die Störstrahlung von der Digital-Elektronik zu hoch.
Auf der Frontseite des Gehäuses ist eine grün gefärbte Acrylglas-Platte (3 mm dick) als Farbfilter für die Anzeige angebracht (mit doppelseitigen Klebestreifen geklebt). Mit diesem Filter ist das Display wesentlich besser ablesbar. Die verbleibende Lichtstärke ist bei Tageslicht ausreichend und in der Nacht (Schlafzimmer!) nicht zu hell. Sollte eine dünnere Filterplatte, die das Licht weniger dämpft, verwendet werden, so muss u. U. die Lichtstärke des Displays verringert werden. Dies erfolgt durch Vergrößern der Widerstände R1 bis R8.
Weitere Einzelheiten zum konstruktiven Aufbau sind den den Bildern 1 bis 9 zu entnehmen.
Bedienungsanleitung
Funktion der Tasten (siehe Bild 10)
Taste 0: - Zurück zur Zeitanzeige
(aus Datumsanzeige oder Betriebsart „Alarmzeit setzen“)
- Weckalarm (Buzzer) ausschalten (auch bei Snooze)
Die Alarmeinstellung bleibt aktiviert für nächsten Alarm (nach 24 Std.)
Taste 1: - in der Betriebsart „Zeitanzeige“ > Alarm deaktivieren
- in der Betriebsart „Alarmzeit setzen“ > ausgewählte Ziffer hochzählen
Taste 2: - Umschalten in Betriebsart „Alarmzeit setzen“
(dabei wird gleichzeitig der Alarm aktiviert)
- Alarm aktivieren
(die bereits gesetzte Alarmzeit bleibt erhalten)
- in der Betriebsart „Alarmzeit setzen“ > zur nächsten Ziffer weiterschalten
Taste 3: - Datum anzeigen
- wenn Alarm eingeschaltet ist > Snooze aktivieren
DP0: Dezimalpunkt in der äußersten rechten Stelle („Sekunden-Einer“)
DP1: Dezimalpunkt in der zweiten Stelle von rechts („Sekunden-Zehner“)
usw.
Zeit- und Datumsanzeige
- Standardmäßig wird die Uhrzeit im Format hh:mm:ss angezeigt.
- Mit Taste 3 zur Datumsanzeige
- Mit Taste 0 zurück zur Zeitanzeige
Weckalarm einstellen
- Taste 2 drücken
Umschalten in die Betriebsart „Alarmzeit setzen“. Es werden nur Stunden und Minuten
angezeigt, die Sekundenanzeige ist erloschen.
In der Stelle „Minuten-Einer“ leuchtet der Dezimalpunkt (DP3). Diese Stelle kann jetzt mit
Taste 1 auf die gewünschte Weckzeit hochgezählt werden.
- Durch erneutes Drücken der Taste 2 wird die nächste Stelle („Minuten-Zehner“)
ausgewählt (der Dezimalpunkt erscheint jetzt an dieser Ziffer).
Mit Taste 1 jetzt diese Stelle auf die gewünschte Weckzeit hochgezählt.
Die Einstellung der „Stunden-Einer“ und „Stunden-Zehner“ erfolgt analog.
- Nachdem die Weckzeit korrekt eingestellt ist gelangt man mit Taste 0 zurück in die
normale Zeitanzeige. Gleichzeitig wird die Alarmfunktion aktiviert, DP0 leuchtet.
Wecken
- Sobald Uhrzeit mit der eingestellten Weckzeit übereinstimmt, wird der Alarm
eingeschaltet, d. h., der Buzzer ertönt. Gleichzeitig leuchtet DP1.
- Mit Taste 0 wird der Alarm (Buzzer) ausgeschaltet, DP1 erlischt. Der Alarm bleibt weiter
aktiviert (DP0 leuchtet weiter), so dass er am nächsten Tag zur gleichen Zeit wieder
ausgelöst wird.
- Wird der Alarm nicht ausgeschaltet, Verstummt der Buzzer nach einer Minute, DP1
leuchtet weiter. Nach vier Minuten ertönt der Buzzer erneut für eine Minute. Dieser
Vorgang wiederholt sich bis nach Ablauf von ca. einer Stunde. Dann wird der Alarm
ausgeschaltet, DP1 erlischt. Der Alarm bleibt weiter aktiviert (DP0 leuchtet weiter),
so dass der Alarm am nächsten Tag zur gleichen Zeit wieder ausgelöst wird.
- Deaktivieren des Alarms (z. B. Wochenende, Urlaub) mit Taste 1, DP0 erlischt
Snooze-Funktion
- Der Alarm kann auch mit Taste 3 (Snooze-Funktion) zeitweise ausgeschaltet werden.
In diesem Fall leuchtet der DP1 weiter. Nach vier Minuten Pause ertönt der Buzzer
erneut für eine Minute.Sofern in der Folge keine Taste gedrückt wird, wiederolt sich
der Vorgang für ca. eine Stunde lang.
- Wird währen des aktiven Buzzers erneut die Taste 3 betätigt, erstummt der Buzzer
wieder für vier Minuten und wird wieder für eine Minute aktiv.
- Mit Taste 0 wird der Alarm endgültig ausgeschaltet, unabhängig davon, ob der
Buzzer gerade aktiv ist oder ausgeschaltet. DP1 erlischt. Der Alarm bleibt weiter
aktiviert (DP0 leuchtet weiter)..
Discussie (1 opmerking(en))