Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO
Componentes y suministros
| Módulo Reloj Tiempo Real (RTC) DS1302 | 1 |
| Zumbador (buzzer) | 1 |
| Pantalla LCD estándar 16x2 Blanco sobre Azul (Adafruit) | 1 |
| Arduino UNO | 1 |
| Teclado matriz 4x4 | 1 |
Sobre el proyecto
Hola a todos, en este proyecto intentaremos hacer un reloj despertador fácil con placa Arduino UNO. Este proyecto es una mezcla de diferentes módulos que usé antes; si te atascas en algo puedes consultar en la web el tutorial del módulo, porque así suelo trabajar: hago las cosas por separado y luego las mezclo. :D
Para este proyecto necesitaremos:
- Placa Arduino UNO (o la que prefieras)
- Módulo RTC DS1302
- Módulo teclado matriz 4x4
- Pantalla LCD I2C
- Módulo zumbador o zumbador de 2 pines
En caso de que te atascas, puedes consultar estos tutoriales previos sobre los módulos anteriores:
- Cómo configurar módulo RTC DS1302 con Teclado + Arduino + LCD
- Cómo usar simplemente módulo RTC DS1302 con placa Arduino y pantalla LCD
- Uso simple de Arduino LCD I2C y escritura directa desde monitor serie
- Arduino UNO + Teclado Matriz 4x4 + Pantalla LCD I2C
- Cómo usar un zumbador/piezo speaker con Arduino
Cableado

Librerías y Código
- Librería LCD I2C (puedes elegir esta o descargar la tuya)
- Librería Keypad (o descargarla desde el IDE Arduino)
- Librería RTC DS1302 virtuabotix
Código
Descargar código
El funcionamiento del código es bastante simple. Tras cablear los módulos, puedes pulsar "*" para ajustar la hora y fecha en el RTC DS1302; la pantalla mostrará entonces el día y hora actuales. Si quieres configurar la alarma pulsas "A" y puedes ajustar hora y minuto, y puedes desactivarla pulsando "B" antes de la hora o pulsando cualquier botón mientras suena.
Espero que os guste, cualquier problema podéis contactarme.
// Este código es para usar con módulo RTC DS1302 + Teclado 4x4 + LCD I2C + Arduino + Zumbador
// Tras cablear los módulos, el LCD mostrará la fecha y hora por defecto o la configurada antes
// El objetivo es que puedas configurar el módulo RTC desde el teclado, y se quede guardado
// Luego mostrarlo en pantalla y después configurar tu alarma.
// Referencia: Surtrtech.com o canal SurtrTech YouTube para más información
#include
#include
#include
#include
#define I2C_ADDR 0x27 // LCD I2C
#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 7
LiquidCrystal_I2C lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);
virtuabotixRTC myRTC(2, 3, 4); // Cableado RTC (CLK,DAT,RST) - cambiar pines aquí si modificas cableado
const byte numRows= 4; // filas teclado
const byte numCols= 4; // columnas teclado
char keymap[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
byte colPins[numCols]= {8,7,6,5}; // Columnas 0 a 3
int 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;
Keypad myKeypad= Keypad(makeKeymap(keymap), rowPins, colPins, numRows, numCols);
void setup() {
Serial.begin(9600);
lcd.begin (16,2);
lcd.setBacklightPin(BACKLIGHT_PIN,POSITIVE);
lcd.setBacklight(HIGH);
lcd.home ();
}
void loop() {
while(keypressed == NO_KEY){
keypressed = myKeypad.getKey();
lcd.clear();
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);
delay(100);
tone(buzzer, 2000);
delay(100);
lcd.clear();
lcd.print("Get up !!!");
keypressedx = myKeypad.getKey();
}
}
keypressedx = NO_KEY;
noTone(buzzer);
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);
delay(100);
}
if (keypressed == '*') {
lcd.clear();
lcd.print(" Setup");
delay(1000);
lcd.clear();
lcd.print("Setup year");
// ... (código de configuración fecha/hora omitido por brevedad)
// Configura año, mes, día, hora, minutos secuencialmente
// Al final: myRTC.setDS1302Time(22, N_minutes, N_hour, 1, N_day, N_month, N_year);
keypressed=NO_KEY;
}
// Configuración alarma
if (keypressed == 'A'){
lcd.clear();
lcd.print(" Alarm setup ");
delay(1000);
lcd.clear();
lcd.print("Set alarm hour");
// ... (código configuración hora y minutos alarma)
AlarmIsActive=1;
keypressed=NO_KEY;
}
if (keypressed == 'B') {
lcd.clear();
lcd.print("Alarm deactivated");
AlarmIsActive=0;
keypressed=NO_KEY;
delay(500);
} else {
myRTC.updateTime();
keypressed=NO_KEY;
}
}
Esquemáticos

Proceso de manufactura
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Reloj POV con Arduino: Construye una pantalla LED de persistencia de visión
- Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
- Reloj de Palabras DIY con Arduino: Construye una Pantalla Elegante en Tiempo Real
- Construye un reloj en tiempo real con Arduino para horarios de oración islámica
- Construye un Reloj Maestro LED Personalizado con Alarma – Visible desde 12 Metros
- Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
- Sensor de obstáculos IR casero con Arduino – Tutorial fácil con LED IR y fotodiodo
- Reloj Digital TM1637 con Configuración de Hora y Alarma - Prototipo Arduino Nano
- Cómo mostrar imágenes en una pantalla TFT LCD de 1.17 pulgadas con Arduino UNO
- Construir una rueda medidora DIY precisa con Arduino Nano y encoder rotativo