Arduino Funkuhr mit Display und DCF77

 In Arduino, Tutorials
4.8/5 - (53 votes)

Arduino Funkuhr mit Display und DCF77

Hintergrundwissen

Eine Funkuhr ist eine Quarzuhr, die ein von einem Zeitzeichensender per Funk ausgestrahltes Zeitsignal empfangen kann und mit dessen Information die interne Quarzuhr nachreguliert.

Herzstück ist der Geradeausempfänger für den Empfang des Zeitzeichensignals eines Langwellensenders. Zeitzeichensender sind unter anderem DCF77 in Mainflingen bei Frankfurt am Main, MSF in England, Sender Allouis in Frankreich, der ehemalige HBG in der Schweiz, JJY in Japan und der US-amerikanische Zeitzeichensender WWVB. Die zum Signalempfang bei Funkuhren benutzte Ferritstabantenne. Auf dem Ferritstab befindet sich die Wicklung sowie direkt angelötet der Kondensator (rot) zur Schwingkreisabstimmung auf die Sendefrequenz. Die Antenne ist etwa so groß wie eine Batteriezelle der Größe „Mignon“. Zu beachten ist, dass jede Ferritantenne eine Polarisations- und Richtwirkung besitzt und deshalb horizontal und quer zur Richtung zum Sender orientiert werden muss. Bei Nichtbeachtung kann die Signalstärke zu gering sein, um eine Synchronisierung zu bewirken.

Das Empfängermodul braucht nur sehr wenig zum Dekodieren des Zeitformats: Er erfasst die Amplitudenschwankungen der Trägerfrequenz, die vom Sender ausgestrahlt wird. Der DCF77-Funksender reduziert die Amplitude der Trägerfrequenz pro Sekunde (mit Ausnahme der 59sten Sekunde jeder Minute) um 6 dB für eine Dauer von 0,1 oder 0,2 Sekunden. Diese Impulse bilden einen Strom von Bits, insgesamt 59 für jede Minute. Eine Periode mit verringerter Amplitude von 0,1 Sekunden sollte als logisches „0“ -Bit betrachtet werden, und eine 0,2 Sekunden-Periode ist ein „1“ -Bit. Der fehlende Impuls der 59sten Minute ermöglicht es, die nächste Minute mit dem Beginn des Datenstroms zu synchronisieren. Damit stehen innerhalb einer Minute 59 Bit Information zur Verfügung.

Die Bits (Zählung begint bei 0) haben folgende Bedeutung:

DCF77 Beteutung der Bits

Aufbau

Für den Aufbau der Arduino Funkuhr benötigen wir folgende Teile:

  • Arduino (in meinem Fall ein Arduino MEGA 2560)
  • 20×4 LCD Display I2C
  • DCF 77 FunkzeitEmpfangsmodul
  • RTC I2C Echtzeituhr
  • 10 KOhm Widerstand

Schaltplan

Mit dem 10 KΩ Widerstand als Pull up und dem Pin2 des Arduinos zum einlesen, ergibt sich folgender Aufbau:

Board und Biliotheken im Programm Arduino IDE hinzufügen

Wenn wir alles angeschlossen haben, können wir unseren Arduino Mega 2560 per USB-Kabel an den PC anschließen. Ist dieses geschehen, wird er automatisch installiert und einem Com-Port zugewiesen.

Nun können wir das Programm Arduino IDE öffnen um das Board sowie die dazugehörigen Bibliotheken zu installieren. Dazu gehen wir im Menü auf Werkzeuge -> Board  und wählen „Arduino/Genuino Mega or Mega 2560“ aus.

Unter dem Punkt Ports, im Werkzeugmenü, weisen wir dann den richtigen COM-Port zu.

Nun können wir die dazugehörigen Bibliotheken installieren. Dazu gehen wir im Menü auf Sketch -> Bibliothek einbinden -> Bibliothek verwalten, geben oben in der Suchleiste „DCF77“ ein und installieren diese.

Die kommenden Bibliotheken finden wir nicht auf diesem Weg, also müssten wir die passenden Bibliotheken zunächst downloaden:

Haben wir die ZIP-Files gedowloadet, konnen wir die Bibliotheken unter dem Menüpukt Sketch -> Bibliothek einbinden -> .ZIP-Bibliothek hinzufügen, installieren.

Der Programm-Code

  • Downloade zunächst den Arduino Programm Code: Arduino Funkuhr
  • Entpacke die Datei und öffne sie in Arduino IDE.
  • Lade den Programmcode auf den ESP8662 hoch (dieses geschieht über das Pfeilsymbol).

Nun sollte es wie auf dem folgenden Bild aussehen. Die kleine blinkende Antenne neben der Uhrzeit zeigt an, dass das Datum sowie die Uhrzeit synchronisiert wird. Dieses kann je nach Empfangsstärke 2 – 3 Minuten dauern. Falls sich dennoch die Zeit und das Datum nicht synchronisieren will, liegt es daran, dass andere elektronische Geräte den Empfang stören. Wenn das der Fall ist, stelle einfach deinen Aufbau bißchen entfernt von anderen elektronischen Geräten auf. Um den Empfang weiter zu verbessern, kann man die Ferritstabantenne Richtung Süden ausrichten, was in meinem Fall aber nicht nötig ist.

Test Code

Falls du dennoch Schwierigkeiten mit dem Empfang hast, kannst du deinen Aufbau mit diesem kleinen Programm ganz einfach überprüfen. Das Programm registriert Pegeländerungen und gibt sie auf dem seriellen Monitor aus. Es sollten 2 Pegeländerungen pro Sekunde erkennbar sein. Der serielle Monitor ist im Menü unter Werkzeuge zu finden.

[php]#define DCF77PIN 2

unsigned char signal = 0;
unsigned char buffer;

void setup(void) {
Serial.begin(9600);
pinMode(DCF77PIN, INPUT);
}

void loop(void) {
signal = digitalRead(DCF77PIN);
if (buffer != signal) {
Serial.println(signal);
buffer = signal;
}
}
[/php]

Fertig

Ich hoffe, dir hat dieses Tutorial gefallen und würde mich über eine Bewertung oben auf der Seite oder über ein Like auf meiner Facebook Fanpage freuen. Falls du Probleme, Fragen oder Anregungen hast, kannst du mich jeder Zeit, unter dem Punkt Kontakt, erreichen. Ich wünsche dir viel Spass und ein gutes Gelingen mit diesem Tutorial.

Kommentare
  • Lonokol
    Antworten

    Danke, ein echt gutes Projekt um darauf aufzubauen.

Einen Kommentar hinterlassen

Kontakt

Schön von Dir zu hören.

Beginnen Sie mit der Eingabe und drücken Sie Enter, um zu suchen

YouTube Subscriber Counter mit ESP8622 & E-Paper DisplayDetecting WiFi Hacks – Der Hacker Detektor