U moet:
Een Arduino board (zowat elke smaak zal prima werken) en software
1 LED
1 jumper Wire
(Bedrading voorbeeld bijgewerkt onder...)
Ik ben een elektrotechnisch ingenieur van 20 + jaar en net een paar maanden geleden ontdekt de Arduino-platform. Onnodig te zeggen ik viel in liefde met haar en ben nu verslaafd aan projecten. Ik wilde voor de kerst dit jaar, maken sommige zeer oprechte, one-of-a-kind cadeaus voor mijn ouders. Voor mijn moeder, het was zeker een ' één-van ' klok ontwerp. Ik was niet betrokken met het bijhouden van de tijd van daglichtbesparingen of schrikkeljaren - de dag van de week en tijd gewoon nauwkeurig te houden.
Hoe te genereren van de pulsen van de klok op een unieke maar nauwkeurige wijze al? Zeker ik een fancy ingesloten klok IC of de gemeenschappelijke 32.768 kristal oscillator kon gebruiken, maar ik wilde iets anders dan de rest. Ik begon met behulp van een 555 timer voor de uitvoer van een gestage blokgolf van 100Hz. Dit werkte vrij goed, maar ik verloor ongeveer 1 seconde per uur. Geen probleem - ik schreef een algoritme om te corrigeren de ontbrekende tweede in software. Ik was blij. Toen ontdekte ik dat hoewel de interne timer van de Arduino voor tijdwaarneming niet helemaal betrouwbaar was, de analoge PWM-uitgangen een zeer stabiele blokgolf van 490Hz hebben. De taakcyclus is bepaald door de waarde geschreven naar de analoge pin. (i.e. - 0 is nul volt, 127 is een 50% duty cycle, 255 is een logica hoge/5V).
Ik besloot om te proberen de PWM analoge uitgang aangesloten rechtstreeks op de interrupt pin 2 en op gehanteerd tof! Plus tred het gehouden perfect met mijn computer's real-time klok tot op de seconde zonder noodzaak voor compensatie van de software. I been loopt deze dagen nu en het blijft uitvoeren, net zoals ik had gehoopt... allemaal met één draad en wat code.
De afgewerkte gift zal aangepaste PCB's Eagle CAD voor de voeding en logica, gehuisvest in een plexiglas behuizing hebben. Het hele thema is ijs blauw LED-verlichting om te simuleren van een analoge klok. Hoewel de behuizing een wit op blauw LCD weergave van de dag, tijd en kamertemperatuur heeft, verbindt een seriële kabel van het project aan de werkelijke klok. Met behulp van een 12 bit decennium teller, een servo, en veel van blauwe LED's ben ik het juiste uur segmenten op een analoge klok met douane-ontworpen gedrukt op Plexiglas gezicht verlichting. De servo is gemonteerd in het midden van de wijzerplaat en heeft een bijlage met een LED-armatuur gemonteerd om het licht van de notulen achter het glas. (elke minuut de servo verandert 6 graden, verlichting van de juiste minuut). Ik hoop dat het binnenkort afgerond en een video van het uiteindelijke product zal maken... Ik hoop dat ze houdt van het!
Eenvoudige Arduino bedrading diagram en demo code te maken van uw eigen klok met behulp van deze methode. Ook een link naar Circuit Lab aan te tonen het gebruik van de 555 timer @ 100Hz methode als je daarvoor kiezen.
Code en links hieronder...
555 timer Oscillator Circuit (als je wilt om te proberen deze methode)
https://www.circuitlab.com/circuit/b575r9/555-100hz-oscillator/
Klok manifestatiecode:
/ * Eenvoudige interne klok demo: door Joseph Unik aka Relic1974
Maakt gebruik van analoge PWM-uitgang van 490Hz met een taakcyclus van 50% om te
houden van zeer nauwkeurige tijd;). Een LED verbinden met pin 13
Bekijk seconden knipperen. Verbinding maken met een jumper van analoge pin 0
naar digitale Pin 2 (interrupt 0). Minuten output naar seriële
monitor. http://www.planetxresearch.com 'Arduino' logo
voor projecten en trucs...
(Voel je vrij om het gebruik van deze code uit te breiden in een volledig-functionele
klok of ander project onder Creative Commons ;)
*/
int clockInt = 0; digitale pen 2 is nu interrupt 0
int masterClock = 0; graven stijgende rand klok signalen
int seconden = 0; variabele
int minuten = 0; variabele
int ledPin = 13;
VOID Setup
{
attachInterrupt (clockInt, clockCounter, stijgt);
clockInt is onze interrupt, clockCounter functie wordt aangeroepen wanneer
beroep gedaan op een stijgende klok-rand
analogReference(DEFAULT);
pinMode (ledPin, OUTPUT);
Serial.begin(57600);
analogWrite (0, 127); Dit begint onze PWM 'klok' met een taakcyclus van 50%
}
VOID clockCounter() / / genaamd door interrupt
{
masterClock ++; met de opkomst van elke klok er 1 bij optellen om masterclock graaf
if(masterClock == 489) / / 490 Hz bereikt
{
seconden ++; na één cyclus van 490Hz toevoegen 1 seconde ;)
masterClock = 0; Reset na 1 seconde is bereikt
Toon (13, 100, 500); met behulp van Toon te pulse geleid zonder vertraging oproep ;)
}
terugkeer;
}
void loop
{
if(seconds == 60) / / nu steeds REAL TIME houden
{
minuten ++; Increment autominuten-1
seconden = 0; Reset de variabele seconden
Serial.Print ("minuten =");
Serial.println(minutes);
}
}
Demo van mijn project in de werken hier