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.
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: voidIRAM_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º.
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.
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.
Desde hace unos meses tengo funcionando una instalación solar destinada al autoconsumo de la vivienda. Como el proceso de instalación fue bastante largo debido a la falta de material, junto con algunos problemas con la empresa instaladora, me dio tiempo a modificar los cableados a mi gusto, y añadir algunos medidores de control en el nuevo cuadro eléctrico antes de que la empresa instaladora diera de alta la instalación.
Detalles de la instalación solar
La instalación solar es trifásica, compuesta por un inversor Fronius Symo de 7KW y 20 paneles solares de 380 W. Los paneles están repartidos en las dos caras del tejado, un string con 12 paneles conectados en serie y el otro con 8 paneles.
Conexión con Internet
En una instalación solar es muy importante que el inversor disponga de una conexión estable con Internet, con el fin de controlar su correcto funcionamiento y poder controlar su rendimiento. La mejor solución sería conectar el inversor con un cable Ethernet al router de la vivienda, a no ser que el nivel de la señal WiFi que le llegase al inversor fuera muy bueno. En mi caso, como la distancia entre el inversor y el router es muy larga, junto con la tirada de los cables de continua que conectan los paneles con el inversor, añadí un cable RG174 de bajas pérdidas, y conecté una antena doble BIQUAD en el tejado, muy cerca y orientada hacia el router WiFi.
Cuadro eléctrico DC
En el cuadro de continua de la instalación solar, he montado 2 voltímetros para medir la tensión que genera cada string de los paneles solares. Como los medidores de tensión son digitales, es necesario alimentarlos para que funcionen. He utilizado una pequeña fuente de alimentación conmutada de 230 VAC a 5 VDC. La entrada de la fuente de alimentación está conectada a la tensión continua que genera el string de 8 paneles, los cuales producen una tensión continua máxima de 320V, tensión inferior a la máxima permitida por la fuente conmutada. Ambos medidores están conectados directamente con los cables de bajada de los paneles, antes de los fusibles de protección de 15A, pero la fuente y los dos medidores están protegidos con dos fusibles de 100 mA.
Cuadro eléctrico AC
En el cuadro de alterna he intercalado un relé trifásico de protección, el cual incluye un medidor de corriente y tensión por fase. Este relé contiene un pequeño microprocesador, pudiendo programar los umbrales de tensión y corriente máxima y mínima. Los medidores muestran la tensión y corriente que está generando el inversor en cada fase. Al ser un inversor trifásico, la potencia total generada se reparte de forma proporcional entre las 3 fases. Un inversor solar conectado a la red, aumenta ligeramente la tensión de salida a medida que aumenta su producción solar. De esta forma no está de más disponer de un voltímetro que muestre en tiempo real la tensión que hay en cada una de las fases.
Smart Meter de Fronius
La conexión entre el inversor Fronius y su medidor Smart Meter utiliza 3 hilos, los dos hilos de datos y el hilo de masa. He utilizado los 5 hilos sobrantes de la manguera para conectar las 4 salidas GPIO del inversor y un hilo con la salida +12V. Así puedo controlar el encendido de los 4 indicadores LED que he montado junto al medidor.
Las 4 salidas GPIO del inversor son Open-Collector y las he configurado para que se cierren cuando se superen 4 umbrales de potencia. Los 3 primeros indicadores LED los he asociado a la producción solar: 1, 2 y 3 kW y el tercer indicador, el LED rojo, se enciende cuando exista un excedente superior a 1 kW. Es decir, cuando se esté vertiendo a la red una potencia superior a 1KW.
Reloj & Inverter
Para mostrar los datos de potencia del inversor he utilizado el reloj de precisión que hice con el módulo ESP32, el cual mostraba la fecha y hora en un display de 7 segmentos. Al diseño original le incorporé los avisos por voz, quedando la versión 1.46. A partir de ahí he ido depurando el código hasta optimizar al máximo las funcionalidades del nuevo display, llegando así a la versión que ahora publico, v1.51.
Con la primera versión del reloj, sólo se necesitaba una conexión a Internet al conectar la alimentación, para que pudiera conectarse con el servidor NTP de Internet y sincronizara la fecha y hora local del ESP32. Después el display podía funcionar de forma indefinida mostrando la hora del módulo ESP32, y ya no importaba si se perdía la conexión WiFi.
Ahora sí es imprescindible mantener la conexión WiFi en todo momento, para permitir la conexión con el inversor Fronius y poder mostrar los datos en el display. Por ese motivo ahora se chequea cada 30 segundos la conexión WiFi, y si el módulo perdiera en algún momento la conexión, automáticamente se reiniciaría y no volvería a funcionar hasta que se conectase de nuevo con el servidor NTP de Internet, y sincronizara de nuevo el reloj del ESP32.
Al igual que en la versión original, con este código también se puede mostrar la información en un display de 7 segmentos y otro OLED de forma simultánea. Así es posible hacer diferentes versiones utilizando el mismo firmware. Actualmente utilizo esta versión de 3 formas diferentes:
Con un display de 7 segmentos y el módulo de voz.
Con un display de 7 segmentos, sin el módulo de voz y acoplando todo al reloj de pared de esfera rotante. En este caso el reloj del ESP32 también resincroniza la fecha y hora del reloj de esfera rotante. Lo hace a través del puerto serie y sincronizando la fecha y hora de forma alterna, entre los segundos 20 y 50 de cada minuto.
Versión reducida, utilizando sólo un display OLED para mostrar los datos.
Medidas de potencia en el display
El módulo ESP32 interroga al inversor cada 3 segundos, así las medidas de potencia que muestra el display se actualizarán cada 3 segundos. El módulo ESP32 se puede configurar mediante su servidor Web desde cualquier dispositivo móvil, permitiendo así que muestre en su display la información que más nos interese. Por defecto, entre los segundos 58 y 2 de cada minuto, el display de 7 segmentos siempre mostrará la hora, y cada 30 segundos comprobará la conexión WiFi. Aprovechando esta ventana de tiempo, el display podría mostrar la información de la fecha en caso de que estuviese habilitada su presentación. Si el módulo ESP32 está configurado para mostrar alguno de los valores de potencia del inversor, cada 30 segundos chequeará si el inversor presenta algún error o no ha respondido a la última consulta, para mostrar ese error si existe.
En condiciones normales durante el día, el display no debería mostrar ningún error, sólo de forma ocasional podría mostrar algún error de conexión, debido a la colisión en el tiempo de varios dispositivos que consultan al mismo tiempo. En mi caso, estoy consultando los datos del inversor Fronius de forma local desde 4 equipos diferentes: la Raspberry y desde los 3 displays que tengo funcionando.
Cuando el display muestra alguno de los valores de potencia del inversor, la letra que indica el valor de potencia puede aparecer fija, o parpadeando si existe un excedente de potencia superior a 1kW.
Leer los datos del inversor Fronius
Los datos del inversor Fronius se pueden obtener de dos formas diferentes, mediante una conexión TCP utilizando el protocolo ModBus, o realizando las consultas definidas en la API de Fronius. Yo he utilizado ambos métodos para obtener los datos más relevantes del inversor, y luego almacenarlos en una Raspberry PI que tengo conectada directamente en el router. Así dispongo de un archivo histórico muy completo, pudiendo generar gráficas y comprobar el rendimiento de la instalación en cualquier momento.
Para la consulta de los valores de potencia a través del módulo ESP32, he utilizado dos consultas de la API de Fronius. El inversor responderá a las consultas de la API enviando los datos formateados en un archivo JSON. Para facilitar la lectura de las respuestas que envía el inversor, he utilizado la librería: ArduinoJson.h
Potencias del inversor
Esta es la consulta que realiza el módulo ESP32, para obtener los datos de potencia (la IP es la del inversor Fronius):
Esta es la consulta que realiza el módulo ESP32, cuando el inversor no genera potencia solar o su «StatusCode» es diferente a 7 (la IP es la del inversor Fronius):
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.
Construcción de un reloj de precisión, con 8 dígitos LED de 7 segmentos. Este display se configura desde un teléfono móvil vía WiFi. La información de la fecha y hora se sincroniza a través de un servidor NTP, convirtiéndolo así en un reloj muy preciso. Este display está construido con el módulo ESP32 y 8 dígitos LED de 7 segmentos, pudiendo conectar también un segundo display OLED de 64×48 pixel (0,66 pulgadas).
8 dígitos de 7 segmentos con MAX7219
Hace unos meses monté un reloj de precisión, sincronizado desde un servidor NTP. Hice dos versiones distintas, y en ambas utilicé 4 matrices LED de 8×8 pixel.
Ahora voy a montar otro reloj todavía más pequeño y barato, utilizando 8 dígitos LED de 7 segmentos.
Este reloj tendrá la misma precisión y funcionalidades que los anteriores, sincronizando la fecha y hora a través de un servidor NTP, y controlando sus funciones mediante un interface Web, a través de una conexión WiFi.
Esquema de montaje
El montaje de este reloj es muy rápido y sencillo, sólo hay que conectar 5 hilos entre un lateral del PCB de 8 dígitos y el módulo ESP32.
Configuración con interface WEB
Este reloj LED se configura a través de su propio interface Web, tecleando la dirección IP que le asigna el Router WiFi, en la ventana de cualquier navegador de Internet que esté conectado a la misma red. Todos los cambios se guardan en la memoria EEPROM del módulo ESP32.
De esta forma el reloj siempre arrancará con los parámetros que tenía programados la última vez que se desconectó su alimentación.
Firmware
El archivo que necesitas para programar el ESP32, lo puedes descargar de forma gratuita desde el repositorio GitHub:
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.
Construcción de un display LED de reloj y texto con matrices LED. Este display se configura desde un teléfono móvil vía WiFi. La información de la fecha y hora se sincroniza a través de un servidor NTP, convirtiéndolo así en un reloj muy preciso. Este display está construido con el módulo ESP32 y 4 matrices LED de 8×8 pixel. De forma opcional, también se puede montar un segundo display OLED de 64×48 pixel (0,66 pulgadas).
Este display lo he montado con un módulo LED que ya contiene las 4 matrices, en lugar de los 4 módulos independientes que utilicé en el montaje anterior:
En la construcción del último reloj LED que monté, lo hice conectando 4 matrices LED de 8×8 pixel. Estas matrices llevan las conexiones de entrada y salida por la cara inferior y superior, y esto obliga a que el tamaño del reloj sea más grande de lo necesario.
En este caso voy a montar otro reloj con un display LED del mismo tamaño, pero será más pequeño que el anterior. Aunque el nuevo firmware también permite utilizar un segundo display OLED, en este caso no lo voy a montar, y además utilizaré 4 matrices LED interconectadas en un sólo PCB.
Esquema de montaje
El montaje de este reloj es muy rápido y sencillo, sólo hay que conectar 5 hilos entre un lateral del display LED y el módulo ESP32.
Configuración con doble interface WEB
Ahora el display LED permite mostrar la hora, o textos rotantes de hasta 255 caracteres. Tanto el modo de funcionamiento como su configuración, se programa a través de una conexión WiFi, y se guarda en la memoria EEPROM del módulo ESP32. De esta forma el reloj arranca siempre en el modo en el que se dejó la última vez: modo texto, o modo reloj.
Esta nueva versión de firmware incluye un menú WEB con nuevas opciones, y también animaciones cada vez que se reciben datos desde el reloj.
Firmware
El archivo que necesitas para programar el ESP32, lo puedes descargar de forma gratuita desde el repositorio GitHub: Clock-Text_ESP32
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.
Construcción de un reloj con matrices LED, configurado desde un teléfono móvil vía WiFi. Este reloj toma la información de la fecha y hora a través de un servidor NTP, convirtiéndolo así en un reloj muy preciso. El reloj está construido a partir del módulo ESP32, acoplando un pequeño display OLED de 64×48 pixel (0,66 pulgadas) y 4 matrices LED de 8×8 pixel.
Como este reloj está creado a partir del Transmisor DCF77 que mostré anteriormente, hay mucha información de interés relacionada con el módulo ESP32 y el display OLED en el siguiente documento:
El display LED del reloj está construido con 4 matrices LED de 8×8 pixel. Estas matrices LED se pueden comprar junto a su controlador en módulos independientes, y encadenar en serie todas las que se necesiten. El circuito integrado controlador de la matriz LED, es el MAX7219.
MAX7219
El CI MAX7219 permite controlar matrices de 8×8 LED de cátodo común. También puede controlar un grupo de 8 displays de 7 segmentos, pudiendo habilitar o no su decodificador interno BCD. Este CI incluye un registro de desplazamiento, y se pueden encadenar para controlar una serie de matrices LED de 8×8, o una serie de grupos de 8 displays de 7 segmentos.
El MAX7219 dispone una memoria SRAM para almacenar el estado de los 64 LED que puede controlar, y se encarga de realizar la multiplexación para su encendido individual, con una frecuencia de refresco típica de 800 veces por segundo a todo el conjunto. La memoria SRAM mantiene la información siempre que la alimentación no baje de 2V. La carga de datos se realiza en serie mediante el control de 3 hilos más 2 de alimentación (Data, Clock, CS, GND, Vcc)
El MAX7219 incluye un control de apagado de los LED reduciendo el consumo hasta 150µA. Tiene un control de brillo analógico y digital, un registro de límite de escaneo que permite al usuario mostrar de 1 a 8 dígitos, y un modo de prueba que fuerza el encendido de todos los LED.
La información se recibe en 2 Bytes, bits D0 – D15. El primer bit que se envía es el D15, el más significativo (MSB).
D0 – D7 contienen los datos
D8 – D11 contienen la dirección de registro
D12-D15 son bits sin contenido.
Esquema de montaje
El montaje de este reloj es muy sencillo, no hace falta montar ni un sólo componente electrónico, sólo los cables de conexión entre matrices y los 5 hilos entre el módulo ESP32 y la primera matriz LED.
Configuración inicial del reloj
Este reloj necesita una conexión a Internet por WiFi para funcionar. Al arrancar se conecta a un servidor NTP para sincronizar el reloj (RTC) del módulo ESP32. A continuación ya puede funcionar de forma autónoma, y se puede configurar y controlar desde un dispositivo móvil (WiFi) y también desde un PC que tenga conexión a la misma red local a la que se haya conectado el reloj por WiFi.
La primera vez que se pone en marcha el reloj, es necesario acceder por WiFi al punto de acceso que crea el propio reloj cuando no dispone de acceso a Internet, y configurar su conexión WiFi.
SSID: ESP_32
IP: 192.168.4.1
En la imagen siguiente se muestra el diagrama de funcionamiento cada vez que se reinicia el reloj.
Modos de funcionamiento y ajustes del reloj
El reloj puede mostrar la fecha y hora siguiendo el estándar europeo o americano (24H/12H). También se puede personalizar el formato de la hora en dos tamaños, las animaciones de los números cuando cambian y el ajuste de brillo del display LED. Todos estos ajustes se realizan a través de una conexión a la red local que se haya conectado el reloj, ya sea por WiFi o cable. No es necesario instalar ningún software, porque el reloj incluye su propio navegador web (web browser). Conectando cualquier dispositivo a la dirección IP que muestra el reloj cuando se conecta a la red Wifi, se puede acceder al menú de control de este reloj.
El fichero .stl que necesitas para fabricar la caja de este reloj, lo puedes descargar desde el siguiente enlace: Precision clock, configured by WiFi
¿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.