EL EXTRAÑO RELOJ EN NTP
Estimados ElectroFriends,
Que ha sido un tiempo’ de tiempo que no veo nuevas publicaciones .... Espero que no sea culpa de algún virus y espero que todos estén bien de salud. Yo personalmente no tengo (Afortunadamente) problemas, pero desde el punto de vista social tendría una cantidad industrial. Vivo a 1000 metros en un país que debería ser un destino turístico: pero caminar por el país en este período es como estar en un desierto. De hecho, quizás el desierto esté más vivo.
Pero dejémoslo en paz y lleguemos al propósito de este artículo.. A estas alturas ya sabes que estoy obsesionado con los relojes y creo que he producido algunas decenas de los actuales y otros más antiguos y en desuso..
Esta vez he sacado un reloj que solo marca las horas. E y minutos ?. Sí, incluso esos pero cada uno 5 acta.
Esta foto representa el producto terminado. (por así decirlo: ten piedad de la estética): Lo usé como base para el 12 LEDs que representan las horas, un disco canibalizado por un Hard_Disk fallido. Cada LED representa una hora según la disposición clásica de todas las esferas del reloj..
Las siguientes fotos: frente del reloj y hardware interno:

E y minutos ??. Ellos también están representados pero con un paso de 5 utilizando los leds de las horas y haciéndolos parpadear con precisión durante 5 acta. Los dos LED centrales definen AM / PM.
Tomemos un ejemplo: Mineral 10 mi 17 acta: El led de la hora se enciende 10 y el led de la hora "3" que parpadea hasta que los minutos pasan un 20 haciendo que el led de la hora "4" parpadee y así sucesivamente. Que pasa por el momento (por ejemplo) como el 10,10. Solo el led de la hora "10" parpadeará para indicar la 10 mi 10 acta. Y este sistema es válido para todos los minutos que coincidan con las horas.
Digamos entonces que el reloj nunca da la hora exacta !. Pero sabiendo el truco siempre podemos decir que son las X horas a caballo 5 acta. En cambio, el reloj ES preciso. ¿Por qué ?.
Porque me cansé de los diversos RTC de tipo DS1307, DS3231 y otros que nunca son precisos a lo largo del tiempo y que siempre necesitan algún ajuste. Hay otras formas de tener un cronograma preciso: por ejemplo, obtenga de la red 220V i 50 Hz disponible con un circuito muy simple y que con un circuito divisor adecuado es posible obtener la frecuencia de 1 HZ capaz de impulsar los circuitos de conteo a partir de los segundos.. Pero esta solución estaba bien hace algunas décadas.: Lo usé yo mismo para producir el primer reloj digital.. Está claro que hoy en día este camino no es viable por una serie de razones.: 1) la tensión 220 es peligroso, 2) necesitas varios integrados para hacerlo todo, 3) No es conveniente. Entonces en este proyecto confié en INTERNET ahora. Es decir, recuperar la fecha y la hora de los servidores NTP que gestionan la hora. Ya había producido un reloj que, a través de una pantalla LCD, mostraba la fecha y hora completas tomadas de los servidores NTP..

Así que veamos las características de la construcción.:
El hardware utilizado:
• Micro Arduino Nano 328 como motor principal para la gestión del reloj
• Micro ESP8266_1 para administrar el servidor NTP
• MAX7219 para la gestión de los LED. gran: con 3 alambres vuelan 64 led con solo uno integrado con posibilidad de conectar otros chips en serie.
• 12 LED (modelo de cilindro de alto brillo blanco frío).
• N.1 Convertidor de nivel bidireccional 3V / 5V para adaptar los niveles de ESP a los de Arduino
• Módulo N.1 Controlador AMS1117 (da 5V a 3V) para alimentar el micro ESP
El convertidor de nivel es necesario ya que el ESP solo funciona a 3V y, por lo tanto, todos los niveles de PIN se gestionan con este nivel.. El regulador de voltaje para tener el 3V se usa para alimentar el ESP independientemente del Micro Arduino_Nano (que a su vez tiene una salida de 3V).
Software:
IDE de ARDUINO para la compilación y programación del boceto relativo a la gestión del servidor NTP. El IDE debe configurarse adecuadamente para reconocer la serie ESP desde la más pequeña hasta la más versátil en términos de funcionalidad y presencia de PIN.. La lista de "TARJETAS"Y"LIBRERÍAS”. El esquema PRINCIPAL para la gestión puede ser gestionado por ARDUINO IDE: Personalmente, prefiero usar otro IDE con un rendimiento mucho mejor: CÓDIGO:CUADRA. Funciona perfectamente para lo que concierne a casi todas las versiones de ARDUINO, incluidas las bibliotecas estándar.. Es muy rápido y tiene una práctica "finalización automática" para cada función / instrucción.. Y los mensajes de error son mucho más claros que los del Arduino IDE. No se actualiza a las bibliotecas WIFI.. Y si no se necesitan bibliotecas para el boceto, simplemente insértelas en el "proyecto" como un archivo .hy .cpp.
Para la gestión de MAX7219 Utilizo una biblioteca "personalizada" expandida y modificada por mí mismo en comparación con las bibliotecas originales (presente en la red). No tiene las características y formas de una biblioteca estándar. (no tiene archivos .hy .cpp) pero es un archivo .ino. Es capaz de gestionar cualquier tipo de LED, cualquier tipo de pantalla 7 módulos de visualización de matriz y segmentos 8×8 e 7×5. Per i muestro un 7 También se proporcionan segmentos tipo a COMMON_ANODE: esto se debe a que el chip solo maneja dispositivos COMMON_CATODE. En este caso, se requiere una pequeña adición de hardware. Alguien se preguntará ahora por qué usar dos Micro para producir un reloj que nunca es "EXACTO". Hubiera sido mucho más fácil usar un ESP32 que está equipado con pines más que suficientes para controlar los dispositivos utilizados en el proyecto.. Pero tengo varios ESP8266 comprados en ese momento y no tenía interés en obtener un ESP32 y tener que redescubrir las funciones..
mamá, repito, son elecciones personales.
Veamos ahora cómo se desarrolló todo el software de gestión.:
Lado ESP: este micro producido por "Espressif”Permite la gestión completa de una conexión a Internet para el desarrollo de páginas WEB. (vía WIFI) para ser visto en una tableta o PC común. Realicé varios bocetos para intentar construir páginas WEB en varios tamaños y dimensiones. En mi proyecto "CIABATTA ELETTRONICA" la gestión de los relés se realiza mediante una página WEB en la que el estado ON / OFF del 5 relais.
Desafortunadamente, este ESP es muy tacaño con los PIN: en la práctica son solo 2 usabili GPIO / 0 y GPIO / 2. me pin RX / TX se utilizan como interfaz en serie. Es muy importante tener una interfaz entre el arduino IDE y el micro en sí para la programación.: si los niveles de GPIO / 0, no están en las condiciones correctas NO nunca podrás programarlo: el IDE no reconoce el puerto serie incluso si está conectado.
Cuando compré el primer ESP también compré un módulo "DEPURADOR”. Este módulo se ve como un puerto serie. Insertando el ESP en el conector, el IDE reconoce el puerto y la programación (tierra a GPIO / 0 automáticamente) se hace correctamente. El módulo también tiene un botón de reinicio para reiniciar el ESP.

Antes de pasar a la estructura física del proyecto, veamos la lógica con la que se desarrollaron los bocetos.:
Sketch su ESP8266_1:
Después de los ajustes habituales para el WIFI (con conexión al enrutador y asignación de la dirección IP dinámica) se abre un puerto serie (baud_rate 19200) gestionado por la biblioteca estándar "Software_Serial"Usando los pines GPIO / 0 y GPIO / 1 ven RX / TX que a través del módulo convertidor de nivel están conectados a dos pines Arduino. A "APRETÓN DE MANOS" o "Te mando datos, respondes que las has recibido"Utilizando RX / TX definido. Esta primera entrevista se utiliza para gestionar el horario de invierno / verano.: el boceto espera recibir el código de Arduino "36"Para la hora solar o"72"Para el horario de verano. Esto se debe a que el servidor NTP solo transmite la hora en tiempo solar pero la biblioteca que lo administra con el "SetTimeOffset”Actualice la hora al horario de verano estableciendo el valor en 7200. Todo esto se gestiona en la "Configuración".
Nel "bucle": está esperando recibir un carácter específico del Arduino para indicar que el propio Arduino está listo para recibir los valores de HORA y MINUTO que se utilizan para actualizar el reloj. Recibido este carácter, el ESP solicita al servidor NTP que envíe los valores horarios y se reciben 8 personajes en la forma S.S:MM:SS y almacenado en una cadena. El servidor NTP también puede enviar valores de fecha que no son necesarios en este caso. Tenga en cuenta que hay varias bibliotecas que administran servidores NTP, pero no todas administran valores de fecha y hora.. En cambio, la biblioteca utilizada está completa. Luego procedemos a convertir los valores de horas y minutos a formato binario, obteniendo dos bytes: él bytes AHORA (valores de 00 un 23) y byte MINUTI (valores en grupos de 5) después de una simple conversión decimal / binaria. Estos dos bytes se envían en secuencia vía serial a ARDUINO que los usará para actualizar el reloj. El ciclo luego se reanuda desde el principio..
NOTA: El sistema que se acaba de describir es el último de una serie de pruebas.: inicialmente el ESP envió la cadena HH:MM:Complete SS que Arduino recibió y almacenó a su vez en una cadena similar para luego realizar las conversiones y actualizar la hora. Este sistema funcionó correctamente hasta cierto punto: luego "se volvió loco" en el sentido de que la cadena recibida era "SUCIA" con valores absolutamente fuera de control. Esto comprometió la corrección de los valores.. Pude detectar todo esto a través del sistema de "depuración" habitual., en el monitor de serie, de mensajes para verificar lo que realmente recibió Arduino. Y el ESP envió valores correctos !.
Sketch su Arduino (micro usado Arduino_Nano):
También en este boceto se realizaron los ajustes habituales de los puertos incluidos los de serie estándar y el relacionado con “Software_Serial” e inicializó la biblioteca para la gestión de MAX719 y LED relativos, la primera operación que se realiza es enviar el código "36" o "72" al ESP para configurar el horario de verano / invierno. Esta elección se deriva de un puente en un pin arduino llevado a tierra o dejado libre. Después de este envío y confirmación por parte del ESP, el ciclo de configuración finaliza.
La sección CÍRCULO es más simple de lo que te imaginas: se lanzan en secuencia 3 funciones: el primero en recibir los valores de tiempo (los dos bytes que envía el ESP), el segundo para actualizar los LED de hora y el tercero para actualizar el LED de minutos. Y el ciclo se reanuda.
La parte "león" es la rutina que debe recibir los valores "HH" y "MM" del ESP: también en este caso el "APRETÓN DE MANOS”: se envía un carácter para notificar al ESP. El ESP responde enviando los dos byes convertidos. La prueba del valor de las horas determina el encendido de los LED AM / PM colocados en la parte frontal del reloj.. Las otras dos rutinas se encargan de probar los valores HH y MM y acceder a sus LED.
Veamos la lógica con la que se encienden los leds de las horas, por tanto también de los minutos:
El MAX7219 puede gestionar individualmente hasta 64 led o una matriz 8×8 (64 LED). Un registro se dirige a las cadenas individuales (D0 / D7) mientras que otro registro define qué llevó (o punto de la matriz) encender (o apaga) dependiendo de cómo se establezca otro registro de acuerdo con la siguiente configuración:

DP, A / G se refieren respectivamente a la posición de los segmentos de una pantalla clásica a 7 segmentos + el punto decimal (DP). Oppure un 8 LED conectados (cátodo común) de la misma forma asignando una posición de DP a G a cada LED. El reloj tiene 12 LED: Para poder abordarlos todos, he definido dos cadenas cada una de 6 LED: en este caso: el registro "D0”Dirigirá los LED de las horas 12(00) todos 5(17), mientras el registro "dl”Dirigirá las horas de 6(18) todos 11(23). Los LED permanecerán encendidos hasta que se cambien las horas o los minutos.. Esto se debe a que el MAX7219 también se preocupa por la multiplexación. Y no se necesitan resistencias limitadoras para los LED.
En el boceto MAIN en arduino_Nano una tabla especial de 12 elementos contiene la codificación del registro de datos con los bits a encender o apagar y el bit DP se usa para discriminar qué cadena usar para encender las horas / minutos. Los LED se encienden llevando la posición relativa a "1" o a "0" para apagarlo. Esta es la mesa:
byte Tab_Led_Ore [12] =
{
DPABCDEFG ORE MIN HEX Nota: el bit "G" nunca se usa
B01000000, // Compensar 0 mineral “0” “12” 00 0x40
B00100000, // Compensar 1 mineral “1” “13” 5 0x20
B00010000, // Compensar 2 mineral “2” “14” 10 0x10
B00001000, // Compensar 3 mineral “3” “15” 15 0x08
B00000100, // Compensar 4 mineral “4” “16” 20 0x04
B00000010, // Compensar 5 mineral “5” “17” 25 0x02
B11000000, // Compensar 6 mineral “6” “18” 30 0xC0
B10100000, // Compensar 7 mineral “7” “19” 35 0xA0
B10010000, // Compensar 8 mineral “8” “20” 40 0x90
B10001000, // Compensar 9 mineral “9” “21” 45 0x88
B10000100, // Compensación A mineral “10” “22” 50 0x84
B10000010 // Compensación B mineral “11” “23” 55 0x82
};
PRECAUCIÓN: No hay obligación de utilizar los registros D0 / D1. Los otros D2 a D7 también se pueden utilizar si no se utilizan para otros fines. El chip no tiene preferencias específicas..
PRODUCCIÓN DE CIRCUITOS Y PCB
Al no tener equipo especial, tengo que conformarme con producir pequeños PCB utilizando el "PRESS_AND_PEEL”. Después de una serie de experiencias aún logré tener un producto final suficientemente válido. Los tres PCB de este proyecto son: el primero alberga el micro Arduino Nano y el chip MAX7219, el segundo el ESP y la interfaz electrónica y el tercero i 12 LED reloj.
Disposición de la primera placa de circuito impreso:

A la derecha el conector para insertar el micro Arduino Nano, a la izquierda la carcasa MAX7219. No hay fuente de alimentación específica ya que la toma USB del micro está conectada a cualquier cargador de batería para teléfonos móviles o tabletas con salida 5V 1 / A, es suficiente para sostener el conjunto. Un pequeño botón está conectado al reinicio que reinicia el Nano y el ESP al mismo tiempo. Un conector lleva señales de RESET,V5, GND, TX, RX hacia la PCB que alberga el ESP. El pin AM / PM está conectado a la placa pequeña con los dos LED AM / PM. Finalmente un puente 36/72 para configurar el llamado horario de verano / invierno.
Disposición del segundo PCB:

Este pcb admite: el regulador de 5V > 3V para alimentar el ESP, el convertidor de nivel para ajustar los niveles de 5v a 3v, y finalmente el conector para albergar el ESP. yo 5 los pines en la parte superior están conectados respectivamente a 5 pin del pcb principal. Las señales entrantes RX / TX se conectan regularmente a los pines TX / RX del ESP a través del convertidor de nivel. NOTA: un divisor de voltaje también habría sido suficiente.
Disposición del tercer PCB:

Alojamiento i 12 led con los dos conectores (A_F) para las cadenas respectivas y los dos pines DG0 / DG1. A continuación, las conexiones A / F se unen en paralelo. (A con A, B con B, etcétera) para luego ser conectado a los respectivos pines del MAX7219. Así como DG0 / DG1.
Olvidé este último PCB: se refiere a los dos LED AM / PM que se iluminan según el nivel 0/1 presente en el pin de entrada.
.
En conclusión:
Hasta la fecha, el único problema a resolver es encerrar todo en una caja adecuada o algo así.. Siendo un deslizamiento de tierra en el bricolaje, nunca logro hacer algo, al menos estéticamente, válido.
Mientras tanto, agradezco su atención y espero sus comentarios, teniendo en cuenta que todo es perfectible y factible con mejores resultados.. Sigo siendo solo un aficionado que se deleita, con su propia ignorancia, para descubrir siempre cosas nuevas.
gvsoft marzo 2021
Felicitaciones Gvsoft! W los relojes. Te escribí correo
Felicitaciones por el trabajo.
Estoy probando uno similar, pero con 7SD. Nano no se usa porque ESP-03 (lo que uso) me permite conectar un DS3231 y el SPI al MAX7912.
Por el momento no tengo tiempo libre. Tal vez lo recoja más tarde.