Gör en exakt Arduino klocka med endast en wire - ingen extern hårdvara som behövs!
(mer av mina projekt på vår forskning hemsida - klicka på arduino logotyp upp på hemsidan)
Du behöver:
En Arduino ombord (bara om någon smak kommer att fungera bra) och programvara
1 LYSDIOD
1 bygel Wire
(Kablage exempel uppdaterad nedan...)
Jag är en ingenjör på 20 + år och upptäckt just den Arduino plattformen för några månader sedan. Onödigt att säga jag blev kär i det och är nu fast i projekt. Till jul i år ville jag göra några mycket innerligt, en-av-en-slag presenter till mina föräldrar. För min mor, det var definitivt en "en-av" klocka design. Jag oroade mig inte med att hålla upp med sommartid eller skottår - helt enkelt exakt hålla dagen i veckan och tid.
Hur man skapar klockan pulser i ett unikt men korrekt sätt ändå? Säker jag kunde använda en fancy inbäddade klocka IC eller den gemensamma 32.768 kristalloscillator, men jag ville ha något annat än resten. Jag började använda en 555 timer för att mata en stadig 100Hz fyrkantsvåg. Detta fungerade ganska bra men jag höll på att förlora ca 1 sekund per timme. Inga problem - jag skrev en algoritm för att rätta till den saknade andra i programvara. Jag var glad. Då upptäckte jag att även den Arduino interna timern inte var helt tillförlitlig för att hålla, de analoga PWM utgångarna fick en mycket stadig fyrkantsvåg 490 Hz. Intermittensen bestäms av värdet skrivs till den analoga stiftet. (dvs. - 0 är noll volt, 127 är en 50% intermittens, 255 är en logic hög/5V).
Jag beslöt att försöka PWM analoga utgången wired direkt till avbryta pin 2 och det fungerade bra! Plus höll den upp perfekt med min dator realtidsklocka till andra utan behov av programvara ersättning. Jag har kört det i dagar nu och fortsätter att utföra precis som jag hade hoppats... alla med en tråd och lite kod.
Den färdiga gåvan har Örnen CAD anpassade PCB för strömförsörjning och logik, inrymt i en plexiglas inhägnad. Hela temat är isblå LED belysning för att simulera en analog klocka. Även om kammaren har en vit på blå LCD-visning av dag, tid och temperatur, ansluter en seriell kabel från rutan project till faktiska klockan. Använda en 12 bitars decennium räknare, ett servo och massor av blå lysdioder jag belysning lämplig timme segment på en specialdesignad analog klocka möta tryckt på plexiglas. Servo är monterad i mitten av urtavlan och har en kopplad med en LED-armatur monterad att lysa upp minuter bakom glaset. (varje minut servo fyller 6 grader, lysa upp i lämpliga minuten). Jag hoppas ha den färdig snart och kommer att göra en video av den slutliga produkten... Jag hoppas att hon älskar det!
Enkla Arduino ledningar diagram och demo kod att göra en egen klocka med den här metoden. Också en länk till Circuit Lab visar hur man använder den 555 timern @ 100Hz metod om du så önskar.
Kod och länkarna nedan...
555 timer Oscillator krets (om du vill prova denna metod)
https://www.circuitlab.com/Circuit/b575r9/555-100hz-oscillator/
Klockan demonstrationen koden:
/ * Enkel intern klocka demo: av Joseph Unik aka Relic1974
Använder analog PWM utgång 490 Hz med intermittensfaktor 50% till
Håll mycket exakt tid;). Anslut en LED till stift 13 till
titta på sekunder blinkar. Ansluta en jumper från analoga stift 0
till Digital Pin 2 (avbrott 0). Minuter utdata till seriell
övervaka. http://www.planetxresearch.com "Arduino" logo
för fler projekt och tricks...
(Känn dig fri att använda den här koden kan expandera till en fullt fungerande
klocka eller andra projekt under Creative Commons ;)
*/
int clockInt = 0; Digital stift 2 är nu avbryta 0
int masterClock = 0; räkningarna stigande kanten klocka signaler
int sekunder = 0; variabel
int minuter = 0; variabel
int ledPin = 13.
void setup()
{
attachInterrupt (clockInt, clockCounter, RISING);
clockInt är vår avbrott, clockCounter funktion kallas när
startas på en stigande klocka kant
analogReference(DEFAULT);
pinMode (ledPin, produktionen);
Serial.BEGIN(57600);
analogWrite (0, 127); då startar vår PWM "klocka" med en 50%
}
void clockCounter() / / kallas av avbrott
{
masterClock ++; med varje klocka upphov lägga till 1 till masterclock greve
IF(masterClock == 489) / / 490 Hz nått
{
sekunder ++; efter en 490Hz cykel lägga till 1 sekund ;)
masterClock = 0; Återställa efter 1 sekund är nått
tonen (13, 100, 500); använda tonen för att puls ledde utan dröjsmål uppmana ;)
}
hemkomst.
}
void loop()
{
IF(seconds == 60) / / nu får till REAL TIDHÅLLNING
{
minuter ++; Increment minuter med 1
sekunder = 0; återställa variabeln sekunder
Serial.Print ("minuter =");
Serial.println(Minutes);
}
}
Demo av mitt projekt på gång här