- Un proyecto que controla un reloj analógico de cuarzo de bajo costo con un módulo ESP8266 y un sketch de Arduino para sincronizarlo con la hora de Internet
- Obtiene la hora desde un servidor NTP cada 15 minutos para mantener la precisión, e incluye ajuste automático de horario de verano
- Se modifica el reloj separando la bobina del motor paso a paso Lavet para que el ESP8266 pueda controlarla, y se usa un chip EERAM para guardar la posición de las agujas de hora, minuto y segundo incluso cuando se corta la energía
- En la configuración inicial, una interfaz de página web provista por el ESP8266 permite indicar la posición de las agujas; después, una página de estado visualiza el estado del reloj con SVG o HTML Canvas
- Un ejemplo de código abierto que demuestra cómo implementar un reloj con sincronización precisa por red usando hardware económico, mostrando una aplicación práctica de tecnologías de control IoT embebido
Resumen del proyecto
- ESP8266 WiFi Analog Clock es un sistema que usa un módulo WEMOS D1 Mini ESP8266 y un sketch de Arduino para obtener y mostrar automáticamente la hora local desde servidores NTP (Network Time Protocol)
- Se reconecta al servidor NTP cada 15 minutos para mantener la precisión del reloj
- Incluye ajuste automático de horario de verano (Daylight Saving Time)
- El proyecto se basa en un reloj analógico de cuarzo de bajo costo y combina modificaciones de hardware con control por software
Configuración de hardware
- El reloj usado es un reloj analógico de cuarzo comprado en Walmart por US$3.88
- Se abre el movimiento de cuarzo del reloj para separar la bobina interna del motor paso a paso Lavet del oscilador de cuarzo, y se sueldan cables a cada terminal para conectarlo al ESP8266
- La mayoría de estos movimientos están ensamblados a presión, sin tornillos
- Los cables de la bobina son más finos que un cabello, así que hay que manipularlos con mucho cuidado
- El circuito terminado monta el IC EERAM y otros componentes sobre una perfboard
Funcionamiento del software
- El sketch AnalogClock.ino hace que el ESP8266 compare 10 veces por segundo la hora real con la hora mostrada por el reloj
- Si el reloj está atrasado, acelera la aguja de los segundos para sincronizarlo
- Si el reloj está adelantado, espera hasta que la hora real lo alcance
- El movimiento de la aguja de segundos se logra aplicando un pulso bipolar a la bobina del motor Lavet
- Según las características del motor, hay que ajustar la constante PULSETIME; experimentalmente, 30 ms resultó adecuado
- Los relojes baratos no tienen retroalimentación sobre la posición de las agujas, por lo que esa información se pierde cuando se corta la energía
- Para resolverlo, se usa un Microchip 47L04 Serial EERAM (SRAM de 4 Kbit + respaldo EEPROM)
- Guarda cada segundo la posición de las agujas de hora, minuto y segundo, y la restaura al volver a encenderse
Configuración inicial e interfaz web
- En la primera ejecución del sketch, el ESP8266 ofrece una página web simple para que el usuario indique la posición inicial de las agujas
- Después, el ESP8266 recuerda la posición de las agujas usando los datos guardados en la EERAM
- Durante el funcionamiento, ofrece una página de estado (status page) con tres modos de visualización
- Visualización gráfica de carátula basada en SVG
- Visualización de carátula basada en HTML Canvas
- Visualización de estado solo en texto
Licencia e información técnica
- El proyecto se publica bajo licencia MIT
- La composición principal del código es C++ 64.1% y C 35.9%
- El repositorio de GitHub tiene 252 estrellas y 2 forks
- Etiquetas relacionadas: arduino, esp8266, clock, analog-clock, ntp, hardware-construction
Importancia
- Un ejemplo práctico de cómo convertir un reloj barato en un reloj inteligente sincronizado por Wi‑Fi
- Un caso de implementación de control preciso del tiempo e interfaz web usando el entorno ESP8266 y Arduino
- Material de referencia de código abierto para aprender sobre modificación de hardware IoT y técnicas de sincronización de firmware
1 comentarios
Comentarios de Hacker News
La parte que más me llamó la atención fue el chip “SRAM with EEPROM backup”
Este chip permite guardar de forma permanente la posición de las agujas cada vez que se mueven, sin consumir la vida útil de escritura como una EEPROM común
Además cuesta menos de 1 dólar, así que es un componente útil para proyectos hobby o de pequeña escala
La SRAM y la EEPROM vienen en un mismo encapsulado junto con un controlador, y cerca hay un pequeño capacitor (4.7µF)
La SRAM conserva los datos mientras haya energía, y la EEPROM los guarda de forma permanente aunque se corte la corriente, pero tiene un límite de escrituras
El controlador detecta cuando el voltaje empieza a caer y vuelca de inmediato el contenido de la SRAM a la EEPROM
El capacitor suministra la energía necesaria para que la EEPROM pueda escribir en ese momento
Cuando vuelve la energía, los datos de la EEPROM se copian otra vez a la SRAM
La desventaja es que la capacidad es pequeña, apenas 4 kilobits, pero si puedes resolver este problema por 1 dólar, vale totalmente la pena
Sobre todo porque, si guardas logs de depuración en un ring buffer, puedes conservar los crash logs de un sistema embebido incluso sin estar conectado a una PC de desarrollo
Enlace del producto
Pero donde vivo ahora la señal es tan débil que configurarlo a mano es muy molesto
Así que hice mi propio código de Arduino usando ESP32 y un servidor NTP para emular señales de reloj atómico de distintas partes del mundo
También es bastante interesante aprender sobre la historia y las diferencias entre las señales de radiodifusión de relojes atómicos de cada país
El brillo rojo de la proyección es perfecto por la noche, pero como no tiene sincronización por Wi-Fi, no se puede ajustar con NTP ni GPS
La parte del proyector está conectada al cuerpo principal con un cable plano, así que hacerle ingeniería inversa podría ser divertido
Idealmente, estaría bueno que en el techo una matriz LED mostrara también otra información además de la hora
Sí existen productos así, pero son carísimos, como buyfrixos.com
Enlace a mi proyecto
Yo también uso varios relojes de pared baratos de ese tipo y casi no tienen desviación de hora
Incluso creo que podrían tener menos jitter que NTP
Nunca hace falta ponerlos en hora, y coinciden con los relojes NTP con menos de 1 segundo de diferencia
En cambio, los relojes del horno o del microondas sí dan ganas de apagarlos
En un mes ya van como 1 minuto adelantados, así que estaría bueno que tuvieran sincronización por Wi-Fi
Hoy en día los productos son cada vez más cerrados, y extraño poder hacer cosas simples y hackeables
Si algún día dejo de estar atado al trabajo, me gustaría fabricar yo mismo electrodomésticos simples, confiables y amigables para hackers
Ver proyectos así de verdad me impresiona
Lo compré para mi hija, pero el tic-tac irregular le distraía al estudiar, así que ahora está descansando
Aun así, fue una experiencia bastante divertida
Eso sí, si tienes varios relojes en casa, tienes que decidirte a usar solo uno para que funcione
Introducción al Gents Turret Movement
Yo usé uno de esos para hacer un reloj electromecánico basado en un diapasón
En vez de una fuente de tiempo precisa, funciona con un diapasón y lógica 74xx
Me pregunto por qué Accutron ya no sigue fabricándolos
El uso de la frecuencia de resonancia es parecido al de un reloj de cuarzo, pero visualmente mucho más atractivo
Si no, los picos pueden causar fallos o incluso dañar el microcontrolador
Lo ideal es aislar el voltaje de compuerta con un optotransistor y alimentar el motor por separado
También tiene proyecto en GitHub
Todavía quedan muchos decks viejos y controladores LANC, así que tiene bastante potencial
Aunque el reloj conozca la hora exacta, si la velocidad real de accionamiento se va desajustando poco a poco, el error acumulado puede crecer bastante
Sobre todo si la constante PULSETIME está mal configurada aunque sea por 1 ms, podría aparecer una diferencia en solo un día
Claro, el motor paso a paso Lavet en teoría mantiene pasos basados en una frecuencia constante, pero también podría haber sesgos por desgaste o ruido
De todos modos, para el nivel de un reloj de pared quizá sea un error despreciable
Si revisas esta explicación en Wikipedia, se entiende fácil
pulsetimees solo el tiempo necesario para avanzar un pasoMientras no se pierdan pasos, no se acumula error
Es decir, basta con mantener el conteo de pasos correctamente