Schlussfolgerung: Die Uhr schaut großartig aus und hat eine gute Verarbeitung, aber zu diesem Zweck hätte ich mir Metal statt Kunststoff und einen Umschalter zum Ausschalten der LED's erwünscht, aber nicht den Timer.
Dieser instruierbare Abschnitt erklärt Ihnen, wie Sie einen Binärwecker mit einer Schlummertaste mit Berührungssensor aufbauen können. Es ist mein erstes lehrreiches und mein erstes echtes Arduinoprojekt, ich wünsche dir viel Spaß damit! Vor einiger Zeit habe ich mir einen Armbanduino gekauft und ich finde, dass er wirklich nett ist, aber ich habe damit noch nichts Sinnvolles gemacht, also habe ich jetzt gedacht, dass es Zeit für ein grösseres Gesamtprojekt ist.
Dann entschied ich mich, einen Wecker zu stellen, weil mein altes Gerät kaputt war. Damit ich meine Überlegungen zum Bau der Uhr besser planen kann, habe ich einen Wecker aufgeschrieben. Eine Weckuhr sollte in der Regel in der Regel in der Lage sein, Folgendes zu tun Wofür ich mich entschieden habe: - den Nutzer einschlafen lasse - Berührungssensor "Taste" - den Nutzer den Wecker ein- und ausstellen lasse.
Klingelton: Zeitpunkt und Weckereinstellung: - 2 Schlüssel (Stunden- und Minutentasten). - Eine Umschaltung zwischen der Zeiteinstellung und der Weckeinstellung ist möglich. Werkzeug: - Bohren, oder etwas anderes, um Bohrungen in das Etui für die Schlüssel zu bohren. - Kopfstifte zur Verbindung der Kabel mit dem Armband. Eigentlich hatte ich das nicht und hatte zuerst einige Schwierigkeiten mit dem gutem Umgang in den Verbindungen zum Bogenschießen, ich habe es gelöst, indem ich mich vergewissert habe, dass die Verbindungen mit Klebeband hergestellt wurden.
Clock (); // Verfolgung der Zeit, d.h. Aktualisierung der Werte für Stunde, Minute und Sekunde bei entsprechendem Anlass. Display(); // Darstellung der Zeit oder der Weckzeit in Abhängigkeit vom Status des Einstellschalters. Wecker(); // Überprüft, ob es an der Zeit ist, den Wecker zu starten. Für mehrere Funktionalitäten erforderliche Größen werden auf der ersten Karteikarte angegeben (wobei Aufbau () und Schleife () und für nur eine Position die von nur einer Position benötigten Größen auf der gleichen Karteikarte angegeben werden.
Aus Gründen der Übersicht benutze ich nur den ARTUINO und die standardmäßige ARTUINO-Funktion millis (). Messung der Ungenauigkeit Ihres Arduinos: Wie bereits gesagt, hat das ARDINO einen kleinen Laufzeitfehler, dieser ist abhängig vom Quarzoszillator und wird für jedes ARDINO verschieden sein, um zu ermitteln, wie sehr sich meine ARDINO-Uhr vom richtigen Zeitpunkt unterschied, ich habe sie programmiert, um die Uhrzeit (Die Stunde, Minute und Sekunde) über die serielle Schnittstelle auszudrucken.
Dann lasse ich es für eine lange Zeit (übernachten und mehr) ablaufen und vergleiche die Arduino-Zeit mit einer Uhr, die ich zu Beginn und am Ende meiner Messzeit exakt kannte. Es stellte sich heraus, dass mein Armband etwa 0,4 Sek. zu jeder vollen Std. im Schnelldurchlauf unterwegs ist. Das Programm, das ich benutzt habe, um die Zeit aufzubewahren, ist eine Adaption von einigem Programmcode, den ich in den Arduino-Foren entdeckt habe.
Das Gleiche passiert mit der Variablen Minute; wenn sie 60 Punkte überschreitet, füge 1 zu den Arbeitsstunden hinzu und setze die Minute zurück. Zur Kompensation, dass mein Armbanduino 0,4 Sek. kürzer ist, kürze ich die Sek. um zwei Sek. jede fünfte St.... Sekunde = Sekunde - Zwei; // dies führt dazu, dass die Sekunde gleich zwei ist, // deshalb können die Sek. nicht vorzeichenlos sein. st. = 0; previous_millis_value = current_millis_value; Die meisten Binäruhren, die ich bis dato miterlebt habe, verwenden BCD-Code (BCD), was soviel heißt, dass jedes Didgegit einzeln binär angezeigt wird.
Ich habe mich aber für reale Binärdateien entschieden, vor allem, weil ich sie für cooler halte, aber auch, weil sie weniger LED und damit weniger Anschlüsse auf dem Armband benötigen. Dieses Kabel wird später mit dem Armband des Arduinos in Kontakt gebracht, so dass es nicht zu kurz ist. Für eine gute Anbindung an die Kabel unmittelbar in den Arm des Arduinos ist es nicht optimal, aber es hat für mich geklappt.
Derselbe Vorgang wird dann minutenlang fortgesetzt, beginnt aber bei 32 statt bei 17. Die Anzeige () benutzt die Hände stunden_p und minuten_p, die entweder auf die Werte für die Werte Stunde und Minute oder auf die Werte für die Werte alarm_stund und alarm_minuten verweisen. Wenn also der Umschalter auf die Position des Schalters gestellt wird, zeigt das System die Alarmzeit an, und wenn er wieder auf die Position T (Zeit) zurückgeschaltet wird, wird die momentane Alarmzeit eingeblendet.
Das Funktionsdisplay (): // "INTERN" VARIABEL FÜR DIE ANZEIGEFUNKTION: Int Ruhe; Int led_value; // Anzeige () stellt die Normalzeit oder Weckzeit dar, // stundenweise: Digital Write (hour_pins [i], HIGH); Digital Write (hour_pins[i], LOW); Restwert = Restwert = Rest% led_value; muss gepflegt werden. Digital Write (minute_pins [i], HIGH); Digital Write (minute_pins[i], LOW); Restwert = Restwert% led_value; zu pflegen. zu erhalten.
9. Schritt: Einstelltaste Zur Zeiteinstellung stehen mir zwei Knöpfe zur Verfügung, eine für die Stundeneinstellung und eine für die Minuteneinstellung, sowie ein Umschalter für die Umschaltung zwischen der Uhrzeit- und der Weckereinstellung. Um für die Schlüssel zu sein. Die Codierung, mit der die Taster, der Taster und der Touchsensor betätigt werden, ist in zwei Funktionsbereiche unterteilt, eine zum Überprüfen, ob die Taster betätigt werden und eine zur Ausführung der von den Tastern bei Tastenbetätigung auszuführenden Tätigkeiten, d.h. Uhrzeit setzen, Weckung, Aktivierung oder Deaktivierung des Weckers.
Tastendruckkontrolle: Der Kode, der überprüft, ob die Taster betätigt werden, ist denkbar simpel. Er erfasst nur den Status der Schlüsselpins. Der interne Pullup-Widerstand der arduino wird so eingesetzt, dass die Tastenzustände bei nicht gedrückter Taste HIGH und bei gedrückter Taste LOW sind. LOW: HIGH; um zu erhalten. Führen Sie Aktionen durch, wenn die Knöpfe betätigt werden:
Mit dem Einstellschalter ändern Sie die beiden Zeiger hours_p und minutes_p, um entweder auf die Größen hours und minutes oder auf recall_hours und recall_minutes zu verweisen. Die Codes für die Tasten Stunde und Minute werden mit diesen Zeigern bedient, so dass sie, wenn der Taster sie selbstständig umschaltet, die korrekte Stellung, den Wecker oder die Uhrzeit einstellen können. Bei der Anzeigefunktion werden auch der hour_p- und der minute_p-Zeiger benutzt, so dass bei eingeschaltetem Einstellschalter die Weckzeit zur Anzeige gebracht werden kann.
Mit den Tasten Stunde und Minute werden die Zeiten und Wochenstunden bei jedem Tastendruck um eins erhöht. Mit der Schlummertaste wird das Wecksignal abgeschaltet und eine Schlummertaste (aktuelle Zeit + 10 Minuten) eingestellt, wenn das Wecksignal neu aktiviert werden soll. Außerdem wird die Variablensnummernlinie auf wahr gesetzt, wodurch die Weckfunktion beginnt, zu prüfen, ob die Schlummerzeit die richtige Zeit ist.
Die Schlummertaste wird durch Drücken der Taste 3 Sek. aktiviert oder deaktiviert. Beim Einschalten des Alarms wird ein hochfrequenter Signalton und beim Ausschalten des Alarms ein tieffrequenter Signalton ausgegeben. Diese Schaltflächen funktionieren: // "INTERNAL" VARIABLE FOR BUTTONS FUNCTION: Boolesches erstes_Zeit_Minute = wahr; // und die Minute wird nur einmal pro Knopfdruck hochgezählt. // aus dem Ganzen. // Entscheide, ob wir die Zeit oder den Wecker aufschalten: // aus dem Ganzen:
Unterrichtsstunden _p = & hours; Minuten_p = & Minuten; zu pflegen. Erste Stunde = wahr; // Zurücksetzen, wenn die Schlüssel freigegeben werden, } // zum Registrieren des nächsten Drucks.
Wenn Sie die Minuterientaste drücken, vergrößern Sie die Minutendarstellung: Empfohlene Anzahl von Protokollen (* Minuten_p) ++; * Minuten_p = 0; Erstmalige Anzahl von Protokollen = falsch; muss beibehalten werden. Erste Minute = wahr; // Zurücksetzen, wenn die Schlüssel freigegeben werden, } // zum Registrieren des nächsten Drucks. Setzen, wenn das Wecksignal wieder beginnt, // das ergibt 10 Min. Schlummer: Snooze_off_minutes = Min. + 10; Snooze_off_hours à hours; zu erhalten.
Schlummerminuten = Min. - 25; Schlummerminuten = Stunde + 10; pflegebedürftig. Schlummer_ein = wahr; Signal_ein = falsch; muss beibehalten werden. Signal_ein = falsch; Alarm_ein = falsch; // Gibt einen Signalton wieder, so dass der Anwender den Wecker ausschaltet: Tone_maker. Spiel (HINWEIS_A3, 100); beibehalten. Wecker_ein = wahr; // Gibt einen Weckton wieder, so dass der Anwender den Wecker ausschaltet:
Tone_maker. Spiel (HINWEIS_A7, 100); beibehalten. Schlummerknopf-Timer = Millis (); zu pflegen. zu pflegen. zu pflegen. zu pflegen. zu pflegen. Schlummerknopf-Timer = Millis (); zu pflegen. zu pflegen. zu pflegen. zu pflegen. zu pflegen. Bei aktivem Wecker (Alarm_on-Variable auf wahr gesetzt) prüft die Weckerfunktion (), ob die momentane Zeit mit der eingestellte Weckzeit übereinander liegt. Ist dies der Falle, wird die Variablen signal_on auf wahr gestellt.
Falls die Variablen Signal_on erfüllt ist, fordert die Funkton die Funktion play_melody () auf. Weckfunktion (): // "INTERN" VARIABEL FÜR DIE ALARMFUNKTION: // Überprüfen Sie, ob die Zeit mit der Weckzeit übereinstimmt: // Wenn ja, aktivieren Sie den Alarm: Signal_on =wahrscheinlich; First_time_signal_on =wahrscheinlich falsch; halten Sie ihn aufrechterhalten. Spielmelodie (); beibehalten.
Prüfen Sie, ob die Zeit mit der Schlummerzeit übereinstimmt: // Wenn ja, deaktivieren Sie die Snooze-Funktion und führen Sie den Wecker erneut aus: Snooze_on = falsch; Signal_on = wahr; um ihn zu erhalten. sodass der Wecker beim naechsten Mal funktioniert: Erstsignal_ein = wahr; zu warten. zu warten. zu warten. Die Klangerzeugung auf dem Gerät ist denkbar unkompliziert, indem Sie den Status des Lautsprecherstiftes mit digitalWrite () und Delay () auf die richtige Taktfrequenz umstellen.
Für dieses Vorhaben muss ich jedoch die Knöpfe permanent prüfen, die Uhr updaten und die Displayanzeige auffrischen, auch wenn das Warnsignal abgespielt wird. innen " varielbar für spiel_melodie funktion: Intro-Melodie [] = {NOTE_C4, NOTE_D4, NOTE_E4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5}; Intra-Melodie_Länge = Größe der (Melodie) / 2; // Melodie-Länge, für Durchlaufen.
Boolescher Reset_Loop = wahr; //Tone_maker. stopp (); Tone_maker. play (Melodie[Position], 300); // Eine Pausenzeit zwischen den Tönen.... Seriendruck (Position); Seriendruck ( ":"); Seriendruck (Melodie[Position]); Seriendruck ( "\ n"); muss beibehalten werden. Lage = Lage% Melodie_Länge; I ++; Beibehaltung. Jumping ++; I = 0; zu halten. zu erhalten. zu erhalten. zu erhalten. zu erhalten. zu halten.
Lade den mit diesem Arbeitsschritt verknüpften Binärtaktquellcode, entpacke ihn und platziere den Folder ebenfalls in deinem Skizzenbuch-Ordner. Verbinden Sie Ihren Computer, rufen Sie die binary_clock_v1-Skizze auf und klicken Sie auf die Schaltfläche Hochladen. Wer alles richtig gemacht hat, sollte jetzt einen funktionsfähigen Binärwecker haben!
Falls Sie nicht mit Hilfe von Stiftleisten alle Ihre Kabel anschließen, empfehlen wir Ihnen, alle Kabel zu benutzen, um den Armband mit Klebeband zu befestigen, bevor Sie den Armband in die Schachtel stecken. Bei einem Diecemilla oder älterem Armband ist es ratsam, die Energielinie auf externe Energien zu umzustellen.
Weil ich meinen Armin für andere Zwecke später einsetzen möchte und das Band nicht der beste Weg ist, um Kabel zu befestigen, könnte ich mit dem Arminobootloader ein separates Board mit einer Atmega bauen.