ESP32 con EleksTubeHAX

Actualización del reloj «RGB Glow Tube DIY Clock» (EleksTube IPS) con el firmware: EleksTubeHAX. Con este firmware, el reloj sincroniza automáticamente la hora a través de un servidor NTP. También consulta por Internet su localización, para ajustar de forma automática la hora local, actualizando el offset horario de invierno y verano. Además incluye el protocolo MQTT, y es posible controlar el reloj de forma remota desde un PC o dispositivo móvil con acceso a Internet. Este reloj, con el firmware original, se puede comprar en PCBWay por menos de 50€ … https://pcbway.com/s/8SNBE7

Reloj de estilo retro, con ESP32

Puntos separadores HH:MM:SS

Una de las cosas que se echa de menos en este reloj, es que no muestra los puntos separadores de las horas, minutos y segundos. Hice varias pruebas para intercalar los puntos, pero todas ellas de forma pasiva, utilizando como fuente de luz la iluminación RGB trasera de los 6 tubos.

La idea era montar algo sencillo, y que se pudiese desmontar sin tocar nada del interior.  Hice dos soportes con PLA de color negro, de la altura de los zócalos sobre los que se encajan los tubos de cristal. Los dos soportes los fijé al cristal con cinta adhesiva de doble cara, en la parte trasera de los tubos. Una pieza va pegada entre los tubos de las unidades de hora y la decena de los minutos, y la otra entre los tubos que muestran las unidades de minutos y la decena de segundos.

Luego me faltaba decidir cómo iba a hacer la pieza que mostrase los dos puntos. Empecé las pruebas con metacrilato transparente y plástico blanco, cortando con la CNC unas placas que reflejaran la luz trasera de los LED RGB, pintando los dos puntos de color negro. En ambos casos, el aspecto del reloj quedaba muy feo.

Al final utilicé PTEG de color blanco para hacer los dos puntos con la impresora 3D. Los hice alargados con forma de cono, y luego pinté con rotulador indeleble de color negro el soporte y el frente de los conos. Así la luz trasera de los tubos iluminan los laterales blancos de los conos, y visto el reloj de frente destacan mucho más los puntos negros.

EleksTube IPS con los puntos separadores

Piezas 3D

https://www.thingiverse.com/thing:6242912

Diseño 3D, con los puntos separadores para el reloj EleksTube

¿Actualizar el firmware?

En la revisión que hice del reloj con el firmware de fábrica, me di cuenta que la gestión de sus pulsadores era muy confusa, y además se le podría sacar más rendimiento al ESP32 que utiliza como procesador.

Buscando en el repositorio GitHub, encontré dos versiones de firmware muy elaboradas, que podrían ser compatibles con este reloj. Revisando el código de ambas versiones, comprobé que ha colaborado mucha gente en este desarrollo, pero la actualización final proviene del mismo autor: Aljaz Ogrin.

Cambios con respecto al firmware original

– La configuración con los pulsadores es extremadamente sencilla, porque la hora se ajusta automáticamente por Internet y los 4 pulsadores siempre realizan los cambios al presionar el botón, no al soltarlo. Es necesario pulsar y soltar por producir un cambio.

Configuración mediante los pulsadores, con el firmware: EleksTubeHAX

– El reloj sincroniza la hora a través de un servidor NTP, pudiendo conectar con cualquier router WiFi que disponga de la opción WPS. El reloj detecta respuestas del servidor NTP erróneas, y no se actualiza con una hora errónea. La versión 0.3 de firmware permite también escribir el SSID y PASSWORD de la red WiFi dentro del firmware. La versión 0.7 sólo permite la conexión WPS, pero esta opción es la más segura, porque las credenciales de la red WiFi no son visibles al leer el archivo binario (firmware). Otra ventaja de la conexión WPS, es que permite cambiar la red WiFi sin tener que modificar el firmware.

– El reloj detecta su ubicación a través de Internet, para seleccionar de forma automática su zona horaria y mostrar la hora local, corrigiendo automáticamente el Offset horario de invierno y verano.

– Las imágenes con los números de la hora son archivos BMP de 24 bit. Estos archivos se comprimen y convierten a binario desde una aplicación hecha a medida del firmware. Este formato permite  reducir el tamaño de los archivos, porque el firmware del reloj se encargará de centrar las imágenes pequeñas. Así es posible cargar y gestionar más de 3 fuentes de caracteres desde el reloj.

– El nuevo firmware hace una precarga de la siguiente imagen a mostrar en el búfer, para hacer una actualización más rápida. El tiempo del cambio de imagen se ha reducido de los 150 ms originales a aproximadamente 30 ms. Como el reloj refresca los dígitos de forma secuencial desde la unidad de segundos hasta la decena de horas, el segundo que provoca un cambio en la decena de horas presenta un efecto barrido de los números desde la derecha hacia la izquierda de (150×6) 900ms, y ahora se reduce a (30×6) 180 ms. Cuando se realiza un cambio de estilo, las imágenes guardadas en el búfer ya ni sirven y se borran. En este caso, el tiempo de carga de los 6 dígitos es el mismo que antes.

– Incorpora el modo nocturno, configurable antes de compilar el firmware, para atenuar el brillo de las pantallas y la luz de fondo de forma automática durante las horas nocturnas.

– Se incorpora la compatibilidad con MQTT (IoT): Desde un teléfono móvil se pueden cambiar las fuentes del reloj  y controlar el encendido/apagado del reloj. El protocolo MQTT es compatible con: SmartNest, SmartThings, Google Assistant, Alexa, etc… y también puede incluirse en la red de automatización del hogar.

– Los errores de conexión WiFi y MQTT se muestran con un texto de color rojo, insertado en la parte inferior de los dígitos de los segundos. Al apagar el reloj desde el pulsador se mantiene todo funcionando, sólo se apagan los displays y la iluminación RGB, manteniendo la conexión WiFi y la gestión remota a través del protocolo MQTT.

– El firmware cuenta de forma automática el número de estilos de reloj que tiene cargados, y no es necesario volver a programar el reloj cuando se actualizan las imágenes.

– La versión v0.7 puede configurarse para funcionar con  el reloj «EleksTube IPS» original y el reloj «SI HAI» (imitación china). La versión v0.3 incluye también el reloj «NovelLife SE» (otra imitación). El cambio que existe entre los diferentes fabricantes de este reloj, es la asignación de los pines de ESP32.


Esto es lo que se pierde con respecto a la versión del firmware original:

  • No permite mostrar el mes y día, siempre se muestra la hora.
  • No se puede elegir un color diferente para cada LED RGB y tampoco modificar la velocidad de cambio de sus efectos.
  • El efecto ‘Chasing’ de los LED RGB no existe, pero a cambio se  incluyen 2 efectos nuevos y un modo Test.
  • No dispone de la opción de mostrar 6 imágenes fijas.

Programar con el IDE Arduino

Antes de modificar el firmware del reloj, es muy importante disponer de  un archivo de respaldo por si algo falla. En el artículo y video anterior mostraba los detalles de todo el proceso, lo único que tendría que añadir, es que lugar de hacerlo a 115200 bps lo hagáis a 921.600 bps. El ESP32 funciona perfectamente a esa velocidad, y así el tiempo que tardará será inferior a 1 minuto.

He hecho un resumen para simplificar todo el proceso de configuración que hay que hacer en el IDE de Arduino, para que funcione con el ESP32 y sea compatible con el firmware: EleksTubeHAX.

Lo he probado con las versiones de Arduino (v1.8.12) y (v1.8.13)… es posible que con otras versiones se produzcan errores al compilar el programa 

1 –  El primer paso sería cargar las librerías del ESP32 en el IDE de Arduino. En la pestaña: Archivo/Preferencias, habría que desplegar el Gestor de URLs para comprobar si ya tenemos o no el link que apunta a las librerías de espressif:

https://dl.espressif.com/dl/package_esp32_index.json

Si no estaba en la lista, habría que añadir la URL y guardar los cambios

2 – Acceder al Gestor de tarjetas desde el menú: Herramientas/Placa/. Cuando finalice la carga de datos, escribir en la línea superior ‘esp32’. Buscar: esp32 by Espressif Systems. Aunque ya tengáis esta librería instalada, es importante actualizar a la versión 1.0.6. Yo tenía instalada la última versión, la 2.0.11,  y me costó mucho tiempo encontrar el problema. Al compilar aparecían errores en algunas instrucciones del WiFi y también en la librería TFT_eSPI.

3 – Para que sea posible cargar las imágenes en el reloj desde el IDE de Arduino, es necesario incluir el archivo: esp32fs.jar dentro de la carpeta ‘tool’ de la instalación. A continuación os pongo el link de descarga de la versión 1.1, porque la versión 1.0 no funciona.

Link de descarga de la versión 1.1

Detalles del lugar donde hay que copiar el archivo

Después de copiar el archivo y reiniciar el IDE de Arduino, tendría que aparecer la opción: ESP32 Sketch Data Upload. Si la versión del archivo es la correcta, al hacer click aparecerá otra ventana con un desplegable que muestra 4 opciones.

Las imágenes del reloj son los  archivos binarios que se encuentran en la carpeta ‘data’ del programa EleksTubeHEX. Para cargar estos archivos en el reloj, habría que seleccionar la opción: SPIFFS.

Las imágenes del reloj contienen los diferentes estilos de  las fuentes numéricas que se utilizan para mostrar la hora. Estas imágenes se pueden actualizar cuando se quiera, y no es necesario volver a cargar el firmware.

4 – Lo siguiente sería instalar las 7 librerías que se muestran en la gráfica enmarcados en rojo, seleccionando el nombre y comprobando que sea el mismo autor. Las versiones que se utilizaron en el desarrollo son las que están entre paréntesis, pero yo he actualizado todas a la versión más alta y no he tenido problemas.

5-  Ya por último, tendríamos que seleccionar la placa: ESP32 Dev Module y configurar todos los parámetros que se muestran en la gráfica enmarcados en rojo. El puerto ‘Com’ habría que seleccionar al que estuviera conectado vuestro reloj. Se puede comprobar si el reloj responde,  al hacer click en la opción: Obtén información de la placa

Librería: TFT_eSPI

Después de instalar todas las librerías, habría que modificar dos archivos que se encuentran dentro de la carpeta TFT_eSPI, y siempre que se actualice la librería TFT_eSPI habría que hacer lo mismo.

Son los archivos:  User_Setup_Select.h y User_Setup.h, y se pueden editar  con cualquier editor de texto que no introduzca formatos, por ejemplo con el Notepad de Windows.

En ambos archivos, User_Setup_Select.h y User_Setup.h,  hay que añadir la misma línea. Para que se incluya la librería GLOBAL_DEFINES.h que se encuentra dentro de la misma carpeta del programa EleksTubeHAX.

Además de esto, en el archivo User_Setup_Select.h se deja todo como está, pero al final del archivo hay que comentar la definición de todos los pines.

En el archivo User_Setup.h, hay que añadir la misma línea que en el otro archivo y mantener #define USER_SETUP_INFO «User_Setup». El resto del archivo hasta el final, tiene que estar todo comentado.

… ver más detalles en el video del final

SPIFFS (Serial Peripheral Interface Flash Fail System)

SPIFFS es un sistema de archivos muy simple, creado para microcontroladores con memoria flash.  Se accede mediante el bus SPI y los datos se guardan directamente en la estructura de la memoria. SPIFFS permite acceder a la memoria flash del ESP32, pudiendo leer, escribir y eliminar datos.

MQTT

MQTT (Message Queing Telemetry Transport) es un protocolo de mensajería simple, diseñado para dispositivos con poca memoria y con bajo ancho de banda. Permite enviar comandos para controlar salidas digitales, o leer y escribir datos en dispositivos electrónicos con tecnología IoT (Internet de las cosas).

MQTT fue creado por el Dr. Andy Stanford-Clark de IBM y Arlen Nipper de Arcom (ahora Eurotech) en 1999 como un mecanismo para conectar dispositivos empleados en la industria petrolera.

Gestión de los mensajes MQTT

En los mensajes MQTT hay 3 apartados separados por una barra, como si se tratara del Path de acceso a cualquier archivo del PC. A este conjunto Path, en MQTT se denomina Topic, o Tema en español. A continuación del Topic se enviaría la orden a ejecutar, denominado Mensaje en MQTT. Por ejemplo, un mensaje MQTT podría ser:

MiCasa/Cocina/Lavadora/Encender

Para que funcione el sistema MQTT es necesario un gestor que reciba y distribuya los mensajes, en MQTT sería el Broker.

Broker es el dispositivo central que permite y restringe las conexiones; y también recibe, filtra, redirige y publica mensajes a todos los dispositivos conectados. Los clientes inician una conexión TCP/IP con el Broker, el cual mantiene un registro de los clientes conectados. Esta conexión se mantiene abierta hasta que el cliente la finaliza. Por defecto, MQTT emplea el puerto 1883 y el 8883 cuando funciona sobre TLS.

Si se está enviando un mensaje a un Broker de Internet, la primera parte del tema/topic debe ser el ID del dispositivo que está enviando el mensaje, y el usuario puede personalizar las siguientes partes del tema. Cuando se da de alta algún dispositivo IoT en Smartnest, se le asigna un ID único para evitar conflictos entre dispositivos que pudieran tener el mismo Topic. En este nuevo firmware del reloj, el Broker es un servidor alojado en la Web de Smartnest.

El Broker de Smartnest define los Topic y Mensajes en lugar del usuario, con el fin de generar un interface gráfico común para todos los clientes, y dar acceso a través de Internet. Por ese motivo es necesario elegir el Tema que mejor se adapte a las necesidades de cada dispositivo. Por ejemplo, este reloj utiliza el Topic de un termostato.

Conversión de los grados recibidos por MQTT, al estilo de gráficos a mostrar

La temperatura de ajuste del termostato se puede modificar entre 10 y 40 grados, con saltos de 0,5º. Estos valores son interpretados por el reloj para seleccionar el estilo del gráfico a mostrar. Para hacer esto el firmware aplica internamente una fórmula al mensaje MQTT, dividiendo el valor recibido entre 5, sin decimales y restando 1. Si recibe un valor entre 10 y 14,5 grados, selecciona el estilo 1 (los saltos son de 5 en 5 grados). Si se fija la temperatura del termostato al máximo, 40 grados, el reloj mostraría el estilo 7. El reloj permite almacenar un máximo de 16 estilos. En caso de recibir un número mayor al número de estilos que tiene en memoria, seleccionaría el último. En caso de recibir un valor de temperatura igual o mayor de 90º, elegiría de forma aleatoria uno de los estilos de su memoria.

Para utilizar el Broker de Smartnest es necesario registrarse en www.smartnest.cz, pero es gratis para los primeros 5 dispositivos.

Cofiguración con el Broker Smartnest

Para habilitar la conexión MQTT en el reloj, es necesario personalizar los datos del archivo de configuración del reloj. En la versión v0.3 es el archivo USER_DEFINES.h  y en la versión v0.7 es el archivo GLOBAL_DEFINES.h.

Yo he cargado la última versión (v0.7), porque se han corregido algunos errores y además se incluye la gestión del sensor de temperatura DS18B20, aunque yo no lo voy a usar. Para que el reloj envíe la temperatura real por MQTT, habría que conectar el sensor a un pin del ESP32, y luego habilitarlo en el archivo de configuración.

Estos son los datos MQTT que hay modificar en el archivo de configuración:

  • Descomentar la línea: #define MQTT_ENABLED
  • Luego copiaremos ID del dispositivo que hemos dado de alta en Smartnest, el termostato, y lo pegaremos entre comillas a continuación de: #define MQTT_CLIENT
  • El nombre de usuario con el que nos hemos dado de alta, lo escribiremos entre comillas al final de:  #define MQTT_USERNAME
  • La contraseña con el que nos hemos dado de alta en Smartnest, la escribiremos entre comillas a continuación de: #define MQTT_PASSWORD. En lugar de escribir la contraseña en el firmware, es mejor poner el API-Key que asigna Smartnest a cada usuario.

COntrol remoto desde Smartnest

Con estos datos ya se recibiría la información que envía el reloj en la Web de Smartnest. Pero si queremos también enviar órdenes al reloj, tendremos que configurar el router WiFi  al que se conecta el reloj.

  • Lo primero es asociar la MAC del reloj con una IP fija, para que el router le asigne siempre la misma.
  • Luego habría que abrir el puerto TCP 1883, y asociarlo con la dirección IP que le hayamos asignado al reloj.

Configuración final

Para terminar de configurar el reloj, abrimos el archivo de configuración: GLOBAL_DEFINES.h para la versión 0.7.

  • Dejamos comentado el modelo de reloj HAI_CLOCK, para compilar con los datos de EleksTube.
  • Las horas de inicio y fin en la que el reloj cambiará a modo nocturno, se pueden modificar a nuestro gusto. También los segundos para detectar la pérdida de conexión con Internet y su reconexión.
  • No hace falta registrarse para disponer de un acceso a la geolocalización, accedemos a este link:

https://app.abstractapi.com/api/ip-geolocation/tester

Allí vemos nuestro código de consulta, y debajo una  URL para comprobar la información que devuelve. Podemos hacer hasta 5000 peticiones al mes con el mismo código si pagar.  Copiamos nuestro código de acceso, y lo pegamos entre las comillas a continuación de: #define GEOLOCATION_API_KEY

Ahora solo queda guardar los cambios del archivo: GLOBAL_DEFINES.h, y ya podemos compilar el programa en el IDE de Arduino y actualizar su firmware… pero recuerda que también hay que cargar las imágenes, para que el reloj pueda mostrar la hora.

Cargar las imágenes al reloj

Además de actualizar el firmware, es necesario cargar las 10 imágenes de cada estilo. El nuevo firmware necesita un archivo binario (.clk) por cada imagen.

Todos los archivos tienen que estar en la carpeta ‘data’ de ‘EleksTubeHAX’ …\Arduino\EleksTubeHAX\data

  • Los archivos se identifican con 2 dígitos y su extenxión .clk
  • La unidad del número del archivo se corresponde con la imágen que contiene, y la decena es el número de estilo. Los estilos del reloj van en orden ascendente, empezando por el estilo 1 (10.clk , 11.clk, 12.clk, etc.). No se puede crear el estilo 3 y enviar, si la carpeta ‘data’ no contiene también los estilos 1 y 2.
  • El número de estilos máximos a cargar depende del tamaño de los archivos. La capacidad máxima disponible para almacenar las imágenes en el reloj es 2,2MB aproximadamente.
  • Los archivos binarios se generan con un software hecho a medida para este firmware, y ya no se puede utilizar el software: EleksTube IPS.exe para actualizar las imágenes. En la descarga de archivos del repositorio GitHub, se incluye el software conversor de imágenes BMP a CLK:

…\Prepare_images\Convert_BMP_to_CLK.exe

Convert_BMP_to_CLK.exe

La cabecera de los archivos binarios que genera este conversor de imágenes, es de 6 Bytes: Las letras ASCII ‘CK ‘ los pixeles de ancho de la imagen, su origen X, los pixeles de alto y su posición Y.

Antes de colocar cada imagen en su display, el firmware lee sus cabeceras, y aplicando las fórmulas que se muestran en la imagen siguiente, desplaza el inicio donde tiene que empezar a cargar los datos del archivo, para centrar la imagen en el display.

Paso 1, para el centrado de imágenes del reloj EleksTube

De esta forma todos los bordes de la imagen que sean de color negro, se pueden recortar del archivo BMP,  antes de cargarlos en el software para convertirlos a código binario.

Paso 2, para el centrado de imágenes del reloj EleksTube

Al reducir el tamaño de las imágenes, es posible almacenar fuentes más pequeñas en la memoria del ESP32, y ampliar el número de estilos a elegir.

Conversor de imágenes BMP a CLK

Con el firmware de fábrica, el archivo binario que se carga en el reloj contiene las 30 imágenes de los 3 estilos, y tiene un tamaño de 1.507.328 Bytes. Si hacemos las cuentas, el mapa de color de las imágenes que se muestran en el reloj, es de 12 bits.

Ahora las imágenes BMP de 24 bit se comprimen a 16 bits. Por lo tanto, con la actualización del firmware también se mejora en la calidad de las imágenes.

En la siguiente imagen, he simulando el degradado de tonos azules que podríamos ver en el cielo al atardecer.

Comparativa del color RGB

De izquierda a derecha, se puede comparar la calidad con la que se mostraría en los displays del reloj.

  • La imagen original BMP de 24 bits, sin comprimir
  • Comprimida a 16 bits, como se mostraría con esta actualización
  • Comprimida a 12 bits, como se mostraría con el software de fábrica

Convertir imágenes BMP a CLK

En la siguiente imagen se muestra la carpeta de trabajo, para convertir las imágenes BMP en archivos CLK.

Archivos BMP y convertidos a binario, del estilo 3 del reloj

  • Crea una carpeta de trabajo, para utilizarla con el software: Convert_BMP_to_CLK.exe
  • Copia en la carpeta de trabajo las 10 imágenes BMP de 135×240 pixel y 24 bits, del estilo que quieras convertir a binario. Renombra los archivos poniendo como nombre el número de estilo (decena), y el valor numérico que contiene la imagen (unidad). En el ejemplo serían los 10 números del estilo 3.
  • Si los bordes de las imágenes no son negros, como es el caso del ejemplo, las imágenes no se pueden recortar. En el caso contrario puedes recortar los bordes negros, teniendo en cuenta que el contenido de la imagen resultante se centrará sobre la pantalla negra del reloj.
  • Abre los 10 archivos BMP de uno en uno con el software conversor, y conviértelos a binario.
  • Copia o mueve los 10 archivos .clk a la carpeta ‘data’ del firmware: EleksTubeHAX.

…\Arduino\EleksTubeHAX\data

¿Dónde fabricar el PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

Concurso de creadores 2023

El plazo para presentar los proyectos finaliza el 15 de Enero de 2024

PCBWay abre de nuevo la participación al concurso de creadores. Por el simple hecho de participar, se asignarán 500 beans (créditos) en tu cuenta de PCBWay, los cuales podrás canjear en la tienda por un Raspberry Pi Pico.

Además del premio por la participación, PCBWay repartirá un total de 16 premios: 1 primer premio al mejor proyecto, 2 segundos premios, 3 premios para los clasificados como terceros y 10 premios más para los proyectos más populares.

Consulta todos los detalles y las bases del concurso, pulsando el siguiente link:

Acceso al concurso de creadores PCBWay 

 

Reloj de estilo retro, con ESP32

RGB Glow Tube DIY Clock es un reloj de estilo retro, porque simula los números en 6 displays LCD-IPS cerrados en tubos de cristal, para darles el aspecto de tubos de vacío NIXIE o NUMITRON. Este reloj se compra en kit, pero viene prácticamente montado. Sólo es necesario insertar los 6 displays LCD-IPS en sus zócalos y colocar los tubos de cristal. Este reloj funciona con el microcontrolador ESP32, y permite cambiar su aspecto desde el propio reloj, eligiendo una de las 3 fuentes de caracteres que tiene en memoria. Las fuentes de caracteres se pueden personalizar, utilizando el software ElecksTube IPS.exe.

Link de acceso para la compra y descarga del software

Display’s numéricos de vacío

Los primeros display’s numéricos que se fabricaron estaban construidos con tubos de vacío. Se conocían como  Tubos Nixie, y se utilizaron en equipos electrónicos a partir del año 1955.

Tubo NIXIE

El tubo Nixie está formado por un ánodo, construido con una rejilla montada delante de una serie de cátodos. Los cátodos tienen la forma del símbolo que se quiere representar, y se sitúan apilados tras el ánodo, pero sin contacto galvánico entre ellos. Todo el conjunto va encerrado en una ampolla de vidrio llena de gas a baja presión, normalmente neón. Cuando se aplica una tensión entre uno de los cátodos y el ánodo, alrededor de 170V, el cátodo se ilumina en sus proximidades al ionizarse el gas, haciendo visible así su número.

El esquema superior está simplificado. Habría que añadir una resistencia en serie con la alimentación, para limitar la corriente de trabajo del tubo NIXIE, como si se tratara de un diodo zener.

Los tubos Nixie son muy sencillos de utilizar y no necesitan caldeo, pero tienen algunos inconvenientes:

  • Su peso y volumen.
  • Necesita una tensión alta.
  • Los símbolos no están todos en el mismo plano, lo que reduce su ángulo de visibilidad.
  • Son frágiles.

Con el fin de solucionar algunos de estos problemas, aparecieron los tubos de vacío Numitrón. Estos tubos son los antecesores a los displays LED de 7 segmentos que ahora conocemos. La diferencia es que sus segmentos no eran LED, sino filamentos. Los Numitrón se podían fabricar en tamaños más reducidos que los tubos Nixie, y podían funcionar con tensiones más bajas, alrededor de 5 voltios. Otra ventaja es que todos los símbolos se forman con los 7 segmentos, y al estar en el mismo plano su ángulo de visión es mejor que en los tubos Nixie. A cambio, los tubos Numitrón consumen más que los tubos Nixie, su tiempo de vida es menor y el trazado de los símbolos no es continuo ni tan perfecto, comparado con los NIXIE

Tanto los tubos Nixie como los Numitrón hace años que dejaron de utilizarse, pero por nostalgia muchos aficionados a la electrónica actualmente los siguen utilizando en sus proyectos, normalmente para fabricar relojes con aspecto retro. Debido a esta tendencia, ahora se pueden comprar algunos kit de reloj con el mismo aspecto de los tubos Nixie.

Aternativa a los tubos de vacío

El problema principal de los tubos Nixie/Numitrón es que no son baratos, pero existe una alternativa: sustituyendo cada tubo de vacío por un display LCD-IPS y colocando encima una ampolla de cristal. Así se puede fabricar un reloj con el mismo aspecto retro, reduciendo notablemente su consumo y mejorando sus prestaciones. Con un display LCD-IPS se puede simular un tubo Nixie o Numitrón, y modificar su aspecto y color de forma rápida sencilla. Ahora se puede conseguir por menos de 50€ un reloj con diseño retro, por ejemplo el kit: RGB Glow Tube.

Contenido del Kit

RGB Glow Tube DIY Clock

Este reloj se compra en kit, pero viene prácticamente montado. Sólo es necesario insertar los 6 displays LCD-IPS en sus zócalos y colocar los tubos de cristal.

Es aconsejable añadir un trozo de cinta adhesiva de doble cara en la base de los tubos de cristal,  para fijarlos con el metacrilato transparente superior. Con esto se evita que los tubos se suelten y rompan cuando se manipula el reloj

El PCB está sujeto a una base plástica con 5 separadores y tornillos M3. La caja se monta atornillando sus dos laterales de plástico con dos perfiles de aluminio ranurado. Utiliza 4 tornillos ALLEN M3 para fijar las tapas laterales con los dos perfiles de aluminio, colocando previamente el plexiglás transparente superior. En la parte superior, el PCB lleva 5 separadores M3, que sirven como apoyo del plexiglás transparente superior, no necesita los tornillos.

Muestra de 3 fuentes en el display OLED

Para simular los tubos Nixie/Numitrón, se utilizan 6 displays LCD-IPS de 210×82 mm. Las imágenes se pueden crear en un PC con cualquier programa de diseño gráfico, en formato JPG, con una resolución de 135 pixel de ancho por 240 pixel de alto y color de 24 bits. El software EleksTube IPS.exe se encarga de convertir todas las imágenes JPG en un solo archivo binario, para luego enviarlas a la memoria del reloj (ESP32).

Glow Tube Clock funciona con un microcontrolador ESP32. Lleva un 74HC595, que es un registro de desplazamiento de 8 bits, con 8 salidas en paralelo de tres estados. El interface de USB a UART es un CH340, necesario para conectar el reloj con un PC y actualizar el firmware, o personalizar sus fuentes de caracteres. El reloj lleva un conector USB-C en el lateral, utilizado para conectar el PC y también para su alimentación de 5VDC. El kit incluye un alimentador de tensión 110-240 VAC a 5 VDC/1A (estándar USA, no EU), con conector USB-A hembra. También se incluye el cable USB macho-macho de conexión con el PC y alimentador, con protección de tela y conectores USB-A / USB-C acodado.

El patrón de la hora (RTC) es el chip DS3231,  que está controlado por I2C y es muy preciso. Este chip RTC incluye en su interior un oscilador a cristal con compensación de temperatura (TCXO). Para mantener la hora del chip RTC cuando se interrumpe la alimentación, utiliza una pila de litio exterior tipo CR1220.

Configuración del Reloj

El kit del reloj incluye una cartulina en color, con las instrucciones en inglés por una cara y en chino por la otra. Cuando empecé a configurar el reloj, me costó bastante tiempo interpretar el manual y configurar el reloj. Provocado principalmente por los cambios de comportamiento que tienen los pulsadores en cada menú. La gestión de los pulsadores que hace el firmware de este reloj es muy confusa.

Configuración: RGB Glow Tube Clock

Gestión de los pulsadores

En cualquier dispositivo electrónico que tenga pulsadores, el fabricante decide la funcionalidad y comportamiento de cada pulsador, y lo programa en su firmware.

Gestión de los pulsadores

El comportamiento de un pulsador se puede hacer de dos formas:

  1. Detectando el flanco de subida o bajada, de la tensión que recibe un pin del microcontrolador. Así los cambios son lentos, porque es necesario pulsar y soltar el pulsador para provocar un cambio.
  2. Comprobando el cambio 1-0 en un pin del microcontrolador, para arrancar un reloj de muestreo y encadenar cambios sucesivos, mientras el pulsador permanezca cerrado. Así los cambios pueden ser más rápidos que en el caso anterior, pero también más imprecisos. Es importante ajustar el tiempo de muestreo, en función del número máximo de cambios que se tengan que realizar en cada menú. Con esta gestión temporizada, la precisión del ajuste dependerá de la destreza que tenga el usuario para ajustar el tiempo de sus pulsaciones con los del muestreo.

Comportamiento de los pulsadores

Con el fin de minimizar los costes de producción de los equipos electrónicos, los pulsadores suelen tener asociadas diferentes funciones en cada menú. Lo que no suele ser habitual y sucede en este reloj, es que también cambia el comportamiento de un mismo pulsador, en función del menú en el que esté funcionando.

El comportamiento que tienen los pulsadores en este reloj,  se identifica en las gráficas con el color que he añadido en cada pulsador y menú.

  • ROJO: Se realizan los cambios al soltar el pulsador.
  • VERDE: Realiza cambios sucesivos al pulsar, al ritmo de la frecuencia de muestreo.

Observar que a excepción del pulsador [POWER], los demás  pueden tener un comportamiento diferente, en función del menú en el que estén funcionando.

Tengo que aclarar que esto sucede con la versión del  firmware que tiene el reloj que he probado, y esto podría cambiar con otras versiones

La memoria del reloj puede almacenar y gestionar 3 fuentes de caracteres diferentes, con 10 gráficos cada una. Al inicio, los gráficos de las 3 fuentes contienen los 10 números del sistema decimal, ordenados desde el cero hasta el nueve. De esta forma es posible cambiar el aspecto del reloj en cualquier momento, eligiendo una de las 3 fuentes de caracteres.

El firmware de este reloj asocia un nombre a cada una las fuentes que tiene en su memoria: RETRO, PUNK, DIY. Estos nombres no se puede cambiar, pero sí su contenido. Conectado el USB-C del reloj con un PC y abriendo el software del fabricante EleksTube IPS.exe, es posible modificar el contenido de las 3 fuentes del reloj.

Fuentes gráficas de fábrica

Las dos primeras fuentes de caracteres, RETRO y PUNK,  deberían contener siempre los 10 dígitos del sistema decimal, porque siempre están asociadas con la presentación de la fecha y hora. La última fuente de caracteres es la fuente del usuario (DIY), y podría asociarse al reloj, o utilizarse para almacenar y mostrar un gráfico diferente en los 6 tubos, en lugar de la hora… menú INICIO pulsador [>>>]

Fuentes gráficas modificadas

Menús de configuración: Inicio

Menú INICIO

Al alimentar el reloj, los 4 pulsadores realizan su función al soltar el pulsador.

  • POWER: Enciende y apaga el reloj.
  • Izquierda: Muestra la hora o la fecha.
  • Derecha: Muestra la hora o los 6 primeros gráficos almacenados en la fuente de caracteres asociada al usuario (DIY). La imagen fija podría mostrar los números entre el 0 y el 5, o 6 gráficos de 135 píxeles de ancho por 240 de alto cada uno.
  • MODE: Da acceso al  menú principal de configuración.

Menú principal

Menú Principal

En el menú principal, los 4 pulsadores realizan su función al soltar el pulsador.

  • POWER: Salir del menú sin realizar cambios.
  • Izquierda/Derecha: Para desplazar el cursor y elegir alguna de las 6 opciones de este menú.
  • MODE: Ejecuta  opción que apunta el cursor.

En la gráfica, hay 3 opciones enmarcadas en rojo y las otras 3 con un número inferior (1,2 y 3):

MARCO: Los 3 menús enmarcados en rojo son de 2 estados (binarios), y cada vez que se pulsa el botón [MODE] cambian sus valores:

  • SET: Selecciona el formato de presentación de la hora, en 12 o 24 horas.
  • RGB: Habilita o deshabilita el LED RGB de iluminación de los 6 tubos
  • LIGHT: Limita el brillo máximo de los LED RGB en los 6 tubos.

NÚMERO: El número indica el submenú al que se accede.

Submenú 1: SET TIME

Menú: SET TIME

Este submenú es para configurar la fecha y hora. Los 3 botones de la izquierda realizan los cambios muy rápidos. Hay que realizar pulsaciones muy cortas, para conseguir que los saltos sean de uno en uno.

  • POWER: Vuelve al inicio para mostrar la hora, sin realizar cambios.
  • Izquierda: Reduce rápidamente el valor del número apuntado, mientras se mantenga el pulsador cerrado.
  • Derecha: Incrementa rápidamente el valor del número apuntado, mientras se mantenga el pulsador cerrado.
  • MODE: Guarda el valor de forma provisional, y desplaza el cursor a la derecha. En caso de haber guardado algún valor erróneo, como no se puede volver atrás, es mejor salir del menú pulsando el botón [POWER] y volver a empezar Si el cursor estaba apuntando los segundos, al pulsar [MODE] se guardan en el chip RTC todos los valores de fecha y hora que muestran los tubos, y se vuelve al inicio mostrando la hora.

Submenú 2: SET STYLE

El submenú STYLE permite seleccionar el aspecto de los dígitos. En este submenú, los 4 pulsadores realizan su función al soltar el pulsador.

  • POWER: Vuelve al inicio para mostrar la hora, sin realizar cambios.
  • Izquierda/Derecha: Desplaza el cursor para apuntar a alguno de los 3 estilos.
  • MODE: Selecciona el estilo apuntado, y vuelve al inicio mostrando la hora. Si la fuente de caracteres del usuario (DIY) no contiene los 10 números del sistema decimal, no se debería asociar con el reloj.

Submenú 3: SET RGB

Menú SET RGB

El submenú SET RGB permite configurar el comportamiento de los LED RGB que iluminan los 6 tubos. En este submenú, los 4 pulsadores realizan su función al soltar el pulsador.

  • POWER: Vuelve al menú principal sin realizar cambios.
  • Izquierda/Derecha: Mueve el cursor para apuntar a alguna de las 6 opciones de este menú.
  • MODE: Acceso a la opción que apunta el cursor.

En la gráfica hay 4 opciones enmarcadas en rojo y las otras 2 con un número inferior (4 y 5):

MARCO: Los 4 menús enmarcados en rojo, cambian su valor cada vez que se pulsa y suelta el botón [MODE].

  • RainBow: Utiliza el mismo color en los 6 tubos, y modifica gradualmente su color.
  • Chasing: Distribuye los colores entre los 6 tubos, y al cambiar su color de forma gradual (igual que lo hace RainBow) se produce un efecto de rotación.
  • Breath: Mantiene el color seleccionado de cada tubo, y modifica gradualmente la luminosidad de los 6 tubos a la vez.
  • SPEED: Define la velocidad de cambio de los 3 efectos anteriores.

NÚMERO: Con los submenús 4 y 5 se define el color del LED RGB de los tubos. En ambos submenús, los pulsadores tienen un comportamiento diferente.

Tabla numérica de color

Los colores de los LED RGB están asociados a una tabla de 8 bit. Los valores de la tabla numérica comprendidos entre el 0 y el 200 se asocian con los colores del espectro visible. El valor 0 se asocia con el color rojo y el 200 con el color magenta. A partir del número 200 y hasta el 255, el color va cambiando desde el magenta hacia el rojo (valor 0).

Submenú 4: All Same MODE

En este submenú sólo funcionan 2 pulsadores, porque no se necesitan los cursores. El valor numérico asociado al color, cambia en los 6 tubos a la vez.

  • MODE: Incrementa rápidamente el valor numérico (color) en los 6 tubos,  mientras se mantenga el pulsador cerrado.
  • POWER: Al pulsar y soltar, se guarda el color que muestran los 6 tubos, y vuelve al menú SET RGB.

Submenú 5: Single MODE

Desde este submenú se puede configurar un color diferente en cada tubo.

  • Izquierda: Reduce rápidamente el valor del número apuntado (color), mientras se mantenga el pulsador cerrado.
  • Derecha: Incrementa rápidamente el valor del número apuntado (color), mientras se mantenga el pulsador cerrado.
  • MODE: Guarda el color para el tubo seleccionado y apunta al siguiente, mientras se mantenga el pulsador cerrado.
  • POWER: Al pulsar y soltar, se guarda el color que muestra cada uno de los 6 tubos, y vuelve al menú SET RGB.

Archivo de respaldo (Backup)

Antes de modificar algún dato del firmware original del ESP32, es conveniente hacer una copia de seguridad. Si por cualquier circunstancia fallara algo durante la actualización y el reloj dejara de funcionar, tendríamos un archivo con el  firmware original y podríamos recuperarlo.

Para crear un archivo de respaldo de este reloj, se puede utilizar ‘esptool.exe’ que se incluye dentro del paquete : EleksTube IPS.V1.1 (9).zip

esptool.exe se ejecuta abriendo una ventana de comandos en Windows,  modo administrador. La ventana de comandos tiene que apuntar a la carpeta donde se encuentre el programa  ejecutable ‘esptool.exe’

Comandos a ejecutar desde CMD

 # Copia de seguridad del firmware del ESP32:

esptool --baud 115200 --port COM6 read_flash 0x0 0x400000 EleksTube_fw-backup-4M.bin

La cadena contiene el nombre del ejecutable, la velocidad, el puerto COM (en mi caso es el 6), el comando de lectura, las direcciones primera y última que tiene que leer del ESP32, y a continuación el nombre del archivo que tiene que crear con su extensión. Yo he puesto al principio el nombre del programa y al final el tamaño del archivo que tiene que crear y la extensión… pero se puede poner cualquier nombre.

Si alguna vez necesitaras restaurar el reloj con el firmware de fábrica, tendrías que ejecutar este comando:

# Restaurar el firmware del esp32:

esptool --baud 115200 --port COM6 write_flash 0x0 EleksTube_fw-backup-4M.bin

La cadena contiene el nombre del ejecutable, la velocidad, el puerto COM, el comando de escritura, la dirección de inicio de la memoria y el nombre del archivo.

La dirección del final de la memoria del ESP32, no es necesario indicarla en la cadena, porque el software acabará cuando envé el último Byte del archivo de respaldo.

IMPORTANTE:

Para evitar errores cuando se trabaja con la ventana de comandos de Windows,  es importante que los nombres de las carpetas no contengan espacios ni caracteres UNICODE mayores a un Byte, por ejemplo caracteres chinos.

Software: EleksTube IPS.exe

Este software contiene un total de 23 fuentes de caracteres para elegir. En el software, cada fuente se muestra en una sola imagen con los 10 dígitos pegados. Cada imagen (fuente) es de 1350×240 pixel,  por lo que cabe suponer que al seleccionar una de ellas el software la trocea en 10 imágenes diferentes y las guarda en la carpeta .\EleksTube\esptool\data

Software: EleksTube IPS

Al principio suponía que al abrir el software se cargaban las 23 fuentes desde la carpeta EleckIPS_PIC_Picture, pero no es así. Aunque se modifique algo o se borre  esta carpeta, el software carga las mismas 23 fuentes al arrancar.

 .\EleksTube\esptool\bin

Esta carpeta contiene el último archivo que ha compilado el software Elekstube IPS.exe. El archivo binario contiene los 30 gráficos de 135x240 pixel, de las 3 fuentes de caracteres que puede manejar el reloj. Este archivo binaro, es lo único que se envía al reloj para actualizar las 3 fuentes de caracteres.

Contenido de la carpeta BIN

.\EleksTube\esptool\data

En esta carpeta se encuentran las 30 imágenes con formato JPG, que compilará el software para generar el archivo binario. Los nombres de los archivos JPG no se pueden cambiar, pero sí podemos modificar el contenido de todos los archivos, siempre que se respete su nombre, formato y resolución. Las imágenes que comienzan por RETRO y PUNK se tendrían que modificar 'a mano' antes de compilar el archivo, porque desde el software sólo se pueden cambiar las imágenes del usuario DIY; son las diez que tienen como nombre un número solo.
.\EleksTube\img

En esta carpeta se encuentran las 10 imágenes (Custom image) de la fuente  DIY del reloj. Cuando se abre el software Elekstube IPS.exe y no se selecciona alguna de las fuentes del menú inferior, las dos ventanas superiores muestran el mensaje: 'Custom image' y al pulsar el botón [Compile Custom Picture]: 

1 - El software copia las 10 imágenes de la carpeta .\EleksTube\img y las pega o reescribe por las que haya en la carpeta .\EleksTube\esptool\data

2 - Compila las 3 fuentes de la carpeta .\EleksTube\esptool\data generando un nuevo archivo binario, y lo sustituye por el que había en la carpeta .\EleksTube\esptool\bin

Imágenes personalizadas con ‘EleksTube IPS.exe’

Vista gráfica en los 6 tubos

Como el software ‘EleksTube IPS.exe’ no permite cargar imágenes nuevas y tampoco modificar las que tiene en su lista, la única forma de cargar imágenes nuevas al reloj utilizando este software sería siguiendo estos pasos:

  1. Con el software cerrado, borramos las 10 imágenes del usuario de la carpeta .EleksTube\esptool\data (este paso se puede omitir, no es imprescindible).
  2. Abrimos la carpeta .EleksTube\img y sustituimos las imágenes que contiene por las nuevas que hemos creado, pero respetando el formato y nombre de las que tenía. Se puede cambiar una sola imagen o las 10, teniendo en cuenta que el reloj mostrará de izquierda a derecha las 6 primeras (0..5).
  3. Abrimos el software, y sin seleccionar una fuente nueva del menú inferior, pulsamos el botón [Compile Custom Picture]. Así el programa copiará las imágenes de la carpeta .EleksTube\img en la carpeta .EleksTube\esptool\data,  y creará un nuevo  archivo binario con las 3 fuentes. Para hacer esta operación no es necesario que esté conectado el reloj con el PC,
  4.  Conectar el reloj al PC, seleccionar el puerto COM al que está conectado, y pulsar el botón: [Upload Image] para enviar el nuevo archivo binario al reloj y actualizar sus 3 fuentes de caracteres.

¿Dónde fabricar el PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

Concurso de creadores 2023

El plazo para presentar los proyectos finaliza el 15 de Enero de 2024

PCBWay abre de nuevo la participación al concurso de creadores. Por el simple hecho de participar, se asignarán 500 beans (créditos) en tu cuenta de PCBWay, los cuales podrás canjear en la tienda por un Raspberry Pi Pico.

Además del premio por la participación, PCBWay repartirá un total de 16 premios: 1 primer premio al mejor proyecto, 2 segundos premios, 3 premios para los clasificados como terceros y 10 premios más para los proyectos más populares.

Consulta todos los detalles y las bases del concurso, pulsando el siguiente link:

Acceso al concurso de creadores PCBWay 

 

 

Transmisor experimental DCF77

Construcción de un sencillo transmisor de 77,5 KHz, para poder poner en hora los relojes DCF77 que no reciban correctamente la señal del transmisor de Alemania. DCF77 es una estación de radio situada en Alemania, que transmite en onda larga (LW). Comenzó a funcionar como una estación de frecuencia estándar el 1 de enero de 1959, y a partir de junio de 1973 se incorporó en la transmisión la información de la fecha y la hora. La señal DCF77 utiliza la codificación de cambio de amplitud para transmitir información de tiempo, codificada digitalmente al reducir la amplitud de la portadora hasta un 15% de su nivel nominal durante 0,1 o 0,2 segundos, al comienzo de cada segundo. Una reducción de 0,1 segundos indica un 0 binario; y una reducción de 0,2 segundos indica un 1 binario.

En hora con DCF77

Diseño de un transmisor DCF77

A pesar de la gran precisión en frecuencia y fase con la que se transmiten las señales DCF77 desde el transmisor de Alemania, los relojes de uso doméstico no comprueban la información que reciben con tanta precisión.

Modulación en amplitud y fase del transmisor DCF77

Un reloj DCF77 sólo necesita recibir una portadora de 77,5 KHz, con amplitud variable al ritmo de cada segundo y la codificación de tiempo adecuada. Si colocamos un pequeño transmisor de 77,5 KHz en las proximidades de un reloj DCF77, la portadora podría tener una deriva en frecuencia de +/-300 Hz, no incluir la modulación en fase, y aumentar la profundidad de modulación en amplitud hasta el 100%. Así es posible transmitir la información DCF77 con una modulación ASK.

Modulación ASK

Todo esto facilita mucho la construcción de un transmisor experimental, que nos permita actualizar la hora de los relojes DCF77 que no estén situados en un lugar favorable para recibir las señales horarias desde el transmisor de Alemania.

Cobertura DCF77

Otra ventaja de disponer de un pequeño transmisor DCF77, es que podríamos utilizar estos relojes en lugares en los que nunca podrían funcionar… en América, Asia, etc.

Transmisor DCF77

Desde hace años estoy utilizando pequeños transmisores para sincronizar relojes DCF77, pero los dos transmisores que tengo están diseñados con algunos componentes electrónicos que actualmente son difíciles de encontrar. Por ese motivo voy a construir un nuevo transmisor DCF77, barato y muy sencillo de construir. El nuevo transmisor está construido a partir del microprocesador ATmega328P, utilizado en las placas de desarrollo Arduino UNO.

Esquema: Transmisor DCF77

El transmisor se encarga de generar la frecuencia portadora (77,5 KHz) y controlar su modulación, interrumpiendo la señal de RF (ASK). Con el fin de facilitar el transporte y ubicación en el lugar más favorable al reloj o relojes a sincronizar, el transmisor es de baja potencia y está alimentado con una batería de Li-ion (3,7V).

Interface: USB-RS232
Interface: USB-RS232

La codificación DCF77 la genera una aplicación para PC, y la envía al transmisor mediante el hilo RTS de un puerto serie. Actualmente ningún PC dispone de un puerto serie (DB9), pero es muy fácil y barato conseguir un interface USB-RS232.

 

(Actualizado: Septiembre 2020)

El archivo que necesitas para programar el ATmega328P, lo puedes descargar de forma gratuita desde el siguiente enlace: TX_DCF77.rar

Software de control DCF77

Con el fin de poder programar y controlar el reloj LED de esfera rotante, he creado una aplicación para Windows (DCF77.exe),  la cuál también incluye la funcionalidad de generar  las señales DCF77. El software DCF77.exe puede controlar de forma simultánea el reloj LED de esfera rotante y el transmisor DCF77.

El software DCF77.exe lo puedes descargar de forma gratuita y con seguridad desde el siguiente enlace:  Install_DCF77.rar

New version in english: Install_DCF77_eng.rar

Caja para el transmisor

La caja se considera como un complemento de cualquier montaje electrónico, y además suele ser lo más laborioso de realizar, debido a su mecanizado. Actualmente es más fácil conseguir una caja a medida y mecanizada a buen precio, utilizando una impresora 3D.  El trabajo más laborioso es el realizar el diseño, pero una vez hecho, se pueden hacer todas las cajas que quieras sin la necesidad de perder más tiempo en realizar sus mecanizados.

Caja 3D: Transmisor DCF77

Los ficheros que necesitas para fabricar esta caja, los puedes descargar desde el siguiente enlace:

DCF77 experimental transmitter

¿Dónde fabricar el PCB?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos, pero no en todas podemos conseguir pequeñas tiradas a buen precio. Por suerte, ahora disponemos de Internet y es mucho más fácil que antes. Podemos buscar empresas en cualquier parte del mundo, y es más fácil encontrar un fabricante que haga nuestros prototipos (PCB) a buen precio. Una de las empresas más grandes del sector es PCBWay.

Logo: PCBWay

https://www.pcbway.es/

Ahora el servicio de montaje en PCBWay por $ 30, con envío GRATUITO mundial:
https://www.pcbway.es/quotesmt.aspx

PCB: TX_DCF77

Acceso a los GERBER de este PCB

PCB from PCBWay

Link of my shared project

 

Programar sistema horario 12/24 (assembler)

Programación de un reloj LED, para que pueda mostrar la hora en cualquier formato (12h-24h). Esta modificación se realiza en un ‘Reloj-Fecha-Cronómetro-Temperatura‘ con 4 dígitos de 7 segmentos LED, de control serie. El controlador de este reloj está construido a partir del microprocesaror AT89S52, con encapsulado de 44 pines (SMD).

Sistema horario

El sistema horario de 24 horas es una convención de medición del tiempo, en la que el día se contabiliza de medianoche a medianoche. Con formato de 24 horas, las horas se empiezan a contar a partir de la medianoche, y se presenta con los números comprendidos entre el 0 y 23.

Sistema horario de 12/24 horas

El sistema de 24 horas es el más utilizado en la actualidad, y el sistema de 12 horas se utiliza principalmente para la comunicación oral, porque es más intuitivo. A pesar  de que el sistema de 24 horas es el más usado en comunicaciones escritas, en algunos países lo denominan como horario militar o astronómico, y prefieren realizar la presentación de la hora utilizando el sistema tradicional de 12 horas.

Esta actualización se realiza en el Reloj SMD que mostré anteriormente:

Construye un Reloj SMD

Planteamiento al programar el reloj

Cuando se programa el firmware de un reloj, es importante saber si el display de presentación es multiplexado o no, así como el valor de tiempo mínimo a mostrar.

  • Cuando el display es multiplexado, el microprocesador tiene que enviar la información con una cadencia mucho más rápida,  siempre superior a la persistencia del ojo humano. Si se quiere evitar el efecto de parpadeo, la frecuencia de refresco del display debería ser como mínimo de 50 Hz.
  • La cadencia de lectura de la información horaria debe ser igual o superior al valor del tiempo mínimo que se quiera mostrar en el display. Si el reloj muestra décimas de segundos, el microprocesador tendría que leer la información del chip RTC con una cadencia mínima de 1/10 segundos, cada 100 mSeg.

Funcionamiento del reloj

A pesar de que el Reloj SMD no es multiplexado, porque la presentación se realiza enviando los datos en serie (registro de desplazamiento), lo he programado con una frecuencia de refresco muy alta.

CPU: Reloj SERIE

 

Display: Reloj SERIE

Esto lo hice así, porque utilicé la estructura de programa del reloj de esfera rotante FC-209, el cuál si era multiplexado.

Reloj LED con 2 alarmas

Antes de presentar la hora en el display por primera vez, el microprocesador tiene que leer la información del chip RTC (DS1302). Y si el reloj muestra segundos, la lectura se debería hacer que como mínimo una vez por segundo.

Frecuencia de refresco del display

Aprovechando las prestaciones y velocidad del microprocesador que he utilizado, decidí insertar la rutina de lectura del chip DS1302 (RTC) dentro de la rutina de refresco del display. Como se puede ver en la gráfica anterior,  la lectura se está haciendo con una cadencia de 926 veces por segundo.

Actualización del firmware

La nueva actualización del Reloj SMD, la puedes descargar de forma gratuita desde el siguiente enlace:

J_RPM_v2_RELOJ_SERIE.HEX

Con esta actualización es posible configurar el sistema de presentación horaria en el display, pudiendo elegir el sistema de 12/24 horas.  Para incorporar esta función, he utilizado el método más sencillo de hacerlo: Internamente todo funciona en modo 24 horas, y dependiendo del modo en el que se deba mostrar la hora, el programa pasará o no a través de las rutinas de conversión a formato de 12 horas. Y esto lo hará sólo  antes de enviar la hora al display, porque los menús de configuración siempre mostrarán la hora utilizando el formato de 24 horas. Así no será necesario modificar los menús de configuración, ni cambiar el sistema horario del chip DS1302 (RTC). A continuación os muestro el código que he añadido en esta actualización.

Rutinas de programación en assembler

Funcionamiento de la subrutina: ValAB

Funcionamiento de la rutina Val_AB

Menús de configuración

Los menús de configuración de esta versión (v2), no cambian con respecto a la  versión anterior (v1). En esta versión aparece un nuevo menú, y es para configurar el sistema de presentación horaria (12/24) del reloj.

Menús de configuración del reloj

 

¿Programar con interrupciones?

Elegir el modo de programar un microprocesador: consultando de forma cíclica el estado de cada periférico (Polling), o creando una interrupción por cada periférico a controlar. Métodos a seguir para programar el microprocesador AT89S52 con 2 interrupciones y una consulta cíclica. Posibles efectos indeseados cuando se programa con interrupciones.

Interrupciones AT89S52

Cuando se programa un microprocesador con la finalidad de tomar decisiones, dependiendo del estado de alguno o varios dispositivos periféricos, como podrían ser: pulsadores, un reloj en tiempo real (RTC), termómetros, alarmas, etc… existen dos formas posibles de hacerlo:

-> La forma más sencilla y clásica sería consultar de forma cíclica el estado de cada periférico.

-> Lo ideal sería habilitar una interrupción en el procesador por cada periférico a controlar.

Consulta secuencial y periódica

En este proceso de consulta, también conocido como polling en inglés, es el propio procesador el que determina el momento en el que realiza la consulta.

Consulta secuencial

Este método tiene el inconveniente de ser poco eficiente, porque el procesador consume muchos recursos realizando las instrucciones de sondeo… y además en algunas aplicaciones, una pequeña demora de tiempo afecta a la precisión de la medida o produce efectos indeseados. Por ejemplo, un error en la precisión cuando se utiliza un temporizador del procesador como patrón de tiempo de un reloj o cronómetro. Efectos indeseados, como podrían ser parpadeos, cuando se genera una señal PWM para el control de brillo de un display… o inestabilidad  si se utiliza esta misma señal PWM para  regular la velocidad de un motor.

Programar con interrupciones

Una interrupción sirve para detectar en tiempo real el momento en el que se debe realizar la consulta a cada periférico. Con la interrupción, es el periférico quien se encarga de avisar al procesador, y mientras tanto el procesador puede realizar otras tareas.

Habilitación de las interrupciones

El orden de prioridad de todas las interrupciones se pueden programar en el procesador. Así el procesador decidirá si un proceso se debe interrumpir o no, en caso de que se produzca una interrupción mientras se está atendiendo a otra, o cuando se produzcan dos o más interrupciones de forma simultánea. Un mal uso de la prioridad en las interrupciones, también podría provocar efectos indeseados.

Prioridad de las interrupciones

En la imagen anterior, al no tener la prioridad de interrupción el Timer que genera la señal PWM, se producen fluctuaciones en el ancho de impulso generado.

 

 

Reloj-Temperatura de abanico

Stick de 16 LEDVeremos la hora y temperatura en el kit Shake Stick Flash, de 16 LED por columna. El circuito original incluye el micro controlador AT89S52, y aunque ya viene programado con 4 imágenes diferentes, lo reprogramaremos para darle una mayor versatilidad. Este kit incluye un conector ISP (In-system programming), y esto facilita su uso como plataforma de desarrollo para realizar prácticas con este tipo de micro controladores.

Sensor: DS18B20
Sensor: DS18B20

Después de añadir al kit un sensor de temperatura (DS18B20) y un pequeño módulo de reloj en tiempo real (DS1302), sólo necesitaremos actualizar el firmware (se adjunta de forma gratuita) para ampliar las funcionalidades que ya le hicimos en la versión anterior. Este firmware permitirá la presentación de la Fecha y Hora, así como 15 imágenes diferentes (gráficos o textos). Uno de sus mensajes podrá reprogramarse a través del puerto serie, los otros 14 mensajes están almacenados en ROM, y podrán modificarse editando el archivo del firmware de forma muy simple.

Módulo RTC: DS1302
Módulo RTC: DS1302

El montaje de estos dos sensores en el kit es muy sencillo. En el siguiente esquema podemos ver las conexiones que se deben realizar. El módulo RTC (DS1302) se puede montar de forma opcional; si no se instala, el Stick mostrará solamente la temperatura cuando esté seleccionada la presentación 1ª. En caso de que se instalen ambos sensores, se alternará la presentación de la hora y temperatura.

Equema: Reloj-Temperatura
Equema: Reloj-Temperatura

IMPORTANTE: Para que aparezca la hora en el Stick, es imprescindible programar el módulo RTC, utilizando el software que se adjunta, o mediante la conexión de dicho módulo con el reloj de esfera rotante (ver la explicación en el video).

En los dos videos anteriores, podrás encontrar todos los detalles de funcionamiento y programación:

Stick LED programable #1
Stick LED programable #2

Stick.exe (v1.0.5)
Stick.exe (v1.0.5)

El nuevo firmware se puede descargar de forma gratuita desde el siguiente enlace: J_RPM_v2_STICK.HEX

Nueva versión del software de control, para programar los textos de la memoria RAM y actualizar la hora: Install_Stick_v1.05.zip

 

Stick LED programable #2

Personalización de los textos y gráficos que aparecen en el Stick LED, modificando el firmware con un editor hexadecimal. Instalación del software de control Stick.exe y programación del texto que se almacena en la memoria RAM del Stick LED.

Puedes descargar este software de forma gratuita desde el siguiente enlace: Install_Stick_v1.04.rar

Este programa funciona bajo Windows.  Para instalar hay que descomprimir el archivo .rar  y ejecutar el archivo .exe siguiendo las indicaciones del instalador.

Para modificar  los textos fijos de la memoria ROM, es necesario editar el fichero del firmware antes de programar el micro controlador AT89S52. Podemos utilizar cualquier editor hexadecimal, o hacerlo desde el propio interface de programación. En total se pueden modificar 19 mensajes, los 4 primeros dobles (8 mensajes) y los 11 siguientes simples.  La matriz completa de cada mensaje está compuesta por 48 columnas y 16 filas (número de diodos LED del Stick). La imagen completa tiene una resolución de 16×48 = 768 pixel. Para poder escribir los textos de forma sencilla,  el firmware utiliza un Font de caracteres de 16×6, y así los textos se introducen en ASCII, pudiendo editarse directamente desde el teclado del PC.

Editar ROM
Editar ROM

Como puede apreciarse en la imagen anterior, todos los caracteres deben escribirse en la ROM con letras mayúsculas. Los caracteres de la tabla que se muestran con el fondo de color verde, están asociados a los gráficos que se almacenan en la ROM. En total hay 6 gráficos almacenados, y cada uno de ellos ocupa 4 códigos de la tabla. La correspondencia de los códigos de algunos caracteres en minúscula de la tabla ASCII, son traducidos en gráficos cuando se muestran en el Stick LED.

Interface RS-232
Interface RS-232

Para poder modificar el mensaje doble que se almacena en la memoria RAM, es necesario intercalar un interface entre el Stick y el PC o dispositivo móvil. En este caso he utilizado un interface convencional RS-232 (ver imagen anterior). También podría utilizarse un interface TTL-USB, TTL-Bluetooth, etc.

Software: Stick.exe
Software: Stick.exe

En la imagen anterior se muestra la pantalla del software de programación Stick.exe. Una vez conectado el puerto serie del PC con el Stick siempre encendido y mediante el interface, sólo sería necesario editar los dos textos y enviarlos. El software mostrará un acuse de recibo al final del envío, o mostrará un mensaje de error en caso de que no se reciba la confirmación desde el Stick.

Stick LED programable #1

Stick de 16 LEDMontaje del kit Shake Stick Flash, de 16 LED por columna. El circuito original incluye el micro controlador AT89S52, y ya viene programado con 4 imagenes diferentes. Lo interesante de este kit es que se incluye el conector ISP (In-system programming), y esto facilita su uso como plataforma de desarrollo para realizar prácticas con este tipo de micro controladores. Principios de funcionamiento del Stick LED (persistencia del ojo humano), descripción del esquema eléctrico, montaje y diseño de un nuevo firmware. Este firmware permitirá la presentación de 16 imagenes diferentes (gráficos o textos) y uno de sus mensajes podrá reprogramarse a través del puerto serie. Los otros 15 mensajes, almacenados en ROM, podrán modificarse editando el archivo del firmware de forma muy simple.

STICK: persistencia del ojo humano
STICK: persistencia del ojo humano

El principio de funcionamiento del Stick LED está basado en la persistencia que tiene el ojo humano. El ojo hace que cualquier imagen vista se grabe en la retina durante 100 mSeg. aproximadamente. Si desplazamos la columna del Stick con los 16 diodos LED encendidos a una velocidad inferior a 100 mSeg., nuestra retina apreciará una imagen continua y plana, con la forma del movimiento que hemos descrito. Si durante ese tiempo (<100 mSeg.) hacemos que los diodos LED se enciendan y apaguen con un intervalo de tiempo fijo, veremos el mismo arco luminoso, pero mostrando la mitad de las líneas verticales apagadas. Para mostrar gráficos o letras, sólo tendremos que codificar los puntos de cada columna y presentarlos en  el intervalo de tiempo adecuado… y eso es lo que hará el micro controlador.

Este firmware se puede descargar de forma gratuita desde el siguiente enlace: J_RPM_v1_STICK.HEX

Montaje: Stick 16 LED
Montaje: Stick 16 LED

Este kit incluye un portapilas para utilizarlo con dos baterías de tipo AAA. Esto supone que si utilizamos dos pilas de 1,5 V estaríamos alimentando el circuito con 3V. Aunque con esta tensión podría llegar a funcionar el micro controlador, estaría funcionando muy cerca del umbral mínimo… y dejaría de funcionar en cuanto las pilas estuvieran un poco descargadas. Además, la luminosidad que obtendríamos del Stick sería bastante baja. Para evitar estos problemas, la mejor solución es alimentar el circuito con una batería recargable, y añadir un circuito de carga con protección (TP4056) junto con otro circuito ‘Step UP’ que eleve y estabilice la tensión de salida hasta 5V.

Esquema: Stick Flash
Esquema: Stick Flash

En el esquema se muestra la numeración de los componentes, según aparece en la serigrafía del PCB (circuito impreso). Si queremos programar el micro controlador utilizando el conector ISP (In-system programming), es conveniente sustituir la resistencia del circuito Reset, original de 1K5, por otra de 10K.

Con el nuevo firmware que se adjunta, es posible mostrar 16 imágenes diferentes, 5 de ellas son dobles. Al final dispondremos de 4 imágenes dobles y 11 simples almacenadas en la memoria ROM, y  otra imagen doble almacenada en la memoria RAM. Esta última podremos reprogramarla cuantas veces queramos, enviando los datos desde un PC o dispositivo móvil. Para ello tendremos que intercalar un interface (RS232, RS485, IR, Bluetooth, etc) y conectarlo a las líneas RX/TX del Stick (UART). Los textos de la memoria ROM también podremos sustituirlos, pero lo haremos con un editor hexadecimal, modificando los textos del firmware antes de programar el micro controlador.

Intervalos de tiempo (Stick LED)
Intervalos de tiempo (Stick LED)

Con el fin de mejorar la presentación de los mensajes más cortos, el micro controlador modificará los intervalos de tiempo en función del número de caracteres-columnas que tenga que presentar (ver la imagen anterior).

Medir las revoluciones R.P.M. #2

Medidor RPM de alta resolución, mostrando la velocidad de giro de cualquier motor en un display LCD. El rango de medidas está comprendido entre 12 y 65.535 RPM. La construcción de este medidor se detalla en el documento anterior, ya que se utilizan los mismos componentes electrónicos. Comprobación de funcionamiento y medidas RPM, con diferentes motores y en ambos modos de funcionamiento (promediado y precisión).

El firmware de este medidor, lo puedes descargar desde el siguiente enlace: RPM_v101.HEX

Medidor R.P.M.
Medidor R.P.M.

Con esta nueva versión de firmware, es posible seleccionar dos modos de funcionamiento:

PROMEDIADO (puente cerrado):

Interruptor óptico ranurado
Interruptor óptico ranurado

El interruptor óptico, mediante el corte del haz luminoso, mide el tiempo de giro del motor con una resolución de 100 uSeg. El valor que muestra el display es la media de las dos últimas medidas de tiempo, después de convertirlas en revoluciones por minuto. La única operación que se debe realizar, es multiplicar el tiempo promediado de las dos últimas medidas por 60 segundos (mSeg x 60.000). Con este modo de funcionamiento se pueden leer cómodamente los valores RPM, porque los cambios se realizan con baja resolución.

PRECISIÓN (puente abierto):

Con este modo de funcionamiento es posible apreciar la estabilidad de rotación de los motores, sobre todo los que funcionan a un alto régimen de revoluciones. El valor que se muestra en la pantalla se calcula en función de la resolución máxima que permita el micro-procesador. En este caso, al utilizar un cristal de cuarzo de 22,1184 MHz, la temporización mínima es aproximadamente 0,588 uSeg. Utilizando esta resolución, la precisión de la medida hasta 10.000 RPM será mejor de 1 RPM. Con altas revoluciones de giro, veremos cambiar los valores más bajos con mayor o menor velocidad, dependiendo de la estabilidad de giro del motor. La velocidad de refresco del display no depende de la velocidad de giro del motor, está fijada a 4 veces por segundo (250 mSeg).

Medir las revoluciones R.P.M.

Medir las revoluciones de giro de un motor en un display LCD, utilizando un interruptor óptico ranurado como sensor. Posible librería y código para realizar este medidor con Arduino (FreqCount.h). Esquema del medidor de RPM, utilizando el micro-procesador de Atmel AT89C2051 y un display LCD de 2 líneas y 16 caracteres. Comprobación de funcionamiento y medidas RPM con diferentes motores.

En un video anterior (Medir con precisión las RPM de un motor, es muy fácil) mostraba cómo se podían medir con precisión la velocidad de giro de un motor, de una forma fácil y sencilla.

Interruptor óptico ranurado
Interruptor óptico ranurado

El captador utilizado era un interruptor óptico ranurado,  posteriormente se medía la frecuencia de giro del motor y se convertía en revoluciones por minuto (RPM). La frecuencia se puede medir con un frecuencímetro, un osciloscopio o mediante una aplicación gratuita utilizando un dispositivo móvil.

Medir RPM con el móvil
Medir RPM con el móvil

En esta ocasión vamos a realizar un medidor de RPM completo, mostrando las revoluciones por minuto en un display LCD. El controlador del medidor se podría hacer con ARDUINO, utilizando la librería FreqCount.hpero deberemos tener en cuenta las limitaciones que tiene esta librería, dependiendo del modelo de Arduino que estemos utilizando

Arduino UNO & FreqCount.h

  • Pin de entrada para realizar la medida: 5
  • Deshabilitación de la sentencia  analogWrite() en pines: 3, 9, 10 y 11.
Conexiones LCD Keypad Shield
Conexiones LCD Keypad Shield

Si queremos utilizar le módulo LCD Keypad Shield con nuestro Arduino UNO, tendremos que utilizarlo sin ensamblar ambos módulos mediante sus conectores, porque coincide el pin de medida (FreqCount.h) con una de las conexiones del módulo LCD. Será necesario modificar las conexiones del LCD, ensamblando ambos módulos con cables para mover la entrada/s ocupada/s.

Con el fin de mejorar la resolución de las medidas… y después de algunos incidentes que tuve con mi Arduino, decidí hacer todo el desarrollo partiendo desde cero, y utilizar el micro-controlador de Atmel: AT89C2051.  En esta primera versión (quizás haga alguna mejora) la resolución de las medidas las determina un temporizador de 0,1 milisegundos (100 uSeg). De esta manera, la medida máxima de revoluciones por minuto que podríamos medir serán 600.000 RPM. Sin embargo, al ser un tiempo fijo, el valor inmediatamente inferior que mediríamos sería 300.000 RPM. Es decir, un salto entre medidas excesivamente grande. Por este motivo limité el valor máximo a 65.535 RPM (16 bit), aunque la medida máxima que podremos ver en el display será 60.000 RPM. Por otra parte, la medida mínima empezará a partir de 12 RPM. Esta limitación queda determinada por el tiempo máximo de espera que fijé para actualizar el valor mostrado en el display, que son 5 segundos.

Medidor R.P.M.
Medidor R.P.M.

 

Tabla RPM
Tabla RPM

En la tabla de la izquierda (click para ampliar) podemos observar los valores de RPM que podrían aparecer en el display, cuando medimos valores entre 4.000 y 60.000 RPM. Como podemos comprobar, la resolución de las medidas empeora al subir la velocidad de giro, lógico porque partimos de un temporizador de valor fijo (100 uSeg). Como en los motores de uso más frecuente la velocidad de giro no suele superar las 4.000 RPM, la resolución que se mostrará con este medidor será bastante buena.