Inhaltsverzeichnis:
- Schritt 1: Brainstorming der Idee
- Schritt 2: Skizzieren und Materialien
- Schritt 3: Erstellen des äußeren Gehäuses
- Schritt 4: Laserschneiden des äußeren Gehäuses
- Schritt 5: Zusammenbauen
- Schritt 6: Code
- Schritt 7: Elektronik
- Schritt 8: Finale
Video: Morgen Buddy - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:19
Manche Leute haben einen sehr vollen Terminkalender, was es leicht macht, ein oder zwei Dinge zu vergessen. Mit diesem Wecker können Sie mehrere Wecker einstellen, um im Zeitplan zu bleiben. Die Uhr läuft rund um die Uhr und Sie müssen sie nur so programmieren, dass sie zu den verschiedenen Tageszeiten geht, die Ihrem Zeitplan entsprechen. Wenn Sie dies tun, werden die von Ihnen eingestellten Zeiten auf dem LCD-Bildschirm angezeigt, damit Sie überprüfen können, ob sie richtig sind, und als zusätzliche Erinnerung dienen.
Schritt 1: Brainstorming der Idee
Als wir versuchten, das Problem zu lösen, nutzten wir die Fischgrätenmethode, um auf eine Idee zu kommen und das Ergebnis ist unser Wecker.
Schritt 2: Skizzieren und Materialien
Während dieses Schrittes haben wir versucht, eine Liste aller Dinge zu erstellen, von denen wir dachten, dass wir sie für die Elektronik und das Außengehäuse benötigen würden. Dann haben wir eine Skizze entworfen, wie der Wecker aussehen sollte und wie wir sein Außengehäuse zusammenbauen würden.
Schritt 3: Erstellen des äußeren Gehäuses
Für den ersten Prototyp wollte ich nur sehen, wie die Fingergelenke zusammenpassen, also habe ich einen Schuhkarton verwendet und keine genauen Maße verwendet.
Schritt 4: Laserschneiden des äußeren Gehäuses
Für den zweiten Prototyp wollte ich genaue Maße bekommen und musste ein PDF erstellen, um es an den Laserschneider zu senden. Um dies zu tun, habe ich eine Box-Maker-App-Website verwendet, https://boxdesigner.connectionlab.org. Auf dieser Website habe ich dann die 3D-Maße der Box, die Dicke unseres Materials, die Maßeinheiten und den Dateityp eingegeben, den ich erstellen wollte. Die Abmessungen der Boxen betrugen 7,5 x 3 x 5 Zoll und ich verwendete ein 1/8 Zoll dickes Acrylmaterial. Die Abmessungen der Fingergelenkkerben wurden dann automatisch auf 0,46875 Zoll konfiguriert. Ich habe die PDF-Version ausgewählt, weil dies der Dateityp ist, den ein Laserschneider liest, und ich wollte einige Änderungen an der Datei in Adobe vornehmen. Ich änderte die Linienfarben in Rot, damit der Laserschneider wusste, dass er sie ausschneiden musste, anstatt die Form zu gravieren, und ich fügte eine rechteckige Box mit den Maßen 3,92 x 1,56 Zoll auf dem, was das Vorderteil sein sollte Kasten. Ich habe auch am rechten Seitenteil unten ein Rechteck mit den Maßen 1 Zoll mal 0,5 Zoll ausgeschnitten, um als Öffnung für das mit dem Wecker verbundene Kabel zu dienen. Zuletzt habe ich oben drei runde Öffnungen für die beiden Summer und den Knopf hinzugefügt. Die Summeröffnungen hatten einen Durchmesser von 0,5 Zoll und die Knopföffnung betrug 0,375 Zoll.
Schritt 5: Zusammenbauen
Als alle Stücke ausgeschnitten waren, benutzte ich eine Spritze und Acrylkleber, um sie zusammen zu versiegeln. Ich hielt die Stücke zusammen und tropfte den Kleber zwischen die Kerben, um die Seiten zusammen zu machen, aber die Oberseite wurde nicht geklebt.
Schritt 6: Code
Einführung:
Dieses Projekt wurde mit der Sprache c++ auf der Arduino IDE-Software codiert. Als Mikrocontroller wurde die NodeMCU mit dem ESP8266 verwendet. Für dieses Projekt bräuchten wir eine Möglichkeit, die Zeit genau zu messen, einen Summer, der ertönt, ein Alarmsystem, das den Alarm auslöst, und einen Bildschirm, um die gesamte Zeit und die Weckzeiten anzuzeigen. Den vollständigen Code finden Sie unter diesem Link
Bibliotheken importieren
Als erstes müssen wir die erforderlichen Bibliotheken importieren.
#include "RTClib.h"
#include "Wire.h" #include #include #include #include
Initiierende Variablen
Als nächstes müssen wir Variablen für später initiieren, das Pin-Layout für die Summertasten zuweisen, die RTC einrichten und die I2C-Adresse des LCD-Displays einstellen.
LiquidCrystal_I2C lcd(0x27, 20, 4);
const int Summer1 = 12; const int Summer2 = 0; const int-Taste = 2; RTC_DS3231 rtc; char daysOfTheWeek[7][12] = {"Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"} int starttime; int aktive Zeit; int Vorzeit = 0; char ahours1[3]; Holzkohleamine1[3]; int Stunde1 = 0; int min1 = 0; char ahours2[3]; Holzkohleamine2[3]; int Stunde2 = 0; int min2 = 0; char ahours3[3]; Holzkohleamine3[3]; int Stunde3 = 0; int min3 = 0; int-Alarm = 0; int ByteReceived; char empfangenChar; const Byte numChars = 32; char empfangenChars[numChars];
Aufstellen
Als nächstes brauchen wir eine Funktion, die alle notwendigen Prozesse startet. In dieser Funktion müssen wir das LCD starten und die Anfangszeiten drucken, eine kleinere Funktion erstellen, die der RTC Echtzeit gibt, wenn sie nicht bereits vorhanden ist, und den seriellen Monitor starten.
Leere Einrichtung () {
#ifndef ESP8266 while (!Seriell); #endif if (! rtc.begin ()) { Serial.println ("Konnte RTC nicht finden"); während(1); } if (rtc.lostPower ()) { Serial.println ("RTC hat Strom verloren, lasst uns die Zeit einstellen!"); rtc.adjust(DateTime(F(_DATE_), F(_TIME_)))} lcd.init(); LCD-Rücklicht(); // macht Baklight EIN. lcd.clear(); // Löscht LCD lcd.print("00:00"); // Anzeige auf LCD nach Code-Upload lcd.setCursor (10, 0); lcd.print("00:00"); lcd.setCursor(0, 1); lcd.print("Zeit"); lcd.setCursor(10, 1); lcd.print("Alarm 1"); lcd.setCursor(0, 3); lcd.print("Alarm 2"); lcd.setCursor(0, 2); lcd.print("00:00"); lcd.setCursor(10, 3); lcd.print("Alarm 3"); lcd.setCursor(10, 2); lcd.print("00:00"); rtc.begin(); pinMode (Taste, EINGANG); // Setze einen Pin für die Stille-Taste pinMode (Summer1, OUTPUT); // Setzen Sie einen Pin für den Summerausgang PinMode (Buzzer2, OUTPUT); // Setzen Sie einen Pin für den Summerausgang Serial.begin (9600); Serial.println ("Eingabezeit von Alarmen im HHMM-Format ohne Leerzeichen zwischen den Alarmen"); Startzeit = Millis()/1000; }
Daten empfangen
Jetzt müssen wir die Weckzeiten empfangen können. Dazu haben wir eine Funktion erstellt, um die Daten vom seriellen Monitor zu empfangen und in einem Array zu speichern.
void recvWithEndMarker() {
statisches int ndx = 0; String timein = Serial.readString(); for(ndx = 0; timein[ndx]; ndx++) { ReceivedChars[ndx] = timein[ndx]; } ReceivedChars[ndx] = '\0'; Serial.print (empfangene Zeichen); }
Wecker einstellen
Der nächste Schritt besteht darin, Alarme einzustellen. Hier ist der Code für Alarm 1. Für Alarm 2 und 3 wurde der gleiche Vorgang mit einigen Zahlenänderungen wiederholt.
/* Alarm 1*/
recvWithEndMarker(); int h, m; für (h = 0; h < 2; h++) { ahours1[h] = ReceivedChars[h]; } für (m = 2; m < 4; m++) { amins1[m-2] = empfangenChars[m]; } ahours1[h] = '\0'; Amine1[m-2] = '\0'; Serial.print (ahours1); Serial.print (amins1); Stunde1 = Atoi(ahours1); min1 = Atoi(Amine1); Serial.print (Stunde1); Seriendruck (min1);
Summer/Taste
Wenn das erledigt ist, müssen wir den Summer ertönen lassen, wenn Echtzeit und Weckzeit gleich sind. Auch in diesem Schritt machen wir einen Snooze-ähnlichen Knopf, der den Summer stoppt, während Sie ihn gedrückt halten.
/* Stille-Taste */
int Schweigen; intb; b = digitalRead(2); wenn (b == NIEDRIG) { Stille = 1; aufrechtzuerhalten. Sonst { Stille = 0; } /* Alarm starten */ if (Stunden == Stunde1 && Minuten == min1) { Alarm = 1; aufrechtzuerhalten. Sonst wenn (Stunden == Stunde2 && Minuten == min2) { Alarm = 1; aufrechtzuerhalten. Sonst wenn (Stunden == Stunde3 && Minuten == min3) { Alarm = 1; aufrechtzuerhalten. Sonst { Alarm = 0; Stille = 0; aufrechtzuerhalten. Wenn (Alarm == 1 && Stille == 0) {Ton (Summer1, 4000, 1000); Ton (Summer2, 4000, 1000); Verzögerung (1000); kein Ton (Summer1); kein Ton (Summer2); Verzögerung (1000); }
Druckzeiten
Schließlich müssen wir die Alarmzeiten und die Echtzeit auf dem LCD-Bildschirm ausdrucken.
DateTime now = rtc.now();
int Stunden = (now.hour()); int min = (jetzt.minute()); /* Alarmzeit im 00:00-Format */ lcd.setCursor(10, 0); lcd.print (ahours1); lcd.setCursor(13, 0); lcd.print (amins1); lcd.setCursor (0, 2); lcd.print (ahours2); lcd.setCursor(3, 2); lcd.print (amins2); lcd.setCursor(10, 2); lcd.print (Stunden3); lcd.setCursor(13, 2); lcd.print (amins3); /* Zeit von RTC anzeigen */ lcd.setCursor(0, 0); lcd.print (Stunden); lcd.print(":"); lcd.print (Minuten);
Schritt 7: Elektronik
Die Elektronik dieses Projekts besteht aus mehreren Teilen, wie in der Stückliste zu sehen ist. Das erste Bild ist ein Schema der endgültigen Elektronik des Projekts. Das zweite Bild ist unser endgültiges elektronisches Design. Das dritte Bild zeigt unser Projekt inmitten des zweiten Prototyps.
Um zu beginnen, befestigen Sie Ihre NodeMCU am anderen Ende Ihres Steckbretts. Sie müssen dann alle Ihre anderen Elektronikgeräte an die NodeMCU und das Steckbrett anschließen. Beginnen Sie, indem Sie Ihren LCD-Bildschirm an die Pins D1 für SCL und D2 für SDA anschließen. Auf dem LCD kann der Benutzer die aktuelle Uhrzeit und die eingestellten Alarmzeiten sehen. Verbinden Sie nun Ihre Summer mit einem Draht mit den Pins D3 und D6. Die Summer ermöglichen es dem Alarm, den Benutzer zu warnen, wenn die eingestellte Zeit erreicht wurde. Sie müssen nun eine Taste anbringen, damit der Alarm gestoppt werden kann. Bringen Sie diese Taste an Pin D4 an. Jetzt befestigen Sie Ihre Echtzeituhr am Steckbrett. Verdrahten Sie die Echtzeituhr so, dass sie die gleichen SDA- und SCL-Pins verwendet, die für das LCD-Display verwendet werden.
Schritt 8: Finale
Wenn Sie die angegebenen Informationen befolgt haben, kann Ihr Projekt wie in der Abbildung oben aussehen. Wir wünschen Ihnen viel Glück bei Ihren Versuchen, dieses Projekt nachzubauen, und wenn Sie Ihr Projekt abgeschlossen haben, empfehlen wir Ihnen, Bilder und Anmerkungen mit uns in den Kommentaren zu teilen. Vielen Dank und viel Glück Mitmacher.
Empfohlen:
Study Buddy: 4 Schritte
Study Buddy: Die Idee für den Study Buddy kam mir, während ich über bessere Möglichkeiten zum Lernen für meinen Unterricht nachdachte. Ich habe Probleme damit, mein Telefon zu benutzen, wenn ich lernen sollte, und ich habe festgestellt, dass es die beste Methode ist, es außer Sicht zu halten, um mich richtig zu konzentrieren