Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Einfacher Wecker mit DS1302 RTC

Komponenten und Verbrauchsmaterialien

Echtzeituhr (RTC)
× 1
Summer
× 1
Adafruit Standard LCD - 16x2 Weiß auf Blau
× 1
Arduino UNO
× 1

Über dieses Projekt

Hallo zusammen, in diesem Projekt werden wir versuchen, einen einfachen Wecker mit Arduino UNO-Board zu machen. Dieses Projekt ist eine Mischung aus verschiedenen Modulen, die ich zuvor verwendet habe. Wenn Sie bei etwas nicht weiterkommen, können Sie auf der Website nach dem Modul-Tutorial suchen, denn so arbeite ich normalerweise:Machen Sie die Dinge getrennt und beginnen Sie dann mit dem Mischen. :D

Für dieses Projekt benötigen wir:

  • Arduino UNO-Board, oder Sie können verwenden, was zu Ihnen passt:
  • DS1302 RTC-Modul:
  • 4*4-Matrix-Tastaturmodul:
  • LCD I2C-Bildschirm:
  • Summermodul oder der 2-polige Summer:

Falls Sie bei etwas nicht weiterkommen, können Sie diese vorherigen Tutorials zu den obigen Modulen lesen:

So richten Sie das DS1302 RTC-Modul mit Tastatur + Arduino + LCD ein

So verwenden Sie das DS1302 RTC-Modul einfach mit Arduino-Board und LCD-Bildschirm

Arduino LCD I2C einfache Verwendung und direktes Schreiben vom seriellen MonitorArduino LCD I2C einfache Verwendung und direktes Schreiben vom seriellen Monitor

Arduino uno + 4×4 Tastaturmatrix + LCD i2c-Bildschirm

So verwenden Sie einen Summer/Piezo-Lautsprecher mit Arduino

Verkabelung:

Bibliotheken und Code:

LCD-i2c-Bibliothek Sie können diese auswählen oder Ihre eigene herunterladen

Tastaturbibliothek Oder Sie können sie von der Arduino IDE herunterladen

RTC DS1302 virtuabotix-Bibliothek

Code: 

Code herunterladen

Die Codefunktion ist ziemlich einfach. Nach dem Verdrahten des Moduls können Sie auf „*“ drücken, um die Uhrzeit und das Datum auf dem DS1302 RTC einzustellen. Das Display zeigt dann den aktuellen Tag und die aktuelle Uhrzeit an, wenn Sie den Alarm einstellen möchten, drücken Sie „A“ und Sie können die Stunde und Minute einstellen, und Sie können sie deaktivieren, indem Sie vor der Zeit "B" drücken oder während des Klingelns eine beliebige Taste drücken.

Ich hoffe es gefällt euch, bei Problemen könnt ihr mich kontaktieren.

Code

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.inoArduino
Funktioniert mit UNO + RTC DS1302 + LCD i2c + 4x4-Tastatur
(Wesentliche Änderungen am 04.12.18 vorgenommen, um einige Probleme zu lösen)
//Dieser Code wird mit dem DS1302 RTC-Modul + 4 * 4 Tastatur + LCD i2c + Arduino + Summer // verwendet Zeigen Sie das Standarddatum und die Standardzeit oder die zuvor eingestellte an // Das Ziel dieses Projekts ist, dass Sie das RTC-Modul über die Tastatur einstellen können und sicher bleiben, dass es gespeichert bleibt // Dann auf dem Bildschirm anzeigen und nachdem Sie Ihre Einstellungen vorgenommen haben alarm.//Weitere Informationen finden Sie auf Surtrtech.com oder dem SurtrTech-Youtube-Kanal#include  //Benötigte Bibliotheken#include #include #include #define I2C_ADDR 0x27 //LCD i2c Stuff#define BACKLIGHT_PIN 3#define En_pin 2#define Rw_pin 1#define Rs_pin 0#define D4_pin 4#define D5_pin 5#define D6_pin 6#define D7_pin 7LiquidCrystal_I2C_ADDR_D,Enpin ,D5_Pin,D6_Pin,D7_Pin);virtuabotixRTC myRTC(2, 3, 4); // Verdrahtung der RTC (CLK, DAT, RST) // Wenn Sie die Verdrahtung ändern, ändern Sie die Pins hier also const byte numRows=4; //Anzahl der Zeilen auf der Tastaturconst byte numCols=4; //Anzahl der Spalten auf der Tastatur //keymap definiert die gedrückte Taste entsprechend der Zeile und den Spalten, so wie es auf der Tastatur erscheint. keymap[numRows][numCols]={{'1', '2', '3', ' A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'},{'*', '0', ' #', 'D'}};Byte rowPins[numRows] ={12,11,10,9}; // Zeilen 0 bis 3 // Wenn Sie Ihre Pins ändern, sollten Sie dies auch ändernbyte colPins[numCols]={8,7,6,5}; //Spalten 0 bis 3int i1,i2,i3,i4;char c1,c2,c3,c4;char keypressed,keypressedx;int A_hour=NULL;int A_minute=NULL;int AlarmIsActive=NULL;int Summer =13;Keypad myKeypad =Keypad (makeKeymap (keymap), rowPins, colPins, numRows, numCols);void setup () { Serial.begin (9600); lcd.begin (16,2); // LCD initialisieren lcd.setBacklightPin (BACKLIGHT_PIN,POSITIVE); lcd.setBacklight (HIGH); lcd.home(); }void loop() { while(keypressed ==NO_KEY){ //Solange keine Taste gedrückt wird zeigen wir das Datum und die Uhrzeit an, ich muss den Bildschirm jedes Mal löschen, damit die Zahlen nicht durcheinander kommen // Und ich sollte diese kleine Verzögerung hinzufügen, damit der Bildschirm richtig angezeigt wird, sonst hat es bei mir nicht funktioniert keypressed =myKeypad.getKey(); lcd.clear(); // Hier nehmen wir nach dem Löschen des LCDs die Zeit aus dem Modul und drucken sie mit den üblichen LCD-Funktionen auf dem Bildschirm aus myRTC.updateTime(); if(myRTC.hours==A_hour &&myRTC.minutes==A_minute &&AlarmIsActive==1 &&myRTC.seconds>=0 &&myRTC.seconds <=2){ while(keypressedx ==NO_KEY){ Ton (Summer, 1000); // Sie können den Ton ändern oder Ihre eigene Tonverzögerung erstellen (100); Ton (Summer, 2000); Verzögerung (100); lcd.clear(); lcd.print("Steh auf!!!"); // Nachricht, die angezeigt wird, wenn der Wecker klingelt keypressedx =myKeypad.getKey (); } } keypressedx =NO_KEY; kein Ton (Summer); lcd.setCursor(0,0); lcd.print (myRTC.dayofmonth); lcd.print("/"); lcd.print (meinRTC.Monat); lcd.print("/"); lcd.print (meinRTC.Jahr); lcd.setCursor(0,1); lcd.print (myRTC.hours); lcd.print(":"); lcd.print (myRTC.minutes); lcd.print(":"); lcd.print (myRTC.seconds); Verzögerung (100); } if (keypressed =='*') // Da wir jedes Mal die gedrückte Taste überprüfen, fahren wir nur mit dem Setup fort, wenn wir "*" drücken { lcd.clear (); lcd.print("Setup"); Verzögerung (1000); lcd.clear(); lcd.print("Setup-Jahr"); // Damit Sie verstehen, wie das funktioniert, zeigt es uns zuerst "Setup" an, dann druckt es "Setup-Jahr" und jetzt können Sie Ihr Jahr normal schreiben (2-0-1-8) //Es geht automatisch zum Einrichten des Monat...bis es fertig ist //Die Tasten von der Tastatur werden alle als Zeichen betrachtet (c), also sollten wir sie in int umwandeln, das habe ich getan, dann speichern wir sie (i) //Wir machen etwas Mathematik und wir erhalten das Jahr, Monat... als int, damit wir sie in die RTC einfügen können sonst wird sie nicht kompiliert //Monate wie April sollten Sie 04, 03 für März schreiben... sonst wird sie nicht an den nächsten Parameter übergeben //Die RTC virtuabotix Bibliothek ist bereits so eingestellt, dass sie keine seltsamen Uhrzeiten und Datumsangaben akzeptiert (17.45.1990) (58:90:70), und ja, alte Datumsangaben werden als Fehler betrachtet char keypressed2 =myKeypad.waitForKey(); if (keypressed2 !=NO_KEY &&keypressed2 !='*' &&keypressed2 !='#' &&keypressed2 !='A' &&keypressed2 !='B' &&keypressed2 !='C' &&keypressed2 !='D' ) { c1 =Taste gedrückt2; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed3 =myKeypad.waitForKey(); if (keypressed3 !=NO_KEY &&keypressed3 !='*' &&keypressed3 !='#' &&keypressed3 !='A' &&keypressed3 !='B' &&keypressed3 !='C' &&keypressed3 !='D' ) { c2 =Tastendruck3; lcd.setCursor(1, 1); lcd.print (c2); } char keypressed4 =myKeypad.waitForKey(); if (keypressed4 !=NO_KEY &&keypressed4 !='*' &&keypressed4 !='#' &&keypressed4 !='A' &&keypressed4 !='B' &&keypressed4 !='C' &&keypressed4 !='D' ) { c3 =Tastendruck4; lcd.setCursor(2, 1); lcd.print (c3); } char keypressed5 =myKeypad.waitForKey(); if (keypressed5 !=NO_KEY &&keypressed5 !='*' &&keypressed5 !='#' &&keypressed5 !='A' &&keypressed5 !='B' &&keypressed5 !='C' &&keypressed5 !='D' ) { c4 =Taste gedrückt5; lcd.setCursor(3, 1); lcd.print (c4); } i1=(c1-48)*1000; // die gedrückten Tasten werden in Zeichen gespeichert, die ich in int umwandele, dann habe ich einige Multiplikationen durchgeführt, um den Code als int von xxxx zu erhalten i2 =(c2-48) * 100; i3=(c3-48)*10; i4=c4-48; int N_Jahr=i1+i2+i3+i4; Verzögerung (500); lcd.clear(); lcd.print("Monat einrichten"); ////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey(); // hier werden alle Programme gestoppt bis du die vier Ziffern eingibst dann wird es mit dem obigen Code verglichen if (keypressed6 !=NO_KEY &&keypressed6 !='*' &&keypressed6 !='#' &&keypressed6 !='A' &&keypressed6 !='B' &&keypressed6 !='C' &&keypressed6 !='D' ) { c1 =keypressed6; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed7 =myKeypad.waitForKey(); if (keypressed7 !=NO_KEY &&keypressed7 !='*' &&keypressed7 !='#' &&keypressed7 !='A' &&keypressed7 !='B' &&keypressed7 !='C' &&keypressed7 !='D' ) { c2 =Taste gedrückt7; lcd.setCursor(1, 1); lcd.print (c2); } i1=(c1-48)*10; i2=c2-48; int N_Monat=i1+i2; Verzögerung (500); lcd.clear(); lcd.print("Setup-Tag"); //////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey(); // hier werden alle Programme gestoppt bis du die vier Ziffern eingibst dann wird es mit dem obigen Code verglichen if (keypressed8 !=NO_KEY &&keypressed8 !='*' &&keypressed8 !='#' &&keypressed8 !='A' &&keypressed8 !='B' &&keypressed8 !='C' &&keypressed8 !='D' ) { c1 =keypressed8; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed9 =myKeypad.waitForKey(); if (keypressed9 !=NO_KEY &&keypressed9 !='*' &&keypressed9 !='#' &&keypressed9 !='A' &&keypressed9 !='B' &&keypressed9 !='C' &&keypressed9 !='D' ) { c2 =Taste gedrückt9; lcd.setCursor(1, 1); lcd.print (c2); } i1=(c1-48)*10; i2=c2-48; int N_Tag=i1+i2; Verzögerung (500); lcd.clear(); lcd.print("Setup Stunde"); ////////////////////////////////////// ///////////////////////////////////////////:char keypressed10 =myKeypad. waitForKey(); // hier werden alle Programme gestoppt bis du die vier Ziffern eingibst dann wird es mit dem obigen Code verglichen if (keypressed10 !=NO_KEY &&keypressed10 !='*' &&keypressed10 !='#' &&keypressed10 !='A' &&keypressed10 !='B' &&keypressed10 !='C' &&keypressed10 !='D' ) { c1 =keypressed10; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed11 =myKeypad.waitForKey(); if (keypressed11 !=NO_KEY &&keypressed11 !='*' &&keypressed11 !='#' &&keypressed11 !='A' &&keypressed11 !='B' &&keypressed11 !='C' &&keypressed11 !='D' ) { c2 =keypressed11; lcd.setCursor(1, 1); lcd.print (c2); } i1=(c1-48)*10; i2=c2-48; int N_Stunde=i1+i2; Verzögerung (500); lcd.clear(); lcd.print("Setup Minuten"); ////////////////////////////////////// ///////////////////////////////////////////:char keypressed12 =myKeypad. waitForKey(); // hier werden alle Programme gestoppt bis man die vier Ziffern eingibt dann wird es mit dem obigen Code verglichen if (keypressed12 !=NO_KEY &&keypressed12 !='*' &&keypressed12 !='#' &&keypressed12 !='A' &&keypressed12 !='B' &&keypressed12 !='C' &&keypressed12 !='D' ) { c1 =keypressed12; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed13 =myKeypad.waitForKey(); if (keypressed13 !=NO_KEY &&keypressed13 !='*' &&keypressed13 !='#' &&keypressed13 !='A' &&keypressed13 !='B' &&keypressed13 !='C' &&keypressed13 !='D' ) { c2 =Tastendruck13; lcd.setCursor(1, 1); lcd.print (c2); } i1=(c1-48)*10; i2=c2-48; int N_Minuten=i1+i2; Verzögerung (500); lcd.clear(); myRTC.setDS1302Time(22, N_Minuten, N_Stunde, 1, N_Tag, N_Monat, N_Jahr); // Sobald wir mit dem Einstellen von Datum und Uhrzeit fertig sind, übertragen wir die Werte an das RTC-Modul // die 22 steht für Sekunden, Sie können auch ein Setup dafür hinzufügen, wenn Sie möchten // Die 1 steht für den Wochentag, da lange Ich zeige es nicht auf dem Bildschirm Ich ändere es nicht keypressed=NO_KEY; // die "*"-Taste wird in "keypressed" gespeichert, also entferne ich diesen Wert daraus, sonst komme ich wieder in das Setup} //////////////////// /////////////////////Alarme setup////////////////////////// ////// if (Taste gedrückt =='A'){ lcd.clear(); lcd.print("Alarmeinrichtung"); Verzögerung (1000); lcd.clear(); lcd.print("Weckerstunde einstellen"); char keypressed14 =myKeypad.waitForKey(); // hier werden alle Programme angehalten bis du die vier Ziffern eingibst dann wird es mit dem obigen Code verglichen if (keypressed14 !=NO_KEY &&keypressed14 !='*' &&keypressed14 !='#' &&keypressed14 !='A' &&keypressed14 !='B' &&keypressed14 !='C' &&keypressed14 !='D' ) { c1 =keypressed14; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed15 =myKeypad.waitForKey(); if (keypressed15 !=NO_KEY &&keypressed15 !='*' &&keypressed15 !='#' &&keypressed15 !='A' &&keypressed15 !='B' &&keypressed15 !='C' &&keypressed15 !='D' ) { c2 =Tastendruck15; lcd.setCursor(1, 1); lcd.print (c2); } i1=(c1-48)*10; i2=c2-48; A_Stunde=i1+i2; Verzögerung (500); lcd.clear(); lcd.print("Alarmminuten einstellen"); char keypressed16 =myKeypad.waitForKey(); // hier werden alle Programme gestoppt bis du die vier Ziffern eingibst dann wird es mit dem obigen Code verglichen if (keypressed16 !=NO_KEY &&keypressed16 !='*' &&keypressed16 !='#' &&keypressed16 !='A' &&keypressed16 !='B' &&keypressed16 !='C' &&keypressed16 !='D' ) { c1 =keypressed16; lcd.setCursor(0, 1); lcd.print (c1); } char keypressed17 =myKeypad.waitForKey(); if (keypressed17 !=NO_KEY &&keypressed17 !='*' &&keypressed17 !='#' &&keypressed17 !='A' &&keypressed17 !='B' &&keypressed17 !='C' &&keypressed17 !='D' ) { c2 =Tastendruck17; lcd.setCursor(1, 1); lcd.print (c2); } i1=(c1-48)*10; i2=c2-48; A_Minute=i1+i2; Verzögerung (500); lcd.clear(); AlarmIstAktiv=1; keypressed=NO_KEY; aufrechtzuerhalten. Wenn (Taste gedrückt =='B') {lcd.clear(); lcd.print("Alarm deaktiviert"); AlarmIstAktiv=0; keypressed=NO_KEY; Verzögerung (500); aufrechtzuerhalten. Sonst { myRTC.updateTime(); keypressed=NO_KEY; } }

Schaltpläne


Herstellungsprozess

  1. LCD-Panel mit Arduino für Flugsimulator
  2. Arduino-Pov-Vision-Uhr
  3. DIY einfachste IV9 Numitron-Uhr mit Arduino
  4. Einfache Wordclock (Arduino)
  5. Arduino-Uhr mit islamischen Gebetszeiten
  6. Hauptuhr
  7. Arduino-Temp. Monitor und Echtzeituhr mit 3.2 Display
  8. Einfacher Hindernissensor mit Arduino
  9. TM1637 Digitaluhr mit Zeiteinstellung und Alarmfunktion
  10. Anzeige eines Bildes auf einem LCD-TFT-Bildschirm mit Arduino UNO!