ESP32: Reloj / Cronómetro

Construcción de un Reloj/Cronómeto de precisión, controlado con un módulo ESP32. Este cronómetro dispone de un pulsador, permitiendo su manejo en modo local y también a distancia. Para el control remoto se puede utilizar cualquier teléfono móvil o PC, que esté conectado a la misma red local que el módulo ESP32.

Hasta ahora, todos los relojes que he construido con el ESP32 necesitaban un acceso a Internet vía Wi-Fi para funcionar. En este caso, cuando el reloj funcione en modo cronómetro no será imprescindible disponer del acceso Wi-Fi. A través de su pulsador se pueden controlar todas las funciones del cronómetro,  y lo único que se perdería sin el acceso a Wi-Fi es el control remoto.

Reloj Pac-Man con ESP32 & UTF-8

Crono_ESP32.ino

Al principio del fichero Crono_ESP32.ino están los comentarios, indicando algunos link de compra de los módulos y descarga de librerías

hw_timer_t >>> Es la variable del ‘timer’ que se utiliza para crear las interrupciones de 100 mSeg del cronómetro

has_expired >>> Es la variable booleana que gestionará el ‘void loop’ para incrementar con precisión los 100mSeg. del cronómetro cuando esté en marcha.

Mode_CRONO >>> Es la variable booleana necesaria para gestionar si está funcionando como reloj o cronómetro.

pinPulsa >>> Define el pin GPIO donde está conectado el pulsador del cronómetro.

WifiManager.h >>> Es la librería necesaria para configurar le red WiFi a la que irá conectado el módulo ESP32.

Void IRAM_ATTR >>> Es la rutina de la interrupción, que se ejecutará siguiendo con precisión un intervalo de tiempo. Cada 100mSeg. se pondrá en alto la variable booleana: has_expired

void setup()

Se inicializa el puerto serie y se carga la configuración del reloj, almacenada en la memoria EEPROM del módulo ESP32.

Se configura el LED azul del módulo ESP32 como salida, para indicar de forma visual los incrementos y estado del cronómetro. También se configura el pin al que va conectado el pulsador como entrada en modo Pull-Up.

timer = timerBegin(0, 80, true) >>> Como el cristal de cuarzo del ESP32 es de 80 MHz, dividimos entre 80 para tener como referencia 1MHz, para que el Timer 0 se desborde cada microsegundo.

timerAttachInterrupt(timer, &timerInterrupcion, true) >>> Aquí activamos la interrupción del timer, y hacemos la llamada a la rutina: void IRAM_ATTR timerInterrupcion() 

timerAlarmWrite(timer, 100000, true) >>> Aquí activamos el disparo del timer cada 100.000 uSeg. = cada décima de segundo se producirá la ejecución de la rutina: void IRAM_ATTR timerInterrupcion() 

timerAlarmEnable(timer) >>> Se habilita la alarma del timer.

Librerías personalizadas

En la misma carpeta del proyecto se incluyen dos librerías, personalizadas para este Reloj/Cronómetro:

fonts_es.h >>> Contiene las dos fuentes de caracteres que utiliza el reloj, incluyendo los caracteres especiales que se utilizan en español, como son las letras acentuadas, Ç y Ñ; tanto en minúsculas como en mayúsculas .

max7219.h >>> Contiene las rutinas necesarias para mostrar y animar los caracteres en las 4 matrices LED, gestionadas en serie con sus respectivos circuitos integrados MAX7219.  Es importante indicar en esta librería la posición en las que van montadas las matrices LED sobre el circuito impreso… en este caso van rotadas 90º.

https://github.com/J-RPM/ESP32_Crono/

ESQUEMA

En el esquema se muestran con las conexiones que tenemos que hacer entre el módulo ESP32 y el PCB que contiene las 4 matrices LED. Son las mismas conexiones que tenía el anterior firmware del reloj, lo único nuevo son los dos hilos de conexión del pulsador con el módulo ESP32.

Caja 3D

Para hacer la carcasa del Reloj/Cronómetro utilicé el mismo diseño 3D que hice para el reloj, sin diseñar el tamaño y posición del agujero del pulsador. Así es posible mecanizar la caja a gusto de cada uno, para utilizar cualquier modelo de pulsador, eligiendo su posición… o mecanizar un paso de cable en la caja para colocar un pulsador en el exterior.

Caja 3D, para el PCB de 8 dígitos LED de 7 segmentos

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

¿Necesitas fabricar un circuito impreso?

Actualmente hay muchas empresas que se dedican a fabricar circuitos impresos (PCB), 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.

 https://www.pcbway.es/

Logo: PCBWay

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 

 

 

Energía SOLAR, aprovechando los excedentes

Controlando la conexión y desconexión de una toma de enchufe, en función de los excedentes de energía eléctrica que genera una instalación solar, es posible adaptar los consumos de la vivienda de forma automática, y reducir el coste de la factura.

Toma de red inteligente

Hace unos días  monté un controlador de encendido y apagado automático en dos equipos de aire acondicionado, para aprovechar una parte de la potencia excedente que generan los paneles solares en mejorar la climatización de la vivienda.

Climatización GRATIS… automatizando los excedentes de energía Solar

Toma de enchufe inteligente

Ahora complementaré este sistema de control, añadiendo una toma de alimentación portátil.  Esta toma de red la utilizaré para conectar equipos auxiliares, los cuales no necesiten permanecer siempre encendidos, consiguiendo así un ahorro extra en la factura eléctrica.

La toma de red se podría conectar a una regleta múltiple, y controlar varios dispositivos a la vez. La corriente máxima que soporten los contactos del interruptor que utilice,  definirán la potencia máxima de uso. La electrónica de este controlador de red no varía en función de la potencia que maneja, sólo se necesita definir los umbrales de encendido y apagado en el firmware, antes de cargarlo en el módulo ESP32.

Los posibles usos que podría tener esta toma de red son muchos. Por ejemplo para alimentar un termo de agua caliente auxiliar, un calefactor o radiador portátil, la depuradora de una piscina y su climatización, el punto de carga para un coche eléctrico… y cualquier otra cosa que se nos ocurra. Para el uso que yo le voy a dar, he fijado sus dos preset de encendido por excedente de potencia solar en 1,2kW y 2,2kW. Una vez programado el módulo, se podrá elegir el preset de funcionamiento a través del interface Web del ESP32. La desconexión automática de ambos preset es la misma, y siempre desconectará la carga cuando la potencia solar excedente sea inferior a 100W.

PRESET de encendido y apagado

En el montaje anterior, como protección para el aire acondicionado, configuré el intervalo de tiempo mínimo entre dos conmutaciones automáticas consecutivas con 3 minutos. En este caso, como la toma de red la utilizaré para otros usos, he reducido el tiempo de protección a 1 minuto, consiguiendo así un control de encendido/apagado más rápido.

Configuración inicial del interruptor de red inteligente

Los interruptores de RED

Los interruptores de red más utilizados son los de tipo mecánico, principalmente por su bajo precio y gran aislamiento cuando los contactos están abiertos. Para automatizar la conexión y desconexión eléctrica de cualquier dispositivo se utilizan relés, también llamados contactores.

Los relés funcionan a partir de una tensión de control de baja corriente, normalmente suministrada por un autómata o circuito micro-controlador. El accionamiento que permite el paso de corriente a la salida de un relé, puede ser mecánico o electrónico.

Relé mecánico

El problema principal de un relé de tipo mecánico, es la degradación de sus contactos cuando trabaja con corrientes altas, pudiendo producir con el tiempo falsos contactos y chisporroteo. Otro inconveniente es que su tiempo de accionamiento, al ser mecánico es lento y su retardo no siempre es el mismo, quedando limitando su uso para controlar equipos que no requieran velocidad ni precisión en sus maniobras.

Relé de estado sólido (SSR)

Los relés de estado sólido, también conocidos por su abreviatura en inglés SSR, no tienen partes móviles, son silenciosos, rápidos y no sufren degradación. El inconveniente principal es que no soportan picos de corriente superior al definido por el fabricante, porque se averían. En caso de avería, los relés SSR  normalmente se quedan con sus dos salidas en cortocircuito, manteniendo la carga permanentemente conectada a la red eléctrica y consumiendo energía.

Esquema del relé SSR

Al igual que los relés electromecánicos, los SSR se accionan con una pequeña corriente en su entrada. La tensión y su rango de funcionamiento, tanto de entrada como salida, dependen del modelo de SSR que se elija.

Antes de comprar un relé de estado sólido (SSR) es importante saber que existen tres tipos, tienen diferentes rangos de tensión en su entrada y salida, y su corriente de trabajo máxima está limitada. Los SSR se identifican en su referencia con las dos letras finales, indicando si se activan con tensión continua o alterna:

  • DA: Tensión continua en la entrada y alterna en la salida
  • AA: Tensión alterna en la entrada y en la salida
  • DD: Tensión continua en la entrada y en la salida

Detalles del Montaje

Para hacer este interruptor automático, he utilizado un relé SSR-40 tipo DA. Es un relé sólido que se activa con una tensión continua en su entrada, y permite controlar el paso de una tensión alterna de 40A como máximo en sus dos terminales de salida. El inconveniente es que para soportar esa corriente máxima de 40A, sería necesario montarlo con un disipador.  Como voy a utilizar este SSR sin disipador, con el fin de reducir el tamaño del circuito, he limitado su carga máxima intercalado un fusible rápido de 15A. Con esta corriente se podrían controlar consumos de hasta 3kW sin problemas,  potencia más que suficiente para el uso que le quiero dar.

Esquema del interruptor de red inteligente

El rango de tensión de control de este SSR va desde 3 hasta 32V de tensión continua. Como lo voy a controlar con un ESP32 y funcionan a 3,3V, tensión muy próxima a la mínima de control de este SSR, he medido todo antes de diseñar el circuito. He comprobado que este SSR funciona conectando una tensión continua a partir de 2,5V, y consume aproximadamente 8mA. La corriente de control sube ligeramente a medida que sube la tensión de disparo, con 5V consume 10mA aproximadamente.  Así que no habría problema para controlarlo directamente con el ESP32. Para proteger el pin de control del módulo ESP32, he intercalado un transistor NPN configurado en modo seguidor de emisor, conectando el colector del transistor al +5V de la fuente de alimentación. Así la corriente de control del SSR la suministrará la fuente de alimentación, y no pasará a través del pin de salida del módulo ESP32.

Los componentes que hay que añadir  en este montaje son muy pocos, y al igual que hice con el controlador del aire acondicionado, los he montado y cableado todos en una placa aislante. He utilizado también los mismos pines del módulo ESP32, pero en este caso invirtiendo los pines de entrada y salida. He utilizado como salida el pin GIO2, porque así el LED azul del módulo ESP32 se encenderá cuando se esté disparando el control del SSR. Para disponer de esta indicación en el exterior y al mismo tiempo comprobar que el transistor funciona correctamente, he añadido otro LED junto con su resistencia limitadora, conectado en los terminales de entrada del SSR.

El pin TMS/GPIO14 está configurado como entrada en modo Pull-Up, y se utiliza con un interruptor a masa, para  forzar su funcionamiento a modo manual. Cuando el interruptor está cerrado, el módulo ESP32 mantendrá de forma indefinida la tensión de salida de 230VAC, aunque la potencia del excedente solar sea inferior a 100W. De la misma forma, también es posible conectar y desconectar la tensión de salida en cualquier momento a distancia, utilizando el interface Web del ESP32.

Interface WEB

A través del interface Web del ESP32 es posible deshabilitar por completo el circuito de control, evitando así que el módulo SSR entregue tensión a su salida, incluso aunque estuviera su interruptor en modo manual. Cuando se deshabilita el control del SSR, el módulo ESP32 deja de realizar consultas al inversor  y desaparecen las medidas de potencia, tanto en el interface Web como el display  OLED. En este caso el display OLED funcionaría en modo reloj, mostrando únicamente la fecha y hora local con precisión.

Interface WEB del interruptor inteligente

Para evitar las molestias que podría ocasionar la luz del display OLED durante la noche, he añadido la opción de su apagado nocturno. Cuando el display  OLED está configurado en modo día, nunca se apaga. Y si se configura en modo noche, el display  OLED se encenderá a partir de las 7:00 y se apagará a partir de las 23:00. Esta modificación también la he añadido en la última actualización del firmware del controlador del aire acondicionado (v1.54).

Firmware del ESP32

El firmware que necesitas para programar el microcontrolador ESP32, lo puedes descargar de forma gratuita desde el siguiente enlace:

https://github.com/J-RPM/Consumption-control-of-surplus-solar-energy

Caja 3D

Piezas 3D, para la toma de red automática

Los ficheros .stl que necesitas para fabricar estas piezas, lo puedes descargar desde el siguiente enlace: https://www.thingiverse.com/thing:6135400

¿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://pcbway.com/g/r7N1ct

 

Climatización GRATIS… automatizando los excedentes de energía Solar

Actualización del firmware del reloj de precisión (ESP32), para controlar el encendido y apagado automático de dos equipos de aire acondicionado. Automatizando el consumo eléctrico en función de los excedentes de energía Solar, se puede reforzar el sistema de climatización de una vivienda a coste cero.

Control AC, conectado en el evaporador SAMSUNG

Excedentes de energía Solar

Cuando se instalan paneles solares en una vivienda, es muy importante adaptar los hábitos del consumo con los de mayor producción solar, porque esta es la forma más rápida de amortizar la inversión.  Hay electrodomésticos que no se pueden adaptar a las horas de sol, como son los frigoríficos y cocinas, pero hay otros que sí. Por ejemplo: lavadora, lavaplatos, secadora, plancha y los equipos auxiliares de climatización.

Gráfica del consumo y potencia solar

La ventaja principal de una instalación solar orientada al autoconsumo de una vivienda, es que durante el día se podría disponer de una potencia de pico superior a la contratada. Además esta energía es  gratis, y se genera en los periodos en los que el precio de la electricidad es más cara, produciendo así un ahorro mayor en la factura.

Por otra parte, con la energía solar sobrante se podría mejorar el sistema de climatización de la vivienda, consiguiendo así un mayor confort a coste cero. La climatización de una vivienda siempre es mejorable, porque intentaremos reducir su coste al mínimo imprescindible, limitando el uso de la calefacción en el invierno y del aire acondicionado en verano.

Automatizar el consumo eléctrico

Hacer un uso eficiente de la energía solar sobrante para aplicarla a la climatización no parece complicado, el  problema es que la radiación solar es muy variable y podría provocar picos de consumo extra cuando cambian las condiciones meteorológicas. La solución sería automatizar la conexión y desconexión de  los sistemas de climatización y agua caliente auxiliares, adaptándolos a los excedentes de producción solar.  Así estos elementos de climatización auxiliar utilizarían la energía sobrante y se desconectarían rápidamente de forma automática. Por ejemplo al aumentar el consumo en la vivienda por haber conectado la lavadora, o debido a la caída de la producción solar al paso de nubes.

Hace unos meses hice una adaptación del reloj de precisión construido con un módulo ESP32, para poder visualizar los valores de producción solar en su display. Esta información es muy útil, porque muestra la energía sobrante que podríamos utilizar a coste cero.

Supervisor solar Fronius

En esta ocasión haré unas modificaciones sobre el firmware anterior, para poder controlar el encendido y apagado automático de dos equipos de aire acondicionado. En concreto lo voy a controlar los dos splitter de un equipo SAMSUNG, modelo AM18A1E09. A través del interface Web de control del ESP32,  es posible configurar los umbrales de encendido y apagado de forma  individual, configurando a uno de ellos como principal y al otro como secundario.

Interface WEB del ESP32

Así el equipo configurado como 1 será el principal,  se conectará el primero y se apagará el último, provocando menos cortes de encendido/apagado que el número 2. Según el fabricante SAMSUNG, cada splitter consume aproximadamente 0,87 kW. Así la configuración de encendido del equipo principal se hará cuando el excedente de potencia sea superior a 1,5 kW, y se desconectará cuando el excedente sea inferior a  100W. El equipo secundario se conectará cuando el excedente de potencia sea superior a 1,7 kW y se desconectará cuando el excedente sea inferior a  300W.

Compatibilidad con el funcinamiento en modo manual

Este controlador de encendido y apagado es totalmente compatible con el funcionamiento manual del aire acondicionada, ya sea a través del pulsador de encendido del splitter, o de su mando a distancia. Cuando se conecta el aire acondicionado utilizando el mando a distancia o su pulsador de encendido, el módulo de control detectará que está funcionando en modo manual, y no tomará el control del equipo.  Cuando se desconecte el equipo de forma manual, después de 3 minutos,  el módulo ESP32 tomará el control automático de encendido y apagado. En caso de que no se quisiera conectar  el aire acondicionado en ningún momento, por ejemplo en invierno, se podría deshabilitar la función de control mediante el interface Web del  ESP32, o desconectar la alimentación del módulo de control mediante su interruptor. Con el fin de proteger el compresor del equipo, he fijado el intervalo de tiempo mínimo entre dos maniobras en 3 minutos. Esta limitación es sólo en modo automático, porque desde el interface Web del ESP32,  el mando a distancia o el pulsador del splitter,  se podrá encender y apagar el equipo en cualquier momento.

Montaje del controlador y sus conexiones, en un equipo SAMSUNG modelo AM18A1E9

Aunque este equipo de aire acondicionado sea doble, cada evaporador funciona de forma independiente y habría que montar su propio controlador.

Conexiones entre el compresor y los 2 evaporadores SAMSUNG

Este control automático está construido con un módulo ESP32 y un pequeño display OLED. Como el firmware del módulo ESP32 es totalmente compatible con el reloj de precisión, sería posible montar  también el display de 8 dígitos y el amplificador de audio.

Esquema de conexiones del controlador en el evaporador SAMSUNG

Este circuito está formado por 3 bloques: el interface de entrada, el circuito de control (ESP32) y el interface de salida:

Interface de entrada

Es el circuito detector de estado del  evaporador o splitter, y es necesario para informar al módulo de control si el equipo está funcionando o parado. Como el ventilador del evaporador siempre estará alimentado cuando el equipo funciona, lo he tomado como referencia. El ventilador de este equipo tiene dos devanados, entre los hilos azul y amarillo he medido una tensión alterna de 120V aproximadamente, y entre los hilos azul y rojo de 160VAC. Ambas tensiones apenas varían con la velocidad del ventilador, pero he tomado como referencia la tensión de los hilos azul y rojo, porque me han parecido más estables. Para aislar la tensión de red del circuito de control, he intercalado el opto-transistor H2210. He utilizado este modelo  porque tengo varios, pero podría utilizarse cualquier otro. El LED del opto-transistor se encenderá al recibir la tensión alterna del ventilador, pero esta tensión alterna de 160V hay que convertirla a continua y reducirla a 1 voltio aproximadamente. De esto se encarga el rectificador de media onda junto con la resistencia limitadora y el condensador de filtro. Al rectificar en media onda, la disipación en la resistencia es menor  y con una resistencia de 47K 1/4W  funciona perfectamente. El condensador de filtro de 1000uF es muy importante, porque hay que evitar que el rizado de 50Hz se transmita al circuito de salida. El transistor de salida del opto-acoplador conducirá cuando el evaporador esté funcionando, provocando que el siguiente transistor deje de conducir y entregue un nivel alto en el pin IO2 del módulo ESP32. He utilizado este pin porque va conectado con el LED azul del módulo ESP32, y esta indicación es muy útil para hacer pruebas. Para evitar posibles transiciones de estado debido a ruidos de la fuente de alimentación o inducciones generadas por el propio módulo ESP32, he añadido en la propia placa del módulo un condensador cerámico de 100nF. A pesar de que el módulo ESP32 funciona con 3 voltios, no hay problema en conectar la resistencia de colector del transistor a 5V, porque hay una resistencia en serie de 10K y la corriente será muy baja.

Hay que tener en cuenta que la placa de control de este equipo de aire acondicionado realiza un test cada vez que se da la orden de puesta en marcha, y tarda alrededor de 8 segundos en alimentar el ventilador del evaporador. Al apagar no sucede lo mismo, porque corta la alimentación del ventilador de inmediato. Para gestionar adecuadamente los estados desde el controlador y no producir falsas maniobras, en el firmware se produce una pausa de 10 segundos desde que se da la orden de arranque, antes de comprobar si el ventilador está alimentado. Cuando se da la orden de apagado, esta pausa se reduce a 2 segundos, es el tiempo necesario para mostrar la orden en el display OLED, antes de presentar el estado de funcionamiento del equipo.

Módulo de control ESP32

Es el encargado de gestionar las órdenes de control y mostrar la información en el display OLED, y de forma opcional en otro de 8 dígitos de 7 segmentos. Durante las pruebas, en alguna ocasión se quedó colgado el módulo ESP32 al conectar su alimentación, pero sólo sucedía cuando lo alimentaba con la fuente conmutada. Para solucionar este problema, he colocado un condensador de 10uF en los terminales de entrada de 5V del módulo ESP32.

Interface de salida

Es el encargado de enviar la orden de cambio de estado al evaporador del equipo de aire acondicionado. He utilizado el pin rotulado como TMS, el cual se corresponde con el GPIO14.

MH-ET_LIVE_D1_mini_ESP32_pinout

Este circuito actúa como si se pulsara el botón de encendido/apagado del evaporador, y lo hace mediante un transistor NPN en modo Open-Collector. Si medimos la tensión en el PCB de control del evaporador, entre los dos terminales del pulsador hay 5V de tensión continua y uno de los dos terminales es GND. Así el transistor de este módulo de control puede conectarse en paralelo de forma permanente, sin interferir al funcionamiento normal del equipo. Es importante conectar cada terminal en su sitio, el colector del transistor de salida se conecta con el terminal  del pulsador en el que hemos medido +5V (terminal superior del pulsador).

Al alimentar el circuito de control me encontré con un problema, porque también se encendía el aire acondicionado. Cuando se reinicia el módulo ESP32 aparece una tensión alta en el pin TMS durante algo menos de 1 segundo, el tiempo que tarda el ESP32 en cargar los estados de inicio de sus pines,  pero este tiempo es suficiente para crear una pulsación y provocar un cambo de estado en el evaporador. Para evitar este problema, he añadido un circuito RC en la entrada del transistor de control, compuesto por una resistencia de 100K y un condensador de 100uF. De esta forma es necesario recibir una tensión alta durante 2 segundos como mínimo, para provocar que el transistor empiece a conducir y se genere el cambio de estado. Como es lógico, los impulsos de control del cambio de estado los he tenido que configurar a 3 segundos.

Fuente de alimentación

Este control automático se alimenta con 5 voltios de continua, tensión que podría haber tomado de la placa de control del evaporador, pero es más seguro y fiable montar una fuente de alimentación aparte.

Vista interior del evaporador SAMSUNG

Los 230VAC de la fuente de alimentación se toman de los terminales 1 y 2 del  evaporador, intercalando un pequeño interruptor en serie para poder desconectar por completo el circuito en cualquier momento.

Conexiones con el evaporador

He utilizado una placa aislante, para montar todos los componentes externos con el módulo ESP32. En un lateral está la clema de 4 conexiones, para conectar la alimentación de 5V (2 conexiones), la detección de encencido del evaporador GPIO2 y la salida TMS-GPIO14 para conectar con el transistor 2N2222 que contralará el encendido y apagado del evaporador (pulsador).

Vista interior del control automático

Las otras 3 clemas de 2 conexiones, son los 6 hilos que unen el controlador con el evaporador:

1 – Alimentación del controlador (230VAC)

  • Marrón: FASE
  • Azul: NEUTRO

2 – Tensión de los ventiladores (160VAC)

  • Naranja: FASE
  • Azul: NEUTRO

3 – Pulsador ON/OFF del evaporador

  • Rojo: +5
  • Negro: GND

Firmware del ESP32

El firmware que necesitas para programar el microcontrolador ESP32, lo puedes descargar de forma gratuita desde el siguiente enlace:

https://github.com/J-RPM/Solar-controller-with-ESP32

Caja 3D

Caja 3D, para el controlador del aire acondicionado

El fichero .stl que necesitas para fabricar esta caja, lo puedes descargar desde el siguiente enlace: https://www.thingiverse.com/thing:6118679

¿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://pcbway.com/g/r7N1ct