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 de Matriz LED de Alta Precisión con DS3231 RTC, BME280, BH1750 y Conectividad NTP ESP01

Componentes y materiales

Componente Cantidad Notas
Arduino Nano R3 1
DS3231 (Módulo RTC I2C) 1 Versión barata de eBay, quitar resistencia para evitar carga de batería
BME280 (Sensor atmosférico: Temp, Humedad, Presión) 1 Versión barata de eBay
BH1750 (Sensor de luz) 1 De eBay
Matriz LED MAX7219 32x8 1 4 módulos 8x8 en cascada
Condensador 10 µF 2 Desacoplo alimentación
ESP8266 ESP-01 1 Opcional: para sincronía NTP
LM3940IT-3.3 (Regulador LDO 3.3V) 1 Para alimentar ESP-01
Conversor de nivel lógico (Level Shifter) 1 Necesario para ESP-01 (3.3V ↔ 5V)

Sobre este proyecto

Este proyecto me inició en el mundo de Arduino. Encontré el Word Clock LED de Nick y quise hacer algo similar.

Desde que descargué su código, lo he modificado para incluir sensores adicionales y botones, así como añadir un ESP-01 para sincronización NTP.

Los botones adicionales facilitan el ajuste de configuraciones: sensor de luz, cambio de fuentes, ajustes NTP/DST/UTC.

Se han añadido 6 nuevas fuentes, creadas con dotmatrixtool.com.

He movido bastante código a PROGMEM para ahorrar RAM.

Repositorio GitHub: https://github.com/Ratti3/miniclock

Archivos de código en GitHub

Arduino LEDClock32x8.ino
ProgmemData.h
Arduino ESP-01_NTP.ino
LEDClock32x8_ESP01-NTP.ino
ProgmemData.h

Funcionamiento ESP-01 NTP

El ESP-01 duerme (WiFi apagado) cuando no se necesita, y se despierta vía serial para obtener la hora en formato UNIX. El SSID y contraseña se pasan desde el código Arduino por comodidad.

Incluye cálculos DST/UTC/BST ajustables o desactivables vía menú.

La configuración se guarda en EEPROM: los cambios persisten tras apagado/encendido.

Ejemplo de comunicación Serie Arduino ↔ ESP-01:

Arduino: Enviada petición NTP a ESP01
ESP01:   Petición NTP recibida de Arduino [intento 1 de 3]
         Conectando a SSID: MiRed....conectado
         SSID: MiRed, IP: 192.168.0.135
         RSSI: -42 dBm
         Enviando paquete NTP a: 195.195.221.100 [intento 1]
         Enviando paquete NTP a: 195.195.221.100 [intento 2]
         UNIX 1562848457
         Desactivando WiFi....ok

Nota: Debes ajustar el código del sensor de luz a tus condiciones lumínicas. Yo lo programé con luz solar intensa junto a una ventana.

Vistas del proyecto (múltiples imágenes)
[Galería de imágenes del proyecto]

Cableado (Wiring)

DS3231, BH1750, BME280 (I2C):
  SCL = A5
  SDA = A4
  VCC = 3.3V

Matriz LED MAX7219 32x8:
  CLK = D11
  CS  = D10
  DIN = D12
  VCC = 5V

Pulsadores:
  D2 - Menú
  D3 - Fecha / +
  D4 - Temperatura / -
  D5 - Opciones display

ESP-01 (Opcional):
  D7 - TX pin ESP01 (via level shifter)
  D6 - RX pin ESP01 (via level shifter)

Variables globales configurables (con ubicación EEPROM)

// Configuración reloj
// [200] Brillo por defecto (0-15), ajustable vía menú
byte intensity = 2;

// [201] Modo reloj por defecto. 0 = modo_basico
byte clock_mode = 0;

// [206] Modo aleatorio - cambia tipo display cada pocas horas. 0 = off
bool random_mode = 0;

// [207] Modo fuente aleatoria - cambia fuente cada pocas horas. 1 = on
bool random_font_mode = 0;

// [208] Formato 12/24 horas. 0 = 24h, 1 = 12h (AM/PM)
bool ampm = 0;

// Configuración luz
// [202] Modo display on/off por sensor luz. 0=normal, 1=siempre on, 2=siempre off, 3-5=definido por hour_off
byte display_mode = 5;

// [209] Ajuste automático de intensidad por sensor luz
bool auto_intensity = 1;

// Horas para apagar display si hay oscuridad (formato 24h)
byte hour_off_1 = 21;
byte hour_off_2 = 22;
byte hour_off_3 = 23;

// Configuración fuentes (ajustables vía menú)
// [203] Estilo fuente grande reloj
byte font_style = 2;

// [204] Ajuste offset fuente grande
byte font_offset = 1;

// [205] Ajuste columnas fuente grande
byte font_cols = 6;

// DST, NTP y UTC
// [210] Habilitar función DST (horario verano)
bool dst_mode = 1;

// [211] Habilitar función NTP
bool ntp_mode = 1;

// Segundos para ajustar valor NTP antes de aplicar a DS3231
byte ntp_adjust = 1;

// [213] Offset UTC (horas)
int8_t utc_offset = 0;

// Hora sincronización diaria NTP/DST (dejar 2am si se usa DST)
byte ntp_dst_hour = 2;

// Reintentos NTP (1 = ~35 seg total, valores 1-9)
byte ntp_max_retry = 3;

// Timeout NTP (segundos), se multiplica por ntp_max_retry
byte ntp_timeout = 45;

// Credenciales WiFi (pasadas a ESP01 via SoftwareSerial)
// Longitud combinada SSID + password ≤ 72 caracteres
const byte ssid_len = 8;
const char ssid[] = "TuSSID";
const byte pass_len = 12;
const char pass[] = "TuPassword";

Código

Código completo en GitHub: https://github.com/Ratti3/miniclock

Esquemáticos

[Diagrama de conexiones - El BH1750 se conecta igual que BME280 por I2C]

Esquemático de conexiones
[Imagen del esquemático]

Proceso de manufactura

  1. Construye un reloj en tiempo real con Arduino para horarios de oración islámica
  2. Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
  3. Reloj analógico por persistencia de visión (POV) con Arduino Nano – Proyecto DIY
  4. Lámpara Matriz LED con Pistola de Pegamento Caliente – Construye tu Propia Pantalla Colorida
  5. Controlar un LED de Arduino con Cortana vía Bluetooth en Windows 10
  6. Reloj flip Arduino con matriz LED 8×8: proyecto DIY de reloj en tiempo real
  7. Control de Matriz LED 8×8 con Arduino Uno: Guía Paso a Paso
  8. Reloj Preciso Basado en GPS: Precisión Asequible y Fiabilidad
  9. Matriz LED 8x8 Bluetooth con Texto Desplazable - Proyecto Arduino
  10. Crea el Clásico Juego Asteroids con Arduino Mega y Matriz LED MAX72XX
  11. Construye un reloj despertador fiable con RTC DS1302 y Arduino UNO