Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Reloj despertador simple con DS1302 RTC

Componentes y suministros

Reloj en tiempo real (RTC)
× 1
Buzzer
× 1
LCD estándar Adafruit - 16x2 blanco sobre azul
× 1
Arduino UNO
× 1

Acerca de este proyecto

Hola a todos, en este proyecto intentaremos hacer un despertador sencillo con la placa Arduino UNO. Este proyecto es una combinación de diferentes módulos que usé antes, si estás atascado en algo, puedes consultar el tutorial del módulo en el sitio web, porque así es como suelo trabajar:haz las cosas por separado y luego comienza a mezclar. :D

Para este proyecto, necesitaremos:

  • Placa Arduino UNO, o puede usar la que más le convenga:
  • Módulo DS1302 RTC:
  • Módulo de teclado matricial 4 * 4:
  • Pantalla LCD I2C:
  • Módulo de zumbador o zumbador de 2 pines:

En caso de que esté atascado en algo, puede consultar estos tutoriales anteriores sobre los módulos anteriores:

Cómo configurar el módulo DS1302 RTC con teclado + Arduino + LCD

Cómo usar simplemente el módulo DS1302 RTC con placa Arduino y pantalla LCD

Arduino LCD I2C uso simple y escritura directa desde el monitor serial Arduino LCD I2C uso simple y escritura directa desde el monitor serial

Arduino uno + Matriz de teclado 4 × 4 + pantalla LCD i2c

Cómo utilizar un zumbador / altavoz piezoeléctrico con Arduino

Cableado:

Bibliotecas y código:

Biblioteca LCD i2c Puede elegir esta o descargar la suya propia

Biblioteca de teclado O puede descargarlo desde Arduino IDE

Biblioteca virtuabotix RTC DS1302

Código:

Descargar código

El funcionamiento del código es bastante simple, después de cablear el módulo, puede presionar "*" para configurar la hora y la fecha en el DS1302 RTC, la pantalla mostrará el día y la hora actuales si desea configurar la alarma, presione "A" y puede establecer qué hora y minuto, y puede desactivarlo presionando "B" antes de la hora o presionando cualquier botón mientras suena.

Espero que les guste, cualquier problema me pueden contactar.

Código

  • RTC_alarm_clock_LCD.ino
RTC_alarm_clock_LCD.ino Arduino
Funciona con UNO + RTC DS1302 + LCD i2c + teclado 4x4
(Mayores cambios hechos el 12/04/18 para resolver algunos problemas)
 // Este código es para usar con el módulo DS1302 RTC + Teclado 4 * 4 + LCD i2c + Arduino + Buzzer // Después de cablear los módulos, el LCD mostrar la fecha y hora predeterminadas o la establecida antes // El objetivo de este proyecto es que pueda configurar el módulo RTC desde el teclado, y asegurarse de que permanecerá almacenado // Luego muéstrelo en la pantalla y después puede configurar su alarm.// Consulte Surtrtech.com o el canal de youtube de SurtrTech para obtener más información. 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 lcd (I2C_ADDR, D4_pin, Rspin, , D5_pin, D6_pin, D7_pin); virtuabotixRTC myRTC (2, 3, 4); // Cableado del RTC (CLK, DAT, RST) // Si cambia el cableado, cambie los pines aquí también const byte numRows =4; // número de filas en el byte keypadconst numCols =4; // número de columnas en el teclado // mapa de teclas define la tecla presionada de acuerdo con la fila y las columnas tal como aparece en el mapa de teclas del teclado [numRows] [numCols] ={{'1', '2', '3', ' A '}, {' 4 ',' 5 ',' 6 ',' B '}, {' 7 ',' 8 ',' 9 ',' C '}, {' * ',' 0 ',' # ',' D '}}; byte rowPins [numRows] ={12,11,10,9}; // Filas 0 a 3 // si modificas tus pines debes modificar este toobyte colPins [numCols] ={8,7,6,5}; // Columnas 0 a 3int i1, i2, i3, i4; char c1, c2, c3, c4; char tecla presionada, tecla presionadax; int A_hour =NULL; int A_minute =NULL; int AlarmIsActive =NULL; int buzzer =13; Teclado myKeypad =Teclado (makeKeymap (mapa de teclas), rowPins, colPins, numRows, numCols); void setup () {Serial.begin (9600); lcd. comienzo (16,2); // Inicializar la pantalla LCD lcd.setBacklightPin (BACKLIGHT_PIN, POSITIVE); lcd.setBacklight (ALTO); casa lcd (); } void loop () {while (keypressed ==NO_KEY) {// Mientras no se presione ninguna tecla, seguimos mostrando la fecha y la hora, estoy obligado a borrar la pantalla cada vez para que los números no se confundan // Y debería agregar ese pequeño retraso para que la pantalla se muestre correctamente; de ​​lo contrario, no funcionó para mí keypressed =myKeypad.getKey (); lcd.clear (); // Aquí, después de limpiar la pantalla LCD, tomamos el tiempo del módulo y lo imprimimos en la pantalla con las funciones habituales de la pantalla LCD myRTC.updateTime (); if (myRTC.hours ==A_hour &&myRTC.minutes ==A_minute &&AlarmIsActive ==1 &&myRTC.seconds> =0 &&myRTC.seconds <=2) {while (tecla presionadax ==NO_KEY) {tono (zumbador, 1000); // Puede modificar el tono o hacer su propio retardo de sonido (100); tono (zumbador, 2000); retraso (100); lcd.clear (); lcd.print ("¡¡¡Levántate !!!"); // Mensaje para mostrar cuando suena la alarma keypressedx =myKeypad.getKey (); }} tecla presionadax =NO_KEY; noTone (zumbador); lcd.setCursor (0,0); lcd.print (myRTC.dayofmonth); lcd.print ("/"); lcd.print (myRTC.month); lcd.print ("/"); lcd.print (myRTC.year); lcd.setCursor (0,1); lcd.print (myRTC.hours); lcd.print (":"); lcd.print (myRTC.minutes); lcd.print (":"); lcd.print (myRTC.seconds); retraso (100); } if (keypressed =='*') // Como cada vez que verificamos la tecla presionada, solo procedemos a la configuración si presionamos "*" {lcd.clear (); lcd.print ("Configuración"); retraso (1000); lcd.clear (); lcd.print ("Año de instalación"); // Para que puedas entender cómo funciona esto, primero nos muestra "configuración", luego imprime "año de configuración" y ahora puedes escribir tu año normalmente (2-0-1-8) // Pasa automáticamente a configurar el mes ... hasta que termine // Todas las teclas del teclado se consideran caracteres (c) así que deberíamos convertirlas a int, eso es lo que hice y luego las almacenamos (i) // Hacemos algunas matemáticas y obtenemos el año, mes ... como int para que podamos inyectarlos al RTC de lo contrario no se compilará // Meses como abril debe escribir 04, 03 para marzo ... de lo contrario no pasará al siguiente parámetro // El virtuabotix del RTC la biblioteca ya está configurada para no aceptar fechas y horas extrañas (45/17/1990) (58:90:70), y sí, las fechas antiguas se consideran errores char keypressed2 =myKeypad.waitForKey (); if (tecla presionada2! =NO_KEY &&tecla presionada2! ='*' &&tecla presionada2! ='#' &&tecla presionada2! ='A' &&tecla presionada2! ='B' &&tecla presionada2! ='C' &&tecla presionada2! ='D') { c1 =tecla presionada2; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed3 =myKeypad.waitForKey (); if (tecla presionada3! =NO_KEY &&tecla presionada3! ='*' &&tecla presionada3! ='#' &&tecla presionada3! ='A' &&tecla presionada3! ='B' &&tecla presionada3! ='C' &&tecla presionada3! ='D') { c2 =tecla presionada3; lcd.setCursor (1, 1); lcd.print (c2); } char keypressed4 =myKeypad.waitForKey (); if (tecla presionada4! =NO_KEY &&tecla presionada4! ='*' &&tecla presionada4! ='#' &&tecla presionada4! ='A' &&tecla presionada4! ='B' &&tecla presionada4! ='C' &&tecla presionada4! ='D') { c3 =tecla presionada4; lcd.setCursor (2, 1); impresión lcd (c3); } char keypressed5 =myKeypad.waitForKey (); if (tecla presionada5! =NO_KEY &&tecla presionada5! ='*' &&tecla presionada5! ='#' &&tecla presionada5! ='A' &&tecla presionada5! ='B' &&tecla presionada5! ='C' &&tecla presionada5! ='D') { c4 =tecla presionada5; lcd.setCursor (3, 1); impresión lcd (c4); } i1 =(c1-48) * 1000; // las teclas presionadas se almacenan en caracteres. Las convierto a int y luego hice algunas multiplicaciones para obtener el código como un int de xxxx i2 =(c2-48) * 100; i3 =(c3-48) * 10; i4 =c4-48; int N_año =i1 + i2 + i3 + i4; retraso (500); lcd.clear (); lcd.print ("Mes de configuración"); ////////////////////////////////////////// //////////////////////// char keypressed6 =myKeypad.waitForKey (); // aquí todos los programas se detienen hasta que ingresa los cuatro dígitos y luego se compara con el código anterior si (keypressed6! =NO_KEY &&keypressed6! ='*' &&keypressed6! ='#' &&keypressed6! ='A' &&keypressed6 ! ='B' &&tecla presionada6! ='C' &&tecla presionada6! ='D') {c1 =tecla presionada6; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed7 =myKeypad.waitForKey (); if (tecla presionada7! =NO_KEY &&tecla presionada7! ='*' &&tecla presionada7! ='#' &&tecla presionada7! ='A' &&tecla presionada7! ='B' &&tecla presionada7! ='C' &&tecla presionada7! ='D') { c2 =tecla presionada7; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_mes =i1 + i2; retraso (500); lcd.clear (); lcd.print ("Día de instalación"); //////////////////////////////////////////////////// ////////////// char keypressed8 =myKeypad.waitForKey (); // aquí todos los programas se detienen hasta que ingresa los cuatro dígitos y luego se compara con el código anterior if (keypressed8! =NO_KEY &&keypressed8! ='*' &&keypressed8! ='#' &&keypressed8! ='A' &&keypressed8 ! ='B' &&tecla presionada8! ='C' &&tecla presionada8! ='D') {c1 =tecla presionada8; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed9 =myKeypad.waitForKey (); if (tecla presionada9! =NO_KEY &&tecla presionada9! ='*' &&tecla presionada9! ='#' &&tecla presionada9! ='A' &&tecla presionada9! ='B' &&tecla presionada9! ='C' &&tecla presionada9! ='D') { c2 =tecla presionada9; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_día =i1 + i2; retraso (500); lcd.clear (); lcd.print ("Hora de configuración"); ////////////////////////////////////////// //////////////////////////////////////////////:char keypressed10 =myKeypad. waitForKey (); // aquí todos los programas se detienen hasta que ingresa los cuatro dígitos y luego se compara con el código anterior si (keypressed10! =NO_KEY &&keypressed10! ='*' &&keypressed10! ='#' &&keypressed10! ='A' &&keypressed10 ! ='B' &&tecla presionada10! ='C' &&tecla presionada10! ='D') {c1 =tecla presionada10; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed11 =myKeypad.waitForKey (); if (tecla presionada11! =NO_KEY &&tecla presionada11! ='*' &&tecla presionada11! ='#' &&tecla presionada11! ='A' &&tecla presionada11! ='B' &&tecla presionada11! ='C' &&tecla presionada11! ='D') { c2 =tecla presionada11; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_hora =i1 + i2; retraso (500); lcd.clear (); lcd.print ("minutos de configuración"); ////////////////////////////////////////// //////////////////////////////////////////////:char keypressed12 =myKeypad. waitForKey (); // aquí todos los programas se detienen hasta que ingresa los cuatro dígitos y luego se compara con el código anterior si (keypressed12! =NO_KEY &&keypressed12! ='*' &&keypressed12! ='#' &&keypressed12! ='A' &&keypressed12 ! ='B' &&tecla presionada12! ='C' &&tecla presionada12! ='D') {c1 =tecla presionada12; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed13 =myKeypad.waitForKey (); if (tecla presionada13! =NO_KEY &&tecla presionada13! ='*' &&tecla presionada13! ='#' &&tecla presionada13! ='A' &&tecla presionada13! ='B' &&tecla presionada13! ='C' &&tecla presionada13! ='D') { c2 =tecla presionada13; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; int N_minutos =i1 + i2; retraso (500); lcd.clear (); myRTC.setDS1302Time (22, N_minutos, N_horas, 1, N_día, N_mes, N_year); // una vez que terminamos de configurar la fecha y la hora, transferimos los valores al módulo RTC // el 22 representa los segundos, también puede agregar una configuración si lo desea // el 1 representa el día de la semana, como mientras no lo muestre en la pantalla, no lo cambio keypressed =NO_KEY; // la tecla "*" se almacena en "tecla presionada", por lo que elimino ese valor, de lo contrario, volverá a entrar en la configuración} ////////////////////// /////////////////////// Configuración de alarma ///////////////////////////// ////// if (tecla presionada =='A') {lcd.clear (); lcd.print ("Configuración de alarma"); retraso (1000); lcd.clear (); lcd.print ("Establecer hora de alarma"); char keypressed14 =myKeypad.waitForKey (); // aquí todos los programas se detienen hasta que ingresa los cuatro dígitos y luego se compara con el código anterior si (keypressed14! =NO_KEY &&keypressed14! ='*' &&keypressed14! ='#' &&keypressed14! ='A' &&keypressed14 ! ='B' &&tecla presionada14! ='C' &&tecla presionada14! ='D') {c1 =tecla presionada14; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed15 =myKeypad.waitForKey (); if (tecla presionada15! =NO_KEY &&tecla presionada15! ='*' &&tecla presionada15! ='#' &&tecla presionada15! ='A' &&tecla presionada15! ='B' &&tecla presionada15! ='C' &&tecla presionada15! ='D') { c2 =tecla presionada15; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; A_hora =i1 + i2; retraso (500); lcd.clear (); lcd.print ("Establecer minutos de alarma"); char keypressed16 =myKeypad.waitForKey (); // aquí todos los programas se detienen hasta que ingresa los cuatro dígitos y luego se compara con el código anterior if (keypressed16! =NO_KEY &&keypressed16! ='*' &&keypressed16! ='#' &&keypressed16! ='A' &&keypressed16 ! ='B' &&tecla presionada16! ='C' &&tecla presionada16! ='D') {c1 =tecla presionada16; lcd.setCursor (0, 1); lcd.print (c1); } char keypressed17 =myKeypad.waitForKey (); if (tecla presionada17! =NO_KEY &&tecla presionada17! ='*' &&tecla presionada17! ='#' &&tecla presionada17! ='A' &&tecla presionada17! ='B' &&tecla presionada17! ='C' &&tecla presionada17! ='D') { c2 =tecla presionada17; lcd.setCursor (1, 1); lcd.print (c2); } i1 =(c1-48) * 10; i2 =c2-48; A_minuto =i1 + i2; retraso (500); lcd.clear (); AlarmIsActive =1; tecla presionada =NO_KEY; } if (tecla presionada =='B') {lcd.clear (); lcd.print ("Alarma desactivada"); AlarmIsActive =0; tecla presionada =NO_KEY; retraso (500); } else {myRTC.updateTime (); tecla presionada =NO_KEY; }} 

Esquemas


Proceso de manufactura

  1. Panel LCD con Arduino para Flight Simulator
  2. Reloj de visión pov de Arduino
  3. El reloj IV9 Numitron más simple de bricolaje con Arduino
  4. Reloj de palabras simple (Arduino)
  5. Reloj Arduino con tiempos de oración islámicos
  6. Reloj maestro
  7. Arduino Temp. Monitor y reloj en tiempo real con pantalla 3.2
  8. Sensor de obstáculos simple con Arduino
  9. TM1637 Reloj digital con configuración de hora y funcionalidad de alarma
  10. ¡Visualización de una imagen en una pantalla LCD TFT con Arduino UNO!
  11. Rueda de medición simple de bricolaje con codificador giratorio