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

Reloj-Texto con dos alarmas y 2 husos horarios

Reloj-Texto con 2 alarmas y 2 husos horarios. Digitalización de audio analógico, para almacenarlo en la memoria de un ESP32. Estos archivos de audio contienen señales acústicas y mensajes de voz, para utilizarlas en el nuevo firmware del display Reloj-Texto controlado por el ESP32. Con esta actualización, el display Reloj-Texto dispondrá de dos alarmas horarias, pudiendo configurarlas con alguno de las dos husos horarios que gestiona el nuevo firmware. El 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, pudiendo mostrar la hora local, a elegir entre dos husos horarios diferentes.

Reloj y Texto en display LED, con ESP32

Audio sintetizado

El sonido de la alarmas no lo haré activando un buzzer piezoeléctrico, será un sonido PCM de 8 bit, el cuál grabaremos en la memoria del ESP32. Esa información de audio digital, se convertirá en audio analógico aprovechando uno de los dos conversores D/A (DAC) que incluye este microprocesador. En este caso, como el pin GPIO25 ya se está utilizando en este reloj, la salida de audio será a través del pin GPIO26

Muestreo y Retención

Es la extracción de algunos valores instantáneos de duración teóricamente nula. Según la teoría de Shannon,  para muestrear una señal y poderla reconstruir, es necesario que el muestreo se realice un número de veces al menos igual al doble de la frecuencia máxima a muestrear. Para muestrear una frecuencia vocal de 4 kHz, necesitaríamos muestrear  como mínimo a:  4×2=8 kHz.

Esto lo podríamos representar con un interruptor que se abriera y cerrara 8.000 veces por segundo. A la salida de éste, obtendríamos una secuencia de impulsos cuya amplitud sería el valor instantáneo que tenía la señal de audio original.

Cuantización

Es la conversión que efectuamos para trasladar los valores instantáneos de tensión de la señal muestreada, a una escala compuesta por una serie de niveles. Cuanto mayor sea el número de niveles, mayor será la relación S/R. Como es de esperar, estos niveles los analizaremos con un sistema binario, para posteriormente poderlos transmitir de una forma digital. Con los sistemas PCM de 8 Bit, se obtienen 256 niveles de cuantización (±127 con respecto a cero).

Codificación

Es el proceso de lectura, de forma digital, de la secuencia de valores cuantizados. Esto quiere decir que a cada nivel de cuantización le corresponde un valor binario determinado, y dependiendo del número de niveles, necesitaríamos un número de bit por cada muestra. Esta es la primera limitación que encontramos para cuantizar la señal con un máximo de niveles, pues necesitamos transmitir todos los valores instantáneos de una muestra, en un tiempo máximo dado por la inversa de la frecuencia de muestreo ( t = 1/f ).

Esquema de montaje

Para que este display Reloj-Texto funcione, sólo hay conectar 5 hilos entre un lateral del display LED y el módulo ESP32. El sonido de la alarma sale por el pin GPIO26 del módulo ESP32, y hay que conectarlo a un amplificador de audio con su altavoz.

IMPORTANTE: la salida de audio DAC del ESP32 está referenciada a 1.5V.  Así es necesario bloquear la corriente continua continua a la entrada del amplificador de audio, intercalando en serie un condensador cerámico de aproximadamente 100nF. Como el nivel de audio a la salida DAC puede llegar a medir 3Vpp, es conveniente intercalar un atenuador a la entrada del amplificador, intercalando un divisor de tensión resistivo, o un potenciómetro si se quiere disponer un ajuste del nivel de audio.

Firmware

El archivo que necesitas para programar el ESP32, lo puedes descargar de forma gratuita desde el repositorio GitHub: Clock-Text_ESP32

Caja 3D (Reloj-Texto)

El fichero .stl que necesitas para fabricar la caja de este display LED, lo puedes descargar desde el siguiente enlace: Clock-Text with 2 alarms and 2 time zones (revision)

¿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.

PCB de prototipo gratis y con plazo de entrega rápido: https://www.pcbway.es/

Logo: PCBWay

 

Reloj y Texto en display LED, con ESP32

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:

Reloj de precisión, configurado por WiFi

Matrices LED de 8×8 pixel

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.

Matriz LED 8x8 pixel

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.

PCB con 4 matrices LED de 8x8

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.

Montaje del display: Reloj-Texto

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.

Doble interface WEB

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

Caja 3D (Reloj-Texto)

Caja 3D, para el PCB de 4 matrices LED de 8x8

El fichero .stl que necesitas para fabricar la caja de este display LED, lo puedes descargar desde el siguiente enlace: Clock and Text on LED display, 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.

PCB de prototipo gratis y con plazo de entrega rápido: https://www.pcbway.es/

Logo: PCBWay

 

Reloj de precisión, configurado por WiFi

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:

Transmisor DCF77 con ESP32

Matriz LED de 8×8 pixel

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.

Matriz LED 8x8 pixel

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.

Circuito integrado MAX7219

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.

Esquema de montaje del reloj

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

Punto de acceso WiFiEn la imagen siguiente se muestra el diagrama de funcionamiento cada vez que se reinicia el reloj.

Diagrama de funcionamiento del reloj en el arranque

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.

Configuración del reloj por WiFi

Firmware:

El archivo que necesitas para programar el ESP32, lo puedes descargar de forma gratuita desde el repositorio GitHub:
https://github.com/J-RPM/Precision-clock_ESP32

Y también desde Dropbox: ESP32_NTP_Time_Matrix_JR.rar

Caja 3D (Reloj de precisión)

Caja 3D

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.

Logo: PCBWay

https://www.pcbway.es/

 

 

¡Maldito foco LED! – Damn LED spotlight!

Avería de un foco LED de 12V, después de 72 horas de funcionamiento continuo. La reparación anterior se hizo sustituyendo la matriz LED original del foco,  por 4 diodos LED SMD de 1W en serie. Debido a un mal contacto térmico de los diodos con el bloque disipador del foco, uno de los diodos se quemó. Se vuelve a reparar el foco, mejorando mecánicamente el contacto térmico de los diodos con el disipador, y reduciendo ligeramente su corriente de trabajo.

A pesar de que este tipo de reparaciones no compensa, decido acabar con la reparación que comencé, ya que no dio buen resultado. Como era de esperar, uno de los 4 diodos LED se ha quemado, provocando el apagado del foco. Teniendo en cuenta que la corriente de trabajo de este foco es de 256 mA, corriente dentro de los límites del LED utilizado, el problema puede estar relacionado con la mala disipación térmica.

Reparación

La reparación consiste en sustituir el diodo LED quemado por uno nuevo, y unir de nuevo la serie de 4 diodos con masilla de dos componentes. Con el fin de mejorar el contacto térmico con la carcasa del foco, ya que esta hace de disipador, en esta ocasión el conjunto de los 4 diodos lo monto sin utilizar la placa soporte del diodo original. Una vez seca la masilla, es conveniente aplanar todo el conjunto con una lija de grano fino (imagen siguiente).

Aplanado LED

Reducir la corriente del LED

A pesar de que la corriente de trabajo del foco (256 mA) está dentro del margen de funcionamiento de los diodos LED utilizados (250 – 300mA), decido reducir ligeramente su valor. El circuito de control ajusta la corriente de trabajo con 2 resistencias en paralelo, una de 1 ohmio y la otra de 6,2. Al eliminar la resistencia de 6,2 ohmios, la corriente del circuito se reducirá de 256 mA hasta 220 mA.

Ajuste de corriente del foco LED

A pesar de que esta corriente no varía mucho con respecto a la original (-13%), la temperatura de funcionamiento del LED se reducirá bastante… pero también caerá de forma exponencial el rendimiento lumínico del diodo LED.

Rendimiento lumínico

Después de reparar el foco y modificar su  corriente de funcionamiento, realizo una prueba comparativa del rendimiento lumínico. Esta medida de luminosidad no sirve para conocer el valor real en lúmenes del foco LED, pero nos permite conocer la relación que existe entre el valor de la reducción de corriente y su pérdida de luminosidad.

Rendimiento lumínico

Como podemos apreciar en la imagen anterior, al reducir la corriente del LED en un 13%, el rendimiento lumínico se ha reducido en un 50%.