Arduino DCF77 Analyzer Clock MK2 – Precieze 60-LED-ring tijdcodeweergave
Onderdelen en benodigdheden
| Arduino Nano R3 (of ATmega328 op eigen PCB) | × | 1 |
Let op: voor de Superfilter-functie is een Arduino met kwarts kristal (geen resonator) vereist.
Over dit project
Volledige documentatie op mijn site: Arduino DCF77 Analyzer Clock MK2.

Deze klok toont de DCF77-tijdcode op twee ringen van 60 LED's op een grote wijzerplaat van 12" (305 mm). De binnenste ring toont de live ontvangen tijdcode voor de komende minuut; de buitenste ring toont de gecorrigeerde tijd (mits de vorige minuut foutloos was).
Extra 24 LED's tonen decoder-status en tijdinfo. Gecodeerde tijd en datum op twee grote 8-digit 7-segment displays; DCF77-pulstijden en bitinfo op twee kleinere 8-digit 7-segment displays.
Twee ATmega328's (Arduino Uno's): één voor de DCF77 Analyzer, één voor de Udo Klein Super Filter. De Super Filter doet geavanceerde signaalverwerking en stemt de Arduino-kwarts af. Schakelbaar met 10 status-LED's voor signaalkwaliteit. De klok slaat uren, kwartieren en seconden via twee JQ6500 geluidsmodules.
Meeste elektronica zit achter de wijzerplaat, zodat de klok in diverse behuizingen past. Er zijn ontwerpen voor een retro- en een moderne stijl (oude klokbehuizing respectievelijk zwarte lijst).

Stap 1: Credits
Base: DCF77 Analyzer Clock van Erik de Ruiter. Dit is een update van mijn MK1.

Verschillen met Erik's klok:
- Twee custom Arduino Uno's op veroboard (geen Uno + Mega).
- Goedkope 7-segment en dot-matrix modules uit China (code aangepast).
- 2× JQ6500 ipv Adafruit sound board (software wijzigingen, extra library).
- Geen Mega → decoder-LED's via 3e dot-matrix module.
- Super Filter uitgebreid met extra status-LED's (PWM-gestuurd door Analyzer-Uno).
- LED-test functie toegevoegd aan Super Filter.
- Alleen 3mm LED's met gematchte helderheid.
- 4 software-helderheidsniveaus (ringen, grote displays, kleine displays, Super Filter LED's) via één LDR.
- Geen temperatuur/weeknummer display.
- Super Filter: alleen Synthesized / Non-Synthesized output (geen modusschakelaar).
- DCF77-geluid: 1-bits krijgen een langere beep (500ms vs 100ms) voor betere onderscheidbaarheid.
Stap 2: Video's
- Video 1: Klok draaiend met tikgeluid en kwartier/uur-slag.
- Video 2: Opstarten, display-test, tijd/datum decodering.
- Video 3: Udo Klein Super Filter werking.
- Video 4: Moderne lijst-versie met geluid.
- Video 5: Live DCF77 signaal weergave en decodering (alleen DCF77-geluid).
Stap 3: Bediening (7 schakelaars)

Schakelaars zitten op een metalen staaf, gemonteerd aan de binnenkant van een neerklapbare deur (retro) of in een uitsparing aan de zijkant (moderne).


| Schakelaar | Functie |
|---|---|
| Tikgeluid Aan/Uit | Voeding JQ6500 (tik/tak) aan/uit |
| Tikvolume (niet-blokkerend) | Volume omhoog/omlaag (alleen als Tikgeluid Aan) |
| Slag-controle | Uit / 24-7 / Timer (bijv. 05:15–23:00) |
| Slagvolume (niet-blokkerend) | Omhoog/omlaag + test-slag na elke druk |
| DCF77-geluid Aan/Uit | Piezo beep: 0=100ms, 1=500ms (onderscheid) |
| Reset (niet-blokkerend) | Filter: Super Filter her-sync / Analyzer: display test + klok re-sync |
| DCF77 Bron | Uit / Analyzer (direct) / Filter (gesynthetiseerd) |
Stap 4: Schema's
Drie schema's: hoofdbord, dot-matrix modules, 7-segment modules.

Groot schema (4000x4000): hier bekijken.

Stap 5: ATmega pin-verbindingen
Twee ATmega328's op custom veroboards. Standaard UNO voor Analyzer; UNO met kwarts voor Super Filter. Zie kwarts-modificatie handleiding.



Stap 6: Veroboard layouts

Alle verbindingen naar andere borden via PCB-header connectors. Schakelpaneel direct bedraad voor onderhoudsgemak. RTC gemonteerd op LED-veroboard maar aangesloten via header op hoofdbord.
Stap 7: Kant-en-klaar modules
- LM2596 Regelaar: 5V uitgang, instelbaar via 10k trimmer. Stel in voordat Arduinos geplaatst worden. Stroom: ~450mA max (volle helderheid), ~80mA (displays uit). 1A DC voeding (7-12V) voldoende.
- DS3231 RTC: I2C, temperatuurgecompenseerd, batterij-backup. Gemodificeerd voor niet-oplaadbare batterij (R5 verwijderd).
- MAX7219 Dot Matrix Modules (3×): 2× voor in-/uitwendige LED-ringen, 1× voor overige status-LED's. Matrix verwijderd, header gesoldeerd.
- RCWL-0516 Doppler Radar / PIR: Bewegingsdetectie voor display aan/uit. Radar werkt door glas heen; PIR niet.
- MAX7219 7-segment 0.56": Tijd/datum. Mogelijke display-fouten → zie stap 24.
- MAX7219 7-segment 0.39": Bit/error/puls displays. Hetzelfde modulatie-probleem.
- JQ6500 16-pin modules (2×): Eén voor tik/tak (hardware-gestuurd), één voor slagen (software-gestuurd). Elke module aan 3W 8Ω luidspreker. Geluid via USB (Windows) laden.
- DCF77 Ontvanger: PV Electronics module (VDD, TCON, PON, GND, NC). Geïnverteerde output. Laag-standby via PON=VDD. Ver van storingsbronnen plaatsen, naar transmitter richten.
Stap 8: Bedradingsvolgorde
~400 draden vereisen planning. Alle borden op de achterkant van de wijzerplaat monteren, bedrading zichtbaar houden. Stappenvolgorde:
- Super Filter LED's bedraden en in wijzerplaat monteren.
- DCF77 Status LED's bedraden en monteren.
- 3e Dot Matrix module LED's bedraden, via kleine veroboard naar hoofdbord.
- Buitenring LED's bedraden (per 8 LED's), module terugplaatsen, afkoppelen.
- Binnenring LED's bedraden (per 8 LED's), module terugplaatsen, afkoppelen.
- Header-kabels bouwen en aan alle borden koppelen.
- Hoofdbord monteren, bedraden naar schakelpaneel (inclusief LDR in deur).
- Luidsprekers monteren en aansluiten op JQ6500-bord.

LED's passen klem in 3mm gaten (randen lakkeren voor betere wrijving).
Stap 9: MAX7219 Dot Matrix module modificatie
Matrix-LED's verwijderen. Twee rijen van 8 hoekige headers solderen onderaan de oorspronkelijke matrix-connector. Draden lopen van deze headers naar de LED's op de wijzerplaat.




Stap 10: Bedradingsjig bouwen
Jig houdt LED's op correcte afstand voor gemakkelijke bedrading.
- Wijzerplaat printen op papier (spiegeld, want werkt van achteren). Op hout/melamine plakken.
- Alle LED-midpunten centrumpauwen en 3mm boren (test eerst: LED's verschillen in diameter).
- LED's in jig plaatsen, anoden buigen en solderen per groep van 8, kathoden met isolatiebuis en draad naar volgende groep.




Stap 11: In- en uiterste ring bedraden

Per 8 LED's: anoden samen, kathoden via draad naar volgende groep. Elke groep krijgt eigen anode-aansluiting op dot-matrix module (8 totaal). Laatste groep heeft 4 LED's. Proces herhalen voor binnenring.





Gebruikte LED's: Vishay TLH44 series High Efficiency, Ø3mm Tinted Diffused. Geselecteerde helderheidsgroepen voor uniformiteit.



Stap 12: 3e Dot Matrix module bedraden
24 van de 64 mogelijke LED's gebruikt:
- Sectie 1 (8): Dagen van de week (7 aangesloten)
- Sectie 2 (8): CEST, CET, Schrikkeljaar, RTC-fout, Gesynchroniseerd, Periode-fout, Pulsbreedte-fout (7 aangesloten)
- Sectie 3 (8): Buffer Vol, Pariteit 3-1 pass/fail, Buffer Overflow (8 aangesloten)
- Sectie 4 (8): Minuut-marker, DCF77 Status (2 aangesloten)
Bedraden op jig, dan naar kleine veroboard (ook RTC-mount), daarvandaan naar matrix-module.
Stap 13: Schakelpaneel bedraden

Paneel zweeft onder klok, vast aan deur. Bedrading direct gesoldeerd op hoofdbord (inclusief LDR).




Stap 14: Slag- en tik/tak-geluiden op JQ6500

Slag-circuit: SW7 (3-stand vast): Uit (voeding af + pin hoog) / 24-7 / Timer (05:15-23:00 in code). Serieel via pinnen 13/14, 1k weerstand op RX. Volume via software.

Tik/tak-circuit: SW6 haalt voeding van JQ6500. SW8 (3-stand vast, midden=uit) stuurt volume via ADKey-pin. Arduino stuurt elke 2 seconden speel-commando. Geluidsbestand <2 sec. D15 isoleert ADKey van Arduino.

Stap 15: Luidsprekers

2× 3W 8Ω luidsprekers aan zijkanten van behuizing (paarje van Amazon). Met roosters.




Stap 16: JQ6500 geluidsbestanden laden
Gebruik JQ6500_Serial library en tools. Meestal Chinese uploader; Engelse versie van Nikolai Radke: JQ6500_English_MusicDownload_V1_2a.zip.
- JQ6500 via USB in PC.
- Programma starten → FILES → CHOOSE FILES → selecteer bestanden.
- Bestandsnamen: 1-12 = uur-slagen, 13-16 = kwartier-slagen, 17 = test-slag.
- FLASH tab → FLASH → wachten op READY.
- Herhalen voor tik/tak (1 bestand) op 2e module.
Bestanden inbegrepen: bell.zip, tick_tock.zip (48kHz, gemengd in Audacity).
Stap 17: JQ6500 Library aanpassen
Standaard library wacht op antwoord → klok loopt uit sync. Fix in JQ6500_Serial.cpp regel 263:
if(!responseBuffer && !bufferLength) return;
Na toevoeging werkt klok correct (alleen ~10-20ms vertraging).

Stap 18: RTC aanpassen (DS3231)
Module geleverd met Li-ion oplaadbare batterij. Voor niet-oplaadbare: verwijder weerstand R5.


Stap 19: Wijzerplaat tekening
~700 boorgaten, snijden, vullen. Handmatig (geen CNC). Getekend in TurboCAD, geprint op water-slide decal papier (A3). Kwaliteit uitstekend.




Bestanden: TurboCad_Drawings.zip (diverse formaten, 4000x4000 PNG).
Stap 20: Wijzerplaat zagen en boren
- 1,5mm aluminiumplaat (draagt elektronica gewicht).
- Sjabloon printen op A3, uitknippen 7-segment openingen, op aluminium plakken.
- Alle LED-midpunten centrumpauwen, 7-segment openingen uittekenen.
- Sjabloon verwijderen, cirkel uitsagen (jigsaw/metaalzaag).
- 7-segment openingen uitzagen (fretsaag, rustig werken).
- Alle LED-gaten boren: 1mm → 2mm → 3mm (klempassing na lakken).
- Montagegaten boren, beschermfolie af, afschuren, primer + acrylverf + matlak. Antiek wit (oude stijl) of zuiver wit (modern).
Stap 21: Decal aanbrengen
- Decal printen, drogen, uitknippen net onder maat, acryllak laag, drogen.
- In water doeken tot transparante laag loslaat van backing.
- Op wijzerplaat schuiven, centreren op gaten, backing afhalen.
- Luchtbubbels verwijderen, drogen, acryllak bescherming.
- Met leerperk (net kleiner dan 3mm) decal uit LED-gaten knippen, 7-segment openingen vrijmaken met mesje.
- Nog een laag lak, overnachten laten drogen.





Zoek: "Transparent Water Slide Decal Paper A3".
Stap 22: PCB/Veroboard bevestiging

Houten blokken op restjes hout, gelijmd met contactlijm (dubbelzijdig aanbrengen, laten tacken, indrukken). Modules op blokken schroeven (M2). Hoofdbord op maatwerksteunen boven onderste 7-segment modules.



Stap 23: Wijzerplaat rand & achterdoos restaureren (Retro)
Oude eiken rand: verfstripper → houtbleek → mat acryllak. Achterdoos: slecht beschadigd, gerepareerd met schroeven/lijm, gaten gevuld, matzwart geschilderd.
Stap 24: MAX7219 7-segment display fouten corrigeren
Probleem: daisy-chaining veroorzaakt display-fouten.
0.39" display: Datasheet eist 10µF + 0.1µF over voeding nabij MAX7219. 10µF ontbreekt → toevoegen boven diode D1 op printachterzijde. Diode in serie met voeding → bij daisy-chain spanningsval. Diode verwijderen, draadbrug plaatsen.



0.56" display: 10µF op +/− pinnen MAX7219 IC solderen. 1N4148 diode vervangen door draadbrug.



Stap 25: Contrast verbeteren 7-segment modules

Normaal rood plexiglas over displays. Hier: Neutral Density Heat Proof Dimming Transparent Acetate Sheet ND 0.9. Verbergt onbezonnen segmenten, werkt voor alle LED-kleuren, goedkoop. Nadeel: te flexibel voor grote vlakken zonder ondersteuning.
Stap 26: Colon (dubbele punt) op RTC-tijd display

Code zet digit 3 en 6 op kleine 'o'. Zwart plastic tape over die digits knippen, kleine sectie zichtbaar laten → colons zichtbaar bij aansturing.



Stap 27: Wijzerplaat & behuizing montage (Retro)

Messing bezel (via horologisch leverancier) over wijzerplaat. Bezel vast met klikslot in rand. Scharnier aangepast (bijlen/vullen). Rand vast met zelfde klikslot. Klein messing schroefje zorgt voor correcte afsluiting.




Stap 28: Moderne stijl behuizing

Grote fotolijst met vierkante achterdoos. Dik fotokaart (of dun multiplex met afgeronde rand) over wijzerplaat. Achterplaat met grote rond uitzaging voor elektronica, aan één kant gescharnierd. Luidsprekers aan zijkanten met roosters. Schakelaars in uitsparing aan zijkant met roerboven.
Stap 29: DCF77 Super Filter

De Super Filter (Udo Klein) verwerkt actief het inkomende DCF77-signaal. Na paar minuten sampling voorspelt hij het signaal en corrigeert fouten. Zelfs bij signaalverlies synthetiseert hij een correct signaal. Arduino-kwarts wordt continu afgeregeld op basis van DCF77.
Modificaties: 4 modi verwijderd (alleen Synthesized/Inverted Synthesized). PWM-helderheid via Analyzer-Uno. LED-test bij reset/power-up (eerst Super Filter, dan hoofdklok).

Status LED's:
- Filter On: Super Filter actief & decodering
- DCF77 Filtered: Gesynthetiseerd signaal output
- DCF77 Signal: Raaw signaal van ontvanger
- Signal Difference: Verschil raaw vs gesynthetiseerd (knippert normaal)
- Filter Synchronized: 100% gesynced, beste kwaliteit
- Filter Locked: Fase-locked, tijd accuraat, niet alle decoder-stages voldoende
- Sync Lost <200ms: Eens gesynced, nu driften <200ms, kan herlocken
- Sync Lost >200ms: Drift >200ms, mag niet herlocken
- Signal Dirty: Tijddata onbetrouwbaar
- Signal Bad: Wachten op goed signaal





Stap 30: DCF77 Tijdcode

Afbeelding toont hoe de tijdcode op de ringen te lezen is.
Stap 31: Code
Twee losse codepakketten: één voor Super Filter, één voor Analyzer.

DCF_77_ANALYZER_CLOCK_Mk2_43.zipSuperfilter07DCF77AnalyzerMK2.zip
Code
- DCF77 Decoder Code (Arduino) – download only
- Super Filter Code (Arduino) – download only
JQ6500_Serial Library (GitHub)
3D/CAD Bestanden
turbocad_drawings_TESmpq119g.zip– CAD bestanden wijzerplaat & sjabloonbell_wYLvJG1pUl.zip– Slag geluiden voor JQ6500tick_tock_FLj9XHTJoB.zip– Tik/tak geluid voor JQ6500
Schema's
- Hoofdbord schema
- MAX7219 Dot Matrix module bedrading naar LED's
- MAX7219 7-segment display modules bedrading
Productieproces
- Koekeklok: geschiedenis, vakmanschap en moderne evolutie
- Arduino POV-klok: Bouw een Persistence-of-Vision LED-display
- Bouw een retro Numitron-klok met Arduino: Eenvoudig, betrouwbaar en energiezuinig
- Een stijlvolle wandklok bouwen met Adafruit 60-LED Neopixel Ring & Arduino
- DIY Arduino Woordklok – Bouw een Elegant Real-Time Display
- Bouw een Arduino Real-Time Clock voor Islamitische Gebedstijden
- Bluetooth-gecontroleerde Arduino Spybot bouwen
- Bouw een Aangepaste LED Hoofdklok met Alarm – Zichtbaar vanaf 12 Meter
- Arduino Temperatuurbewaking & Realtime Klok met 3.2" TFT-display
- Bouw een Precieze 7-Segment Klok met Arduino Pro Mini & DS1302 RTC
- Bouw een betrouwbare wekker met DS1302 RTC en Arduino UNO