Inhaltsverzeichnis:
- Lieferungen
- Schritt 1: Verkabelung
- Schritt 2: Der Code
- Schritt 3: Schema (Dies ist nicht wirklich ein Schritt)
Video: Präzisionsuhr - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:17
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
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)
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.