Reloj Despertador LCD Multi-Pantalla con Caras Personalizables
Componentes y suministros
| Arduino UNO (si usa PCB incluido: ATmega328 DIL, cristal 16MHz, 2×22pF, regulador 7805, 100µF 16V, 3×0.1µF, 1µF) | × | 1 |
| Resistencia 10 kΩ | × | 4 |
| Resistencia 470 Ω (agujero pasante) | × | 1 |
| LCD Estándar Adafruit 16x2 Blanco sobre Azul | × | 1 |
| Zumbador (buzzer) | × | 1 |
| Condensador 10 µF | × | 1 |
| Reloj Tiempo Real (RTC) DS1302 | × | 1 |
| Cristal 32.768 kHz (para RTC) | × | 1 |
| Pila botón CR2032 + soporte (PCB usa CR1220) | × | 1 |
| Interruptor de inclinación (mercurio) | × | 1 |
| Potenciómetro recortable 10 kΩ (contraste LCD) | × | 1 |
Herramientas necesarias
- Impresora 3D (genérica)
Aplicaciones y servicios
- Arduino IDE
Sobre el proyecto
Una nueva versión con 10 caras de reloj está disponible aquí.
Buscando algo que construir, me decidí por un reloj LCD 1602. Tras ver muchas implementaciones web, pensé: ¿por qué no hacer un reloj que las incorpore todas?
Características del reloj
- 8 estilos de visualización diferentes
- Ajuste de hora, fecha actual, fecha de nacimiento y alarma
- Interruptor de mercurio para apagar alarma
- Control de retroiluminación
- Sensor Temperatura/Humedad DHT21
Versión en protoboard
La electrónica es bastante simple. (El DHT21 no se muestra en la foto: va al pin D9).

Cargar el sketch en Arduino IDE y subir a Arduino UNO.
Uso del reloj
Tres botones: SETUP, INCREMENTO, DECREMENTO + interruptor de INCLINACIÓN.
- Retroiluminación apagada: cualquier botón la enciende. Si no se pulsa nada 5 seg (10 seg en v. actualizada), se apaga sola.
- Retroiluminación encendida:
- SETUP: accede a pantallas de configuración. Cursor '>'. INCREMENTO/DECREMENTO cambian valor. SETUP cicla: Hora, Minuto, Día, Mes, Año, Día Nacimiento, Mes Nacimiento, Año Nacimiento, Hora Alarma, Min Alarma, volver a MODO RELOJ.
- INCREMENTO: fuera de SETUP, cambia entre 8 estilos de reloj.
- DECREMENTO: fuera de SETUP, activa/desactiva alarma.
- INTERRUPTOR INCLINACIÓN: suena alarma → inclinar reloj o pulsar cualquier botón para apagarla.
Construcción del reloj terminado
Requiere PCB y componentes extra. Archivos Eagle adjuntos para fabricación comercial o método tóner (casero).
Nota: El LCD 1602 se conecta al PCB principal con header macho en ángulo recto. Si ya están soldados, meter placa+pantalla en la caja es difícil. PCB doble cara con metalizado agujeros permite soldar display in-situ.
Componentes usados: ATmega328 DIL + cristal 16MHz + 2×22pF cerámicos. Regulador 7805 TO-220 + 100µF 16V suavizado. RTC DS1302 + cristal 32.768kHz. Zumbador pasivo + 10µF 16V aislamiento DC. Condensadores 0.1µF y 1µF cerámicos monolíticos (espaciado 5mm). Resistencias 5% 1/8W (o 1/4W). Interruptor mercurio cualquier tamaño (el mío 5mm). 3 pulsadores táctiles 6×6mm eje 13mm en parte trasera PCB.
Caja impresa 3D (altura capa 0.2mm, sin soportes). Taladrar agujeros fijación PCB con broca 2.5mm, roscar M3. Tornillos M3 6mm. También taladré 4mm los agujeros PCB para ajuste y evitar que botones rocen al atornillar.
Créditos
Este reloj es un mash-up de varios relojes de makers a lo largo de los años. Base: Arduino Digital Clock With Alarm Function (custom PCB). Modifiqué la caja a 2 piezas (era 4).
- Pantalla estándar: Michalis Vasilakis
- Fuente Dual Gruesa: Arduino World
- Fuente Dual Biselada: Arduino Forum
- Fuente Dual Trek: Carrie Sundra
- Fuente Dual Fina: Arduino World
- Concepto Reloj Palabras: LAGSILVA
- Reloj Biorritmo: John Bradnam
- Reloj Meteorológico: ARDUinoautoMOTIVE
Actualizaciones
29/06/20
- Corregidos errores ortográficos en reloj PALABRAS
- Añadidos
#definepara control retroiluminación - Timeout retroiluminación 5→10 segundos
23/11/20
- Añadida configuración fecha nacimiento y almacenamiento EEPROM
- Añadida cara reloj Biorritmo
- Limpieza código pantallas SETUP
Hipótesis: según fecha nacimiento, biorritmos determinan altibajos vitales. 3 ciclos: físico 23 días, emocional 28, intelectual 33. El reloj muestra cada estado como barra: positiva (barra superior) o negativa (inferior). Longitud = intensidad.

06/12/20
- Añadido soporte DHT21
- Añadida cara Termómetro/Higrómetro
Nueva cara meteorológica: lee sensor DHT21 en parte trasera de la caja. PCB actualizado con conector 3 pines para DHT21.

Código
DigitalClockAlarmV7.ino (C/C++)
/* Reloj alarma LCD 1602 * by John Bradnam (jbrad2089@gmail.com)
Pantalla 16x2: Setup, Setup Alarma
25/06/2020 - Base: reloj Michalis Vasilakis - Modif. HW: DS1302 RTC, backlight
- Soporte estilos display: Estándar, Dual Gruesa, Dual Bisel, Dual Trek, Dual Fina, Palabras, Biorritmo, Termómetro */
#include <Wire.h>
#include <TimeLib.h>
#include <DS1302RTC.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <dht.h>
// Descomentar para formato 12h en Dual Gruesa/Fina
//#define DUAL_THICK_12HR
//#define DUAL_THIN_12HR
// Control backlight
//#define NO_BACKLIGHT
//#define BACKLIGHT_ALWAYS_ON
#define BACKLIGHT_TIMEOUT 10000
// Test gráficos biorritmo
//#define TEST_BIO_GRAPHS
// Pines
#define LIGHT 2
#define LCD_D7 3
#define LCD_D6 4
#define LCD_D5 5
#define LCD_D4 6
#define LCD_E 7
#define LCD_RS 8
#define BTN_SET A0
#define BTN_ADJUST A1
#define BTN_ALARM A2
#define BTN_TILT A3
#define SPEAKER 11
#define DHT21 9
#define RTC_CE 10
#define RTC_IO 12
#define RTC_SCLK 13
// Objetos y constantes
LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
DS1302RTC rtc(RTC_CE, RTC_IO, RTC_SCLK);
dht DHT;
char daysOfTheWeek[7][12] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
const int monthDays[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
long interval = 300;
int melody[] = {600,800,1000,1200};
// Variables tiempo, alarma, fecha nacimiento, estilo, flags, etc.
// ...
enum STYLE { STANDARD, DUAL_THICK, DUAL_BEVEL, DUAL_TREK, DUAL_THIN, WORD, BIO, THERMO };
STYLE currentStyle = STANDARD;
enum SETUP { CLOCK, TIME_HOUR, TIME_MIN, TIME_DAY, TIME_MONTH, TIME_YEAR, BIRTH_DAY, BIRTH_MONTH, BIRTH_YEAR, ALARM_HOUR, ALARM_MIN };
SETUP setupMode = CLOCK;
bool backlightOn = false;
long backlightTimeout = 0;
byte customChar[8];
// Direcciones EEPROM
#define EEPROM_AH 0 // Alarm Hours
#define EEPROM_AM 1 // Alarm Minutes
#define EEPROM_AO 2 // Alarm On/Off
#define EEPROM_CS 3 // Current Style
#define EEPROM_BY 4 // Birth Year (2 bytes)
#define EEPROM_BM 6 // Birth Month
#define EEPROM_BD 7 // Birth Day
// ... (resto del código: caracteres personalizados, fuentes grandes, lógica principal, funciones de cada estilo)
// Código completo disponible en adjuntos / repositorio.
Piezas personalizadas y envolventes
stl_files_ZuDXHCHZCl.zip (archivos STL para impresión 3D)
Esquemáticos
Esquemático y PCB en archivos Eagle: eagle_files_ZN59zdeNf5.zip
Proceso de manufactura
- Construya una Alarma de Agua Headless para Raspberry Pi 2 con Adafruit T‑Cobbler Plus
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Despertador inteligente activado por movimiento: Levántate de una vez
- Construye un reloj Numitron retro con Arduino: Simple, fiable y eficiente energéticamente
- Construye un reloj en tiempo real con Arduino para horarios de oración islámica
- Reloj de Palabras de Precisión: Visualización del Tiempo en Palabras Minuto a Minuto
- Monitor de Temperatura y Reloj en Tiempo Real con Arduino Due y Pantalla TFT 3.2"
- 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
- Reloj Meteorológico Arduino en Tiempo Real: Pantalla OLED para Hora, Fecha y Temperatura
- Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO