Plata Coloidal, PCB y Firmware

Actualización del firmware del generador de Plata Coloidal y diseño de su PCB. En la nueva versión del firmware (v1.3), el generador sigue midiendo la conductividad del agua al principio para calcular el tiempo de la electrolisis, pero cada 5 minutos realiza una nueva medida para corregir de forma automática el tiempo restante, en función del nuevo valor TDS que haya medido. Este reajuste también se puede hacer en modo manual en cualquier momento, mediante el pulsador. Aprovechando que este generador mide la conductividad del agua, ahora incluye una tabla con los valores TDS del agua y puede mostrar su valor en el display.

Generador de Plata Coloidal con Arduino

Para ensamblar los componentes  electrónicos del Generador de Plata Colidal que monté hace unas semanas, utilicé 2 PCBs de tipo universal. Realicé todas las conexiones por debajo, estañando hilos y siguiendo el esquema del montaje.  Como entiendo que esto muy laborioso para gente que no acostumbra a utilizar el soldador, he diseñado un PCB con el fin de facilitar su construcción y mejorar su acabado final. Y de paso, también le he dedicado un poco más de tiempo al firmware para mejorar sus prestaciones.

PCBs del Generador de Plata Coloidal

Nuevo firmware (v1.3)

En la versión anterior (v1.2), el generador realizaba una medida de la conductividad del agua al iniciar el proceso, con el fin de ajustar el tiempo total de la electrolisis en función de las PPM de la Plata Coloidal que queramos obtener.

Esquema del diseño: Generador de Plata Coloidal

Como pudimos comprobar en artículo anterior, la conductividad del agua aumentaba con la temperatura. Además, el valor TDS del agua también iba subiendo durante la electrolisis. Así la conductividad del agua irá subiendo durante la electrolisis, pero al mismo tiempo también irá bajando si hemos calentado el agua al empezar, hasta alcanzar la temperatura ambiente.

Aunque no es tan importante conseguir la medida exacta de las PPM en la Plata Coloidal, es muy sencillo corregir este problema. En la nueva versión del firmware (v1.3), el generador sigue midiendo la conductividad del agua al principio para calcular el tiempo de la electrolisis, pero cada 5 minutos realiza una nueva medida para corregir de forma automática  el tiempo restante, en función del nuevo valor TDS que haya medido. Este reajuste también se puede hacer en modo manual en cualquier momento, mediante el pulsador. Esto sería útil si se interrumpiera el proceso de la electrolisis, con el fin de remover el contenido o limpiar los electrodos, porque en estos casos suele variar ligeramente la conductividad del agua.

Aprovechando que este generador mide la conductividad del agua, he añadido en el firmware una tabla  con los valores TDS para poder mostrarlos en el display. Así no sería necesario comprar un medidor TDS, y podremos comprobar siempre la calidad del agua que vayamos a utilizar. Hay que tener en cuenta que esta medida TDS sólo es válida si se respetan todas las características de este montaje: el tipo de electrodos, separación entre ellos y su circuito limitador de corriente.

El rango de medidas TDS que permite mostrar este generador no es muy amplio, porque su circuito limitador de corriente interfiere en la medida comprimiendo su escala. De todas formas tiene una buena resolución con valores bajos del TDS,  entre 0 y 16ppm.

Ahora también, durante el proceso de la electrolisis, cada 30 segundos el generador mide el valor TDS del agua y lo muestra en la línea superior del display. Esta medida se alterna con el valor PPM actual de la Plata Coloidal.

Fuente de alimentación

Durante el montaje del primer generador me encontré con un problema en la alimentación, porque al conectar el relé que alimenta el circuito Step-Up se producía un pico de consumo, y en algunas ocasiones se bloqueaba o reiniciaba el micro controlador. Este problema se solucionó cuando monté 2 condensadores de 1000uF en la línea de alimentación de 5V. Lo extraño, es que se sigue apreciando una pequeña fluctuación en la iluminación del display cuando se conecta el relé.

Para salir de dudas, antes de elegir la fuente de alimentación a montar en el nuevo PCB, hice algunas medidas de consumo con el osciloscopio.

Medida de consumos con dos fuentes de alimentación conmutadas

Para obtener una gráfica de corriente al alimentar el relé y el circuito Step-Up a la vez, puse una resistencia de 0,8  Ohmios en serie con la alimentación de 5V.

Las puntas del osciloscopio del canal 1 las puse en la salida de la fuente de alimentación que estaba midiendo, con el fin de comprobar el comportamiento de cada fuente, con carga y sin carga. Y las puntas del canal 2 del osciloscopio las puse en paralelo con la resistencia de 0,8 ohmios.

Para obtener el valor de la corriente, sólo hay que dividir la tensión que muestre el osciloscopio entre el valor de la resistencia.

Si observamos las gráficas de corriente:

  • Con la fuente antigua se produce un pico de corriente de 1,67A de muy corta duración, pero suficiente para que la fuente de alimentación pudiese cortar su salida, ya que esta fuente es de 700mA. Después consume 288mA durante 81mS, el tiempo que tarda el módulo Step-Up en cargar sus condensadores y estabilizar la tensión de salida. El consumo en funcionamiento del relé y el módulo Step-Up, alimentados con la fuente de 5V es de 116mA.
  • Con la fuente pequeña, que es la versión moderna y también de 700mA según el fabricante, la gráfica de corriente es muy parecida. El pico de arranque es de 1,1A (también de muy corta duración) baja a 250mA y se mantiene durante 97mS, tiempo muy parecido al de la otra fuente, luego baja la corriente a 118 mA. que sería la corriente de funcionamiento con la fuente cargada.

Si comparamos ahora lo que ha sucedido con la tensión en ambas fuentes al conectar la carga:

  • Con la fuente antigua la tensión cae desde 5,1V hasta 4,49V y con la nueva desde 4,9V hasta 3,7V. Cuando se estabiliza el consumo, la caída de tensión de la fuente antigua es de 50mV, y si lo dividimos por el consumo de 116mA -> Ri =  0,43 Ohm.
  • Con la fuente nueva, la caída de tensión es de 120mV, y si lo dividimos por el consumo de 118mA -> Ri = 1 Ohm.

Lo que también se aprecia, es que la nueva versión de la fuente filtra mucho más las frecuencias transitorias que se montan sobre la tensión continua, pero a cambio su tensión de salida es menos estable.   

Teniendo en cuenta que el transformador de la fuente de alimentación nueva es más pequeño que el de la antigua, no parece muy lógico que ambas fuentes sean de 3,5W.

Test con el nuevo PCB

Durante las pruebas iniciales que hice en este nuevo montaje, se volvió a repetir el mismo problema que tuve en el montaje anterior. Al cerrarse relé, en algunas ocasiones se reiniciaba el ATMega328P. Como lo único que cambia con respecto al montaje anterior es el PCB, lo primero que hice es revisar las vías de alimentación y sus desacoplos.

Red +5V en el PCB

En el diseño de este PCB coloqué los dos condensadores de 1000uF separados en dos zonas, uno a la salida de la fuente de alimentación y el otro en las proximidades del relé, porque son los dos puntos de mayor consumo de todo el circuito.  Así la poca resistencia de la línea de positivo que une ambos condensadores, junto con ellos, forman un filtro PI. A continuación del segundo condensador de 1000uF está la vía que alimenta el display, el transistor de control del relé, el circuito Reset y la alimentación del ATMega328P.

El condensador de desacoplo de 100nF del ATMega328P lo puse al final de la red de +5V del PCB, para suprimir cualquier posible inducción entre el segundo condensador electrolítico y el final de la red de +5V. Lo único que cambia con respecto al montaje anterior, es que los dos condensadores electrolíticos de 1000uF están muy cerca del ATMega328P, y además sus conexiones las hice con hilo y estaño, y su sección es mucho mayor que la vía de este circuito impreso.

Medida VCC en ATmega328P

Aunque ya había hecho las pruebas del comportamiento de la fuente de alimentación, me faltaba por comprobar qué sucede con la tensión que le llega al ATMega328P en el PCB, con los dos condensadores de 1000uF conectados y todo funcionando.

Pico de consumo

Al medir con el osciloscopio me encontré con algo que no esperaba. El pico de consumo tan alto que se produce al alimentar el circuito Step-Up, descarga los condensadores y provoca que la tensión baje hasta 2,93V durante 27,4mS., hasta que se recupera la fuente y se vuelven a cargar los condensadores. Como el umbral de indecisión del microcontrolador está en el 50% de su tensión de alimentación, 2,93V están muy próximos al punto donde actúa el circuito reset del ATMega328P.

En estos casos el problema se debería resolver donde se produce, y se debería sustituir la fuente de alimentación por otra que soportara mejor los picos de consumo. Este es el problema de la fuentes de alimentación conmutadas, que se protegen y provocan cortes a su salida.

Como el pico de caída de tensión cambiaría muy poco aunque se aumentase la capacidad de los condensadores electrolíticos, colocando un condensador de 10uF entre los pines 7 y 8 del ATMega328P, se evita que entre cualquier pico transitorio y se reinicie, porque al estar alimentado con 5V no debería reiniciarse hasta que bajara su tensión a 2,5V.

Piezas 3D

La base de la caja ahora está hecha con una sola pieza, porque la serigrafía inferior apenas se daña con los soportes de impresión 3D, y así se simplifica el montaje.

Con el fin de facilitar la inserción y ajuste de los soportes de los electrodos en la base de la caja, he diseñado otra pieza 3D. Es una guía para alinear correctamente los electrodos, y mantener su inclinación de 5º durante el montaje.  Después también servirá para proteger los electrodos cuando no se use el generador, y no será necesario desmontar siempre los electrodos  después de cada uso.

Pieza guía 3D para los electrodos del generador

El diseño de las piezas 3D que necesitas para fabricar la caja y el soporte de este montaje, las puedes descargar de forma gratuita desde el siguiente link:

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

¿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

 

PCBs del Generador de Plata Coloidal

Los dos PCBs que he utilizado en este montaje, los puedes conseguir a través de los siguientes enlaces:

Colloidal Silver Generator

Adapter for 2×16 LCD

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 

 

Termostato de precisión #1

Construcción de un termostato digital, para controlar temperaturas con una precisión de 0,1ºC. Este termostato utiliza el sensor DS18B20, está controlado con el microprocesador AT89S52, y permite regular temperaturas entre -40 y +100ºC. También es posible controlar de forma simultánea los dos circuitos de un climatizador, el de frío y calor. Este termostato podría utilizarse como climatizador en un automóvil, controlar la temperatura de un edificio, la del agua de una piscina, incluso la de una incubadora. En esta primera parte, se muestra el diseño y construcción del termostato.

Descripción de funcionamiento

Este termostato permite calibrar su sensor de temperatura (DS18B20) en saltos de 1ºC, permitiendo un Offset entre -5 y +4ºC sobre el valor medido. Este valor de calibrado, junto con el valor de temperatura de referencia del termostato, también configurable mediante los pulsadores, son almacenados en la memoria RAM del propio micro controlador (AT89S52). Para evitar la pérdida de dichos valores en caso de perder la alimentación mientras está funcionando, el circuito incorpora una pequeña batería recargable de 3,6V Ni-MH.

Esquema: Termostato de precisión

Salidas de control

El termostato permite controlar los dos circuitos de  un climatizador de forma simultánea, el circuito de frío y el de calor. El micro controlador dispone de 2 salidas con estado lógico ‘0’ y otras 2 con estado lógico ‘1’. De esta forma es posible conectar cualquier driver en sus salidas. En este circuito he utilizado un módulo compuesto por 2 relés de 5V, de disparo con estado lógico ‘0’ y entradas optoacopladas (ver imagen).

2 Relay Module

Power Down Mode

La activación del ‘modo apagado’ (Power Down) del micro controlador permite minimizar al máximo su consumo. La detección de dicha caída de tensión se realiza mediante la lectura del nivel lógico 1/0 en el pin 39 (P0.0) del micro controlador. A pesar de que se podría simplificar el circuito intercalando una resistencia entre dicho pin (P0.0) y la entrada +5V, es mucho más eficaz entregar un nivel lógico en su entrada fijando su umbral de decisión. El circuito detector del umbral de apagado, está fijado por el valor del diodo Zener montado entre la base del transistor BC557 y masa (ver el esquema). En lugar del diodo Zener, puede utilizarse un diodo LED que tenga un umbral de encendido próximo a 3V.

A pesar de que el consumo del micro controlador se reduce bastante, es conveniente conectar la batería únicamente cuando el termostato esté en uso. De otra manera, la batería acabaría por descargarse. La finalidad de la batería es la de mantener los valores de configuración mientras el termostato está funcionando, y no cuando esté almacenado sin uso. En el esquema podemos ver que la desconexión de la batería se realiza mediante la extracción de un puente (jumper) entre el polo negativo de la batería  y masa. Este puente puede sustituirse por un pequeño interruptor deslizante, para poder accionarlo sin la necesidad de tener que abrir la caja.

Circuito impreso

Para la realización de este termostato he utilizado un circuito impreso de tipo universal. Es cierto que el acabado queda mucho mejor si se monta en un circuito impreso hecho a medida. Sin embargo, muchos aficionados a la electrónica son reacios a ‘perder el tiempo’ en fabricar un circuito impreso, y prefieren utilizar placas de tipo universal. Además, la fiabilidad del circuito impreso sólo depende del cuidado que se ponga durante el montaje y soldadura de sus componentes… el aspecto no mejora la fiabilidad.

Circuito impreso universal

Firmware

Termostato de precisión (v1.00)

Caja y frontal

He utilizado una caja de plástico de tipo comercial, de tamaño 130×130 mm y 35 mm de altura. Para darle un mejor acabado, he utilizado un trozo de Polimetilmetacrilato (Plexiglas).

Frontal delTermostato

El mecanizado y serigrafía lo he realizado con la CNC.

 

Firmware for LED Clock – ENGLISH

Firmware for FC-209 kit in English, LED clock with rotating sphere. This video is dedicated to fans of channel who don’t understand Spanish language, but they’re interested in some assemblies that have presented on the channel.

Flow diagram
Flow diagram

English firmware: J_RPM_v5e_EC1204B.HEX

The explanation about how working of all components contained in this circuit, not going to repeat in English, because the manufacturers documentation is already in English … and is much fuller than that I could explain here.