Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Eenvoudige wekker met DS1302 RTC

Componenten en benodigdheden

Real Time Clock (RTC)
× 1
Zoemer
× 1
Adafruit Standaard LCD - 16x2 Wit op Blauw
× 1
Arduino UNO
× 1

Over dit project

Hallo allemaal, in dit project zullen we proberen een eenvoudige wekker te maken met Arduino UNO-bord. Dit project is een mix van verschillende modules die ik eerder heb gebruikt. Als je ergens mee vastzit, kun je op de website kijken voor de module-tutorial, want zo werk ik meestal:doe dingen apart en begin dan met mixen. :D

Voor dit project hebben we nodig:

  • Arduino UNO-bord, of je kunt gebruiken wat bij je past:
  • DS1302 RTC-module:
  • 4*4 matrix toetsenbordmodule:
  • LCD I2C-scherm:
  • Zoemermodule, of de 2-pins zoemer:

Als je ergens mee vastzit, kun je deze eerdere tutorials over de bovenstaande modules bekijken:

Hoe de DS1302 RTC-module in te stellen met toetsenbord + Arduino + LCD

Hoe de DS1302 RTC-module eenvoudig te gebruiken met Arduino-bord en LCD-scherm

Arduino LCD I2C eenvoudig gebruik en direct schrijven vanaf seriële monitorArduino LCD I2C eenvoudig gebruik en direct schrijven vanaf seriële monitor

Arduino uno + 4×4 toetsenbord Matrix + LCD i2c-scherm

Een zoemer/piezo-luidspreker gebruiken met Arduino

Bekabeling:

Bibliotheken en code:

LCD i2c-bibliotheek U kunt dit kiezen of uw eigen downloaden

Toetsenbordbibliotheek Of u kunt het downloaden van Arduino IDE

RTC DS1302 virtuabotix-bibliotheek

Code: 

Downloadcode

Het functioneren van de code is vrij eenvoudig, na het bedraden van de module kunt u op "*" drukken om de tijd en datum op de DS1302 RTC in te stellen, het display zal dan de huidige dag en tijd weergeven als u het alarm wilt instellen, drukt u op "A" en u kunt het uur en de minuut instellen en u kunt deze deactiveren door voor de tijd op "B" te drukken of door tijdens het rinkelen op een willekeurige knop te drukken.

Ik hoop dat je het leuk vindt, voor elk probleem kun je contact met me opnemen.

Code

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.inoArduino
Werkt met UNO + RTC DS1302 + LCD i2c + 4x4 toetsenbord
(Grote wijzigingen aangebracht op 12/04/18 om enkele problemen op te lossen)
//Deze code is te gebruiken met DS1302 RTC-module + 4*4 toetsenbord + LCD i2c + Arduino + zoemer//Na het bedraden van de modules, zal het LCD-scherm toon de standaard datum en tijd of degene die eerder is ingesteld//Het doel van dit project is dat u de RTC-module vanaf het toetsenbord kunt instellen en ervoor zorgt dat deze opgeslagen blijft// Toon het vervolgens op het scherm en nadat u uw alarm.//Raadpleeg Surtrtech.com of SurtrTech YouTube-kanaal voor meer informatie#include  //Bibliotheken nodig#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_I2C4Ccd, ,D5_pin,D6_pin,D7_pin);virtuabotixRTC myRTC(2, 3, 4); // Bedrading van de RTC (CLK, DAT, RST) // Als je de bedrading verandert, verander dan de pinnen hier ook byte numRows =4; // aantal rijen op het toetsenbordconst byte numCols=4; //aantal kolommen op het toetsenbord//keymap definieert de ingedrukte toets volgens de rij en kolommen, net zoals weergegeven op het toetsenbordchar keymap[numRows][numCols]={{'1', '2', '3', ' A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'},{'*', '0', ' #', 'D'}};byte rowPins[numRows] ={12,11,10,9}; // Rijen 0 tot 3 // als je je pinnen wijzigt, moet je deze toobyte aanpassen colPins[numCols]={8,7,6,5}; //Kolommen 0 tot 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 buzzer =13;Toetsenblok myKeypad =Toetsenbord (makeKeymap (toetsenbord), rowPins, colPins, numRows, numCols); void setup () { Serial.begin (9600); lcd.begin (16,2); // Initialiseer de LCD lcd.setBacklightPin (BACKLIGHT_PIN,POSITIVE); lcd.set Achtergrondverlichting (HOOG); lcd.home (); }void loop() { while(keypressed ==NO_KEY){ // Zolang er geen toets wordt ingedrukt, blijven we de datum en tijd weergeven, ik ben verplicht om het scherm elke keer leeg te maken zodat de cijfers niet in de war raken // En ik zou die kleine vertraging moeten toevoegen zodat het scherm correct wordt weergegeven, anders werkte het niet voor mij keypressed =myKeypad.getKey(); lcd.wissen(); //Hier, na het wissen van het LCD-scherm, nemen we de tijd van de module en drukken het op het scherm af met de gebruikelijke LCD-functies myRTC.updateTime(); if(myRTC.hours==A_hour &&myRTC.minutes==A_minute &&AlarmIsActive==1 &&myRTC.seconds>=0 &&myRTC.seconds <=2){ while(keypressedx ==NO_KEY){ tone(buzzer, 1000); // U kunt de toon wijzigen of uw eigen geluidsvertraging maken (100); toon (zoemer, 2000); vertraging (100); lcd.wissen(); lcd.print("Sta op!!!"); // Bericht om te tonen wanneer het alarm afgaat keypressedx =myKeypad.getKey(); } } keypressedx =NO_KEY; geen toon (zoemer); lcd.setCursor(0,0); lcd.print(myRTC.dayofmonth); lcd.print("/"); lcd.print(mijnRTC.maand); lcd.print("/"); lcd.print(mijnRTC.jaar); lcd.setCursor(0,1); lcd.print(myRTC.hours); lcd.print(":"); lcd.print(mijnRTC.minuten); lcd.print(":"); lcd.print (mijnRTC.seconden); vertraging (100); } if (ingedrukte toets =='*') //Terwijl we elke keer de ingedrukte toets controleren, gaan we alleen verder met instellen als we op "*" drukken { lcd.clear(); lcd.print ("Instellen"); vertraging (1000); lcd.wissen(); lcd.print("Insteljaar"); //Dus je kunt begrijpen hoe dit werkt, eerst toont het ons "setup" dan drukt het "setup year" af en nu kun je je jaar normaal schrijven (2-0-1-8) //Het gaat automatisch over naar het instellen van de maand ... totdat het klaar is // De toetsen van het toetsenbord worden allemaal als tekens (c) beschouwd, dus we moeten ze converteren naar int dat is wat ik deed, dan slaan we ze op (i) // We doen wat wiskunde en we krijgen het jaar, maand... als int zodat we ze in de RTC kunnen injecteren, anders wordt het niet gecompileerd // Maanden zoals april moet je 04, 03 schrijven voor maart... anders gaat het niet door naar de volgende parameter // De RTC virtuabotix bibliotheek is al ingesteld om vreemde tijd en datums (4/17/1990) (58:90:70) niet te accepteren, en ja, oude datums worden als fouten beschouwd char keypressed2 =myKeypad.waitForKey(); if (keypressed2 !=NO_KEY &&keypressed2 !='*' &&keypressed2 !='#' &&keypressed2 !='A' &&keypressed2 !='B' &&keypressed2 !='C' &&keypressed2 !='D' ) { c1 =ingedrukt2; 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 =ingedrukt 3; 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 =ingedrukt 4; 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 =ingedrukt 5; lcd.setCursor (3, 1); lcd.print(c4); } i1=(c1-48)*1000; // de ingedrukte toetsen worden opgeslagen in chars. Ik converteer ze naar int en vervolgens deed ik wat vermenigvuldiging om de code te krijgen als een int van xxxx i2=(c2-48)*100; i3=(c3-48)*10; i4=c4-48; int N_jaar=i1+i2+i3+i4; vertraging (500); lcd.wissen(); lcd.print("Maand instellen");//////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey(); // hier worden alle programma's gestopt totdat je de vier cijfers invoert, dan wordt het vergeleken met de code hierboven if (keypressed6 !=NO_KEY &&keypressed6 !='*' &&keypressed6 !='#' &&keypressed6 !='A' &&keypressed6 !='B' &&ingedrukt6 !='C' &&ingedrukt6 !='D' ) { c1 =ingedrukt6; 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 =ingedrukt7; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_maand=i1+i2; vertraging (500); lcd.wissen(); lcd.print("Installatiedag"); ////////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey(); // hier worden alle programma's gestopt totdat u de vier cijfers invoert, dan wordt het vergeleken met de bovenstaande code 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 =ingedrukt9; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_dag=i1+i2; vertraging (500); lcd.wissen(); lcd.print("Insteluur");//////////////////////////////////////// ////////////////////////////////////////////:char keypressed10 =mykeypad. waitForKey(); // hier worden alle programma's gestopt totdat u de vier cijfers invoert, dan wordt het vergeleken met de bovenstaande code 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 =ingedrukt 11; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_uur=i1+i2; vertraging (500); lcd.wissen(); lcd.print("Instelminuten");//////////////////////////////////////// ////////////////////////////////////////////:char keypressed12 =mykeypad. waitForKey(); // hier worden alle programma's gestopt totdat je de vier cijfers invoert, dan wordt het vergeleken met de code hierboven 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 =ingedrukt 13; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; int N_minuten=i1+i2; vertraging (500); lcd.wissen(); myRTC.setDS1302Tijd (22, N_minuten, N_uur, 1, N_dag, N_maand, N_jaar); // zodra we klaar zijn met het instellen van de datum en tijd die we overzetten naar waarden naar de RTC-module // de 22 staat voor seconden, je kunt er ook een instelling voor toevoegen als je wilt // de 1 staat voor dag van de week, zoals lang laat ik het niet op het scherm zien ik verander het niet keypressed=NO_KEY; //de "*"-toets is opgeslagen in "ingedrukt" dus ik verwijder die waarde ervan, anders kom ik weer in de setup }//////////////////// /////////////////////Alarminstellingen/////////////////////////// ////// if (ingedrukt =='A') { lcd.clear(); lcd.print(" Alarminstelling "); vertraging (1000); lcd.wissen(); lcd.print("Stel het alarmuur in"); char keypressed14 =myKeypad.waitForKey(); // hier worden alle programma's gestopt totdat je de vier cijfers invoert, dan wordt het vergeleken met de code hierboven 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 =ingedrukt 15; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; A_uur=i1+i2; vertraging (500); lcd.wissen(); lcd.print("Stel alarmminuten in"); char keypressed16 =myKeypad.waitForKey(); // hier worden alle programma's gestopt totdat u de vier cijfers invoert, dan wordt het vergeleken met de bovenstaande code 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 =ingedrukt 17; lcd.setCursor(1, 1); lcd.print(c2); } i1=(c1-48)*10; i2=c2-48; A_minuut=i1+i2; vertraging (500); lcd.wissen(); AlarmIsActive=1; ingedrukt=NO_KEY; } if (ingedrukt =='B') { lcd.clear(); lcd.print("Alarm gedeactiveerd"); AlarmIsActive=0; ingedrukt=NO_KEY; vertraging (500); } else { mijnRTC.updateTime(); ingedrukt=NO_KEY; } }

Schema's


Productieproces

  1. LCD-paneel met Arduino voor Flight Simulator
  2. Arduino pov vision-klok
  3. DIY eenvoudigste IV9 Numitron-klok met Arduino
  4. Eenvoudige Word Clock (Arduino)
  5. Arduino klok met islamitische gebedstijden
  6. Hoofdklok
  7. Arduino Temp. Monitor en realtimeklok met 3.2-weergave
  8. Eenvoudige obstakelsensor met Arduino
  9. TM1637 digitale klok met tijdinstelling en alarmfunctie
  10. Een afbeelding weergeven op een LCD TFT-scherm met Arduino UNO!
  11. DIY eenvoudig meetwiel met roterende encoder