Stap 1: ontwerp
Na vele jaren van het bouwen van klokken met logica chips die heb ik besloten om het gebruiken van de microcontroller als gevolg van de verminderde chip tellen en daarom gebruiksgemak bouw. Mijn vorige master klok gebruikte 31 logica ICs en 4 belangrijkste plankjes en had veel minder functies Zie pic.
Heb ik besloten om het gebruik van Arduino om mijn nieuwe meester te wijten aan het gemak van de programmering. Meeste van het ingewikkelde werk wordt gedaan door de mensen die ontwerpen en vervolgens delen de bibliotheken. Arduino is zeer goed ondersteunde hardware verstandig en vele volledige delen kunnen worden gekocht klaar gebouwd als bouwsteen voor projecten.
Op deze klok drijft een MAX7219 het primaire beeldscherm en een 4 x 20 die LCD I2C wordt gebruikt voor de secundaire deze help houden bedrading en pin van de Arduino 328 gebruik tot een minimum te beperken. Ik hield het dezelfde soort eiken geval gebruikt in mijn oude meester klok als het perfect voorzien van 6 x 1" 7 segment displays en gaf me ruimte om te passen in alle andere modules. Ik heb een PIR-module voor weergave afsluiten/wakeup met zijn eigen timer en gevoeligheid aanpassing gebruikt als deze maakt gebruik van slechts 1 pin van de Arduino-328. Een EZ Link Bluetooth seriële Board module kunt me voor het programmeren van de klok en gegevens lezen van het extern van mijn desktop-PC en Android mobile.
Een van de overwegingen bij het ontwerpen bij de bouw van deze klok was om het energieverbruik te verminderen, zoals de klok op 24/7 is. Zie de tabel hieronder allermeest naar de tijd die de klok Mk2 rond 50mA ten opzichte van de Mk1 200mA vestigen zal.
Stroomverbruik
Masterclock Mk1 200mA
Masterclock MK2 opstarten 35mA
Beeldscherm uitschakelen met geen beweging overdag gevonden 40mA
Weergeven op 0 helderheid 43mA
Weergeven op 2 helderheid 50mA
Weergeven op 5 helderheid 62mA
Weergeven op 10 brightness78mA
Weergeven op 15 (max) brightness90mA
Bibliotheken van de Arduino gebruikt
DCF77.h deze bibliotheek is het hart van de klok en het zelfs een lawaaierige DCF77 signaal decodeert en auto tunes het kwartskristal.
LedControl.h om te rijden het LED-display en de LDC verlichting via een IC MAX7219.
LiquidCrystal_I2C.h om te rijden de LCD display
Wire.h om te communiceren met I2C-apparaten
Tijd bijhouden
Mijn oude meester klok was een zeer goede tijd keeper en zo lang als ik had een goed signaal DCF77 het synchroon houden het was fijn. Zo nu en dan wanneer het signaal van DCF77 was verloren geruime tijd die het een tweede krijgen zou en bij het corrigeren van het het zou dan de 1 seconde slaven los een seconde. Dit gebeurde slechts een paar keer per jaar, maar opnieuw synchroniseren alle mijn 1 seconde slaven was een pijn.
Ik heb besloten te houden gebruikend het DCF77-signaal van de atoomklok in Duitsland. Ik kon heb gebruikt het AZG-signaal uit het Verenigd Koninkrijk maar receptie is niet goed in Surrey, zoals de zender heeft verder bewegen Noord. Het DCF77-signaal is ook beter ondersteund zoals het wordt gebruikt in heel Europa niet alleen het Verenigd Koninkrijk.
Ik zal met behulp van de Arduino DCF77 decoder bibliotheek geschreven door Udo Klein. Udo heeft ontwikkeld met deze code de afgelopen jaren om het synchroniseren en lock op een signaal, zelfs als er een enorme hoeveelheid ruis en interferentie op het signaal te maken. Terwijl prototyping moet mijn nieuwe klok die ik consistente manier te beheren om te synchroniseren en handhaven van een sluis, hoewel de signaalontvanger DCF77 geleid die een gestage 1 seconde Toon puls uit Duitsland is meerdere keer per seconde knipperen. Udo van DCF77 bibliotheek code is zeer zeer complex maar in zeer eenvoudige termen die zij sloten op de frequentie van de DCF77 met een gefaseerde-gesloten-lus en eenmaal vergrendeld zal het eigenlijk voorspellen wat de DCF77-code moet bevatten en vervolgens op zoek naar fragmenten van deze code in een zeer luidruchtige signaal. Zoals dingen zoals de datum verander niet dat vaak zijn code kunt zoeken naar deze gegevens in het signaal om te helpen het blijven vergrendeld op! Zodra in sync met het DCF77-signaal wordt het "auto-tune" de back-up kwartskristal te waarborgen dat als het signaal van DCF77 verloren wordt de klok nog steeds synchroon blijft. U kunt lees de details van de ontwikkeling van deze bibliotheek en veel meer op Udo website/blog hier Blinkenlight.
De enige kleine keerzijde aan deze bibliotheek is dat er een nauwkeurige tijd baseren op de Arduino te vergrendelen in de frequentie van DCF77. Moderne Arduino boards Arduino boards niet gebruiken een kwartskristal (de één u op het bord ziet is voor de seriële poort) maar een inferieur 16MHz keramische resonator. Udo heeft geschreven een testprogramma om te controleren als uw Arduino boards resonator/crystal zijn taak van het runnen van zijn bibliotheek en kan hier worden gevonden DCF77 toepassingsgebied . Als je board niet aan het werk is is het zeer gemakkelijk te verwijderen van de resonator en vervangen door een kwartskristal en een paar condensatoren. Ik heb mijn Arduino UNO hebben gewijzigd en het werkt perfect met de bibliotheek.
Zie foto's en schema's voor UNO vóór en na de wijziging.
Belangrijkste klokdisplay
Ik gebruikte 1"(26mm) 7 Segmenttijd weergeven als u wilt weergeven als deze heel goed op mijn oude meester klok hebben gewerkt en leesbaar zijn van een goede afstand 's nachts, en ook bij daglicht. Deze worden aangedreven door een MAX7219-display driver zoals het kan rechtstreeks praten met de Arduino met een paar draden en het display heeft multiplexed vereenvoudigt bedrading.
Secundaire klokdisplay
De secundaire vertoning, alsmede het tonen van de tijd en datum geven informatie over de werking van de klok in het bijzonder de DCF77 decodering prestaties. Ik heb een I2C 4 x 20 LCD display gebruikt hiervoor. Opnieuw deze displays praat rechtstreeks met de Arduino over een 3-aderige interface en zijn erg goed in het weergeven van veel informatie close-up. Zie de animatie in dit gedeelte.
Hartslagmeter
Pulse toezicht gebruikt eenvoudige LEDs als ze een snelle visuele indicatie bieden van welk pulsen zijn wordt overgebracht door de klok.