Sie benötigen:
Ein Arduino-Board (fast jeder Geschmack wird gut funktionieren) und software
1 LED
1 Drahtbrücke
(Verkabelung Beispiel aktualisiert unter...)
Ich bin Elektroingenieur von mehr als 20 Jahren und gerade die Arduino-Plattform vor ein paar Monaten entdeckt. Unnötig zu sagen ich verliebte sich in ihn verliebt und bin jetzt süchtig nach Projekten. Weihnachten in diesem Jahr wollte ich einige sehr herzliches, One of a Kind Geschenke für meine Eltern zu machen. Für meine Mutter, es war auf jeden Fall ein "ein-der" clock Design. Ich war nicht besorgt mit Sommer-und Winterzeit oder Schaltjahre zu halten - halten Sie einfach genau den Tag Wochentag und Uhrzeit.
Wie die Taktimpulse aber in gewissem Sinne einzigartig aber genaue erzeugen? Sicher könnte ich eine ausgefallene eingebettete Uhr IC oder den gemeinsamen 32.768 Kristall-Oszillator verwenden, aber ich wollte etwas anderes als der Rest. Ich begann mit einem 555 Timer ein stetiges 100Hz Rechtecksignal ausgegeben. Das funktionierte ziemlich gut, aber ich verlor ca. 1 Sekunde pro Stunde. Kein Problem - ich schrieb einen Algorithmus um die fehlende zweite in Software zu beheben. Ich war glücklich. Dann entdeckte ich, dass zwar die Arduino interne Timer nicht absolut zuverlässig für Zeitmessung, die analoge PWM-Ausgänge eine sehr stabile quadratische Welle von 490 Hz haben. Das Tastverhältnis bestimmt der Wert mit dem analogen Pin geschrieben. (d. h. - 0 ist Null Volt, 127 ist eine 50 % Einschaltdauer, 255 ist ein Logik-High/5V).
Ich beschloss, die PWM-analogen-Ausgang direkt auf den Interrupt-Pin 2 verdrahtet zu versuchen und es funktionierte großartig! Darüber hinaus aufrechtgeerhalten es perfekt mit meinem Computer-Echtzeit-Uhr, die zweite ohne Softwarekompensation. Ich betreibe es seit Tagen und es weiterhin so, wie ich gehofft hatte... alle mit einem Draht und Code.
Eagle CAD benutzerdefinierte Platine für das Netzteil und Logik, Plexiglas Gehäuse haben das fertige Geschenk. Das gesamte Thema ist Eis blauer LED-Beleuchtung eine analoge Uhr simuliert. Während das Gehäuse einen weißen auf blauer LCD-Anzeige der Tag, die Uhrzeit und die Raumtemperatur hat, verbindet ein serielles Kabel von der Projekt-Box zur tatsächlichen Uhr. Mit 12-Bit Dekade Zähler, ein Servo und viele blaue LED zünde ich die entsprechende Stunde Segmente auf eine speziell angefertigte Analoguhr auf Plexiglas konfrontiert. Das Servo wird in der Mitte des Zifferblatts montiert und hat eine Armatur mit einer LED angebracht, leuchten die Minuten hinter dem Glas montiert. (jede Minute wird das Servo 6 Grad, Aufleuchten der entsprechenden Minute). Ich hoffen, dass es bald fertig und werde eine Video des Endprodukts zu machen... Ich hoffe, dass sie es liebt!
Einfache Arduino Verkabelung Diagramm und Demo-Code, um Ihre eigene Uhr mit dieser Methode. Auch ein Link zur Schaltung Labor zeigen, wie man den 555 Timer @ 100 Hz-Methode zu verwenden, wenn Sie dies wünschen.
Codes und Links unten...
555 Timer Oszillatorschaltung (wenn Sie diese Methode versuchen wollen)
https://www.circuitlab.com/Circuit/b575r9/555-100Hz-Oscillator/
Uhr-Demo-Code:
/ * Einfache interne Uhr Demo: von Joseph Unik aka Relic1974
Verwendet analoge PWM-Ausgang von 490Hz mit einer 50 % Einschaltdauer
halten Sie sehr genaue Zeit;). Schließen Sie eine LED an Pin 13
sehen Sie die Sekunden blinken. Verbinden Sie einen Pullover von analogen Pin 0
an digitalen Pin 2 (Interrupt 0). Minuten-Ausgabe auf seriell
überwachen. http://www.planetxresearch.com "Arduino" logo
für weitere Projekte und Tricks...
(Zögern Sie diesen Code verwenden, um eine voll funktionsfähige erschließen
Uhr oder ein anderes Projekt unter der Creative Commons ;)
*/
Int ClockInt = 0; digitalen Stift 2 ist jetzt Interrupt 0
Int MasterClock = 0; steigende Kante Taktsignale zählt
Int Sekunden = 0; Variable
Int Minuten = 0; Variable
Int-LedPin = 13;
void setup()
{
AttachInterrupt (ClockInt, ClockCounter, steigen);
ClockInt ist unsere Interrupt, ClockCounter Funktion wird aufgerufen, wenn
für einen steigenden Taktflanke aufgerufen
analogReference(DEFAULT);
PinMode (OUTPUT-LedPin,);
Serial.Begin(57600);
AnalogWrite (0, 127); Dies beginnt unsere PWM "Uhr" mit 50 % Einschaltdauer
}
void clockCounter() / / durch Interrupt aufgerufen
{
MasterClock ++; Fügen Sie mit jeder Uhr Aufstieg 1 Masterclock Graf hinzu
If(masterClock == 489) / / 490 Hz erreicht
{
Sekunden ++; Fügen Sie nach einem 490Hz Zyklus 1 Sekunde hinzu ;)
MasterClock = 0; Nach 1 Sekunde erreicht wird zurückgesetzt
Ton (13, 100, 500); mit Ton um zu pulsieren führte ohne Verzögerung Aufruf ;)
}
zurück;
}
void loop()
{
If(Seconds == 60) / / jetzt immer IN Echtzeit zu halten
{
Minuten ++; Inkrement Minuten um 1
Sekunden = 0; die Sekunden-Variable zurücksetzen
Serial.Print ("Minuten =");
Serial.println(minutes);
}
}
Demo von mein Projekt in den Werken hier