Inhaltsverzeichnis:

Präzisionsuhr - Gunook
Präzisionsuhr - Gunook

Video: Präzisionsuhr - Gunook

Video: Präzisionsuhr - Gunook
Video: Präzisionsuhr mit Jahresgang und Schlagwerk - Karl Hartel 2024, Juli
Anonim
Präzisionsuhr
Präzisionsuhr

Wir alle brauchen Uhren, also warum nicht Ihre eigenen in diesem anweisbaren Ich werde Ihnen zeigen, wie Sie eine Präzisionsuhr herstellen, sobald Sie die aktuelle Zeit im Hintergrund von allem automatisch verfolgen. Während auch nur sehr wenig Verbrauchsmaterial und keine Lötarbeiten benötigt werden.

Lieferungen

Zuerst benötigen Sie einen Arduino, aber jeder Arduino funktioniert

Als nächstes benötigen Sie eine Auswahl an generischen Überbrückungsdrähten.

2 12-mm-Sparkfun-Drucktastenschalter

Ein traditionelles Steckbrett

und ein LCD 1602 16-Pin-Display

Schritt 1: Verkabelung

Verdrahtung
Verdrahtung

Damit diese Uhr funktioniert, müssen Sie dies auf eine ganz bestimmte Weise verdrahten, oder Sie erhalten eine Reihe von Zufallszahlen auf dem Bildschirm und nicht die Uhrzeit.

Schritt 2: Der Code

Da wir kein RTC verwenden, wird der Code etwas lang sein, aber zum Glück habe ich die ganze harte Arbeit für Sie erledigt und ihn hier bereitgestellt.

Kopieren Sie dies einfach und fügen Sie es entweder in die Arduino IDE oder den Web-Editor ein.

#include "LiquidCrystal.h"

// Dies definiert die LCD-Verdrahtung zu den DIGITALpins const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; Flüssigkristallanzeige (rs, en, d4, d5, d6, d7);

// Digitale LCD-Kontrasteinstellung int cs = 9; // Pin 9 für Kontrast PWM const int Kontrast = 100; // Standardkontrast

// Die anfängliche Zeitanzeige ist 12:59:45 Uhr int h=12; intm = 59; int s = 45; int-Flag=1; //PM

// Schaltflächen zur Zeiteinstellung int button1; int-Taste2;

// Pins-Definition für Time Set Buttons int hs = 0; // Pin 0 für Stundeneinstellung int ms = 1; // Pin 1 für Minuteneinstellung

// Zeitüberschreitung der Hintergrundbeleuchtung const int Time_light=150; int bl_TO=Time_light;// Backlight Time-Out int bl=10; // Hintergrundbeleuchtungsstift const int backlight = 120; // nicht mehr als 7mA !!!

// Verwenden Sie zum genauen Lesen der Zeit die Arduino-Echtzeituhr und nicht nur delay () static uint32_t last_time, now = 0; // RTC

Void setup () {lcd.begin (16, 2); pinMode (hs, INPUT_PULLUP); // externe Pullup-Widerstände für Button 1 vermeiden pinMode (ms, INPUT_PULLUP); // und Button 2 analogWrite (cs, Kontrast); // Kontrast einstellen VO analogWrite (bl, Hintergrundbeleuchtung); // Turn on Backlight now=millis(); // RTC-Anfangswert lesen }

Void Schleife () {lcd.begin (16, 2); // jede Sekunde // LCD-Anzeige aktualisieren // ZEIT in Stunde, Min, Sek + AM/PM drucken lcd.setCursor (0, 0); lcd.print("Zeit"); if(h<10)lcd.print("0"); // immer 2 Stellen lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print (m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(s);

if(flag==0) lcd.print("AM"); if(flag==1) lcd.print("PM"); lcd.setCursor (0, 1); // für Zeile 2 lcd.print ("Präzisionsuhr");

// verbessertes Ersetzen von delay(1000) // Viel bessere Genauigkeit, nicht mehr abhängig von der Schleifenausführungszeit

for (int i=0;i<5;i++) // mache 5 mal 200ms Schleife, für schnellere Tastenreaktion {

while ((jetzt-letzte_zeit)<200) //delay200ms { now=millis(); } // innere 200ms Schleife last_time=now; // Vorbereitung für die nächste Schleife

// Einstellungsschaltflächen lesen button1 = digitalRead (hs); // Schaltflächen lesen button2 = digitalRead (ms);

// Zeitüberschreitung der Hintergrundbeleuchtung bl_TO--; if (bl_TO==0) { analogWrite (bl, 0); // Hintergrundbeleuchtung AUS bl_TO++; } // Drücken Sie eine beliebige, um die Hintergrundbeleuchtung zu aktivieren if(((button1==0)|(button2==0)) & (bl_TO==1)) { bl_TO=Time_light; analogWrite (bl, Hintergrundbeleuchtung); // warten bis Taste losgelassen wird, während ((button1==0)|(button2==0)) {button1=digitalRead(hs); // Tasten lesen button2=digitalRead(ms); }} Else // Verarbeite Button 1 oder Button 2, wenn er gedrückt wird, während die Hintergrundbeleuchtung eingeschaltet ist { if (button1 = = 0) { h = h + 1; bl_TO=Zeit_Licht; analogWrite (bl, Hintergrundbeleuchtung); }

Wenn (Taste 2 = = 0) { s = 0; m=m+1; bl_TO=Zeit_Licht; analogWrite (bl, Hintergrundbeleuchtung); }

/* ---- Sekunden, Minuten, Stunden verwalten am/pm Überlauf ----*/ if(s==60){ s=0; m=m+1; aufrechtzuerhalten. Wenn (m==60) {m=0; h=h+1; aufrechtzuerhalten. Wenn (h==13) {h=1; Flagge = Flagge + 1; if(flag==2)flag=0; }

if((button1==0)|(button2==0)) // Anzeige aktualisieren, wenn die Zeiteinstellungstaste gedrückt wurde { // LCD-Anzeige aktualisieren // ZEIT in Stunde, Min, Sek + AM/PM drucken lcd.setCursor (0.), 0); lcd.print("Zeit"); if(h<10)lcd.print("0"); // immer 2 Stellen lcd.print(h); lcd.print(":"); if(m<10)lcd.print("0"); lcd.print (m); lcd.print(":"); if(s<10)lcd.print("0"); lcd.print(s);

if(flag==0) lcd.print("AM"); if(flag==1) lcd.print("PM"); lcd.setCursor (0, 1); // für Zeile 2 lcd.print ("Präzisionsuhr"); }

} // end if else } // end for

// äußere 1000ms Schleife

s=s+1; //Sek. erhöhen zählen // ---- Sekunden, Minuten, Stunden verwalten am/pm Überlauf ---- if(s==60){ s=0; m=m+1; } Wenn (m==60) {m=0; h=h+1; aufrechtzuerhalten. Wenn (h==13) {h=1; Flagge = Flagge + 1; if(flag==2)flag=0; }

// Schleifenende }

Schritt 3: Schema (Dies ist nicht wirklich ein Schritt)

Schema (Dies ist nicht wirklich ein Schritt)
Schema (Dies ist nicht wirklich ein Schritt)

Wenn jemand, der dies liest, ein Tech-Nerd ist, ist hier auch ein Schaltplan, den Sie sich ansehen können, um verrückt zu werden.

Genießen und Spaß haben und vor allem frisch bleiben.