Reloj Pac-Man con ESP32 & UTF-8

Actualización del firmware (v1.44) para el Reloj-Texto construido con 4 matrices LED, y controlado con el microprocesador ESP32. Con esta actualización, el display podrá mostrar los caracteres latinos de uso más frecuente: áéíóúü ÁÉÍÓÚÜ cÇ ñÑ. También se incluyen los avisos con voz sintetizada, y efectos gráficos Pac-Man.

Reloj-Texto con dos alarmas y 2 husos horarios

UNICODE & UTF-8

La conexión entre diferentes redes de ordenadores provocó la necesidad de crear un estándar que contemplara el juego de caracteres gráficos de cualquier lengua, incluyendo ideogramas, caracteres árabes, chinos, etc.

Caracteres UNICODE

El año 1991 se anunció públicamente la creación de Internet, y ese mismo año el Consorcio Unicode y la ISO desarrollaron ambos un estándar para codificar los caracteres:  Unicode – ISO / IEC 10646. Ambos estándares se pueden considerar equivalentes, si tenemos en cuenta que el repertorio, los nombres de caracteres y los puntos de código del estándar ‘Unicode Versión 2.0’, coinciden exactamente con los de ISO / IEC 10646-1: que fue publicado en 1993.

Actualmente, la codificación dominante es UTF-8, que es una codificación de ancho variable diseñada para la compatibilidad con versiones anteriores de ASCII, y para evitar las complicaciones con las marcas de orden de bytes que existen con UTF-16 y UTF-32 . Además, el 93% de todas las páginas web están codificadas en UTF-8 y el Grupo de trabajo de ingeniería de Internet (IETF) requiere que todos los protocolos de Internet identifiquen las codificación UTF-8. También el Consorcio de correo de Internet (IMC), recomienda que todos los programas de correo electrónico puedan mostrar y crear correo utilizando UTF-8.

Codificación UTF-8

Los primeros 127 caracteres de cualquier tabla de caracteres de procedencia anglosajona o latina, son comunes y su origen es la tabla de caracteres ASCII. Este conjunto de caracteres se pueden codificar dentro de una matriz binaria de 7 bit., y son los caracteres que por defecto muestra cualquier display.

Caracteres ASCII de 7 bits

Si queremos mostrar los caracteres específicos de cualquier lengua, por ejemplo las letras acentuadas, tendremos que ampliar de tamaño la matriz del display que almacena los caracteres en memoria, y asociar una posición específica a cada uno de los caracteres dentro de esa matriz.  De esta forma, la tabla de caracteres que almacena el display no se corresponderá con el código del carácter que recibamos a través del interface Web. Así el procesador del display tendrá que comprobar el código del carácter que recibe, y si es superior al 127,  reposicionar el código para apuntar al gráfico que tenemos asociado a ese código entrante, dentro de la matriz gráfica del display. El tamaño de la matriz gráfica del display suele ser de 8 bit, y con esto es posible almacenar 127 caracteres extra, que podrían ser letras acentuadas, logotipos o cualquier dibujo.

Integración UTF-8 en el display

Si pretendemos que los caracteres de este reloj se puedan programar a través de un interface Web, es necesario utilizar una codificación de caracteres estándar, y la más versátil es la codificación UTF-8 de 2 Bytes.

Este reloj utiliza 3 tipos de fuentes gráficas, dos de ellas limitadas a los 10 números, utilizadas para mostrar los dígitos de la hora en formato estrecho y ancho, y la otra es la que almacena los caracteres ASCII, desde el espacio cuyo código es 32 en decimal, hasta el 126 que es la tilde de la letra eñe, más conocida como virgulilla ~. A continuación, y a partir del código 127, es donde se almacenan los caracteres extra.

Hay muchas formas de almacenar las fuentes gráficas en un display, pero la forma más eficiente es asociar un Byte a los 8 pixeles que tiene cada columna de la matriz LED. Así es más rápida la gestión que tiene que hacer el procesador para desplazar los textos por el display.

La fuente de textos y gráficos de este display es de ancho variable, entre 2 y 5 pixel de ancho por 8 pixel de altura. Así se limita el ancho a las letras que no lo necesiten, por ejemplo el espacio, y se pueden mostrar más caracteres en el display.  Para localizar los caracteres en la matriz, todos ellos ocupan 6 Bytes. El primer Byte indica el ancho del carácter, que se corresponde al número de Bytes que tiene que leer el procesador para formar la letra en el display.

Para facilitar la interpretación visual de los gráficos, los 5 Bytes de cada carácter se suelen escribir en formato binario, pero también se podría escribir en formato hexadecimal o decimal si se quisiera reducir el tamaño del archivo en el editor.

En el gráfico siguiente. vemos el esquema de codificación de caracteres UNICODE, junto con UTF-16 y UTF-8.

Cuando se asigna un código a un carácter, se dice que dicho carácter está codificado. El espacio para códigos tiene 1.114.112 posiciones posibles (0x10FFFF). En el grafico anterior vemos el espacio de códigos dividido en tramos, con el fin de mostrar los diferentes esquemas de codificación UTF. Los puntos de código se representan utilizando notación hexadecimal agregando el prefijo U+.

Actualmente los sistemas operativos limitan la tabla UNICODE a los primeros 65.536 caracteres (0xFFFF), y el valor hexadecimal se muestra añadiendo ceros a la izquierda si es necesario, hasta completar los 4 dígitos hexadecimales.

Es conveniente aclarar, que los sistemas operativos disponen de diferentes tablas de caracteres, algunas de ellas son privadas, y no se deberían utilizar en un documento público con acceso a Internet, ya que no son un estándar.

Internamente en un PC se podría crear un documento utilizando cualquier fuente de caracteres, con el fin de mostrar algún gráfico en especial. El problema es si ese mismo documento se abriese utilizando una fuente de caracteres diferente; porque algunos caracteres ya no serían los mismos.

Si queremos codificar caracteres en UTF-8, limitando su longitud máxima a dos Bytes por carácter, sólo podremos codificar los primeros 2.048 caracteres UNICODE, y recibiremos caracteres de 11 bits. Así cuando recibamos un Byte en UTF-8 que comience con 110, sabremos que se trata de un carácter doble, y los 5 bits siguientes de ese Byte serán los 5 bits más significativos del carácter UNICODE que estamos recibiendo, sin olvidar que este carácter  tiene una longitud de 11 bits. A continuación recibiremos el segundo Byte, el cuál empezará con los bits 10, y a continuación recibiremos los 6 bits menos significativos del carácter UNICODE.

Decodificación UTF-8

  1. Cuando el bit más significativo de un Byte en UNICODE comience con un 0, la longitud del código UTF-8 no cambia, manteniendo el mismo valor UNICODE, y respetando así su compatibilidad con la tabla ASCII.
  2. Si se recibe un Byte en UTF-8 que empieza con los bits 110, su longitud será de 2 Bytes, y el segundo Byte empezará siempre por 10.
  3. Si se recibe un Byte en UTF-8 que empieza con los bits 1110, su longitud será de 3 Bytes, y los dos Bytes siguientes al primero empezarán con 10.
  4. Si se recibe un Byte en UTF-8 que empieza con los bits 11110, su longitud será de 4 Bytes y los 3 Bytes siguientes al primero empezarán con 10.

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 y el audio sintetizado sale por el pin GPIO26 del módulo ESP32, y hay que conectarlo a un amplificador de audio con su altavoz.

Firmware (v1.44)

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

Interface Web y ajustes

Este reloj se controla a través de cualquier dispositivo móvil, siempre que esté conectado a la misma red WiFi. El reloj dispone de 2 interfaces Web diferentes, pudiendo elegir su modo de funcionamiento. El reloj funciona de forma muy parecida en ambos modos, presentando la hora de acuerdo al formato que se haya configurado, y cada 30 segundos mostrando un rotación de texto.

  • Cuando el display está configurado en modo RELOJ: el texto será el día de la semana y la fecha; pero sólo en caso de que estuviese habilitada su presentación, porque en caso contrario el reloj siempre mostrará la hora.

Interface RELOJ: se puede modificar el huso horario al cuál se debe sincronizar el reloj, realizar los ajustes de formato y presentación de la hora, y modificar el brillo del display.

  • Cuando el display está funcionando  en modo MENSAJE: cada 30 segundos intercalará una rotación del texto que tenga programado.

Interface MENSAJE: se puede ajustar la velocidad de desplazamiento del texto, modificar el contenido del mensaje, y fijar la hora y repeticiones de sus dos alarmas.

Ambos interfaces disponen de un botón para cambiar su modo de funcionamiento, teniendo en cuenta que el reloj primero se reiniciará, sincronizando de nuevo la fecha y hora con el servidor NTP que le corresponda al uso horario ajustado. Al reiniciar el reloj, el punto de acceso WiFi al que se conecta,  podría asignar una dirección IP diferente a la anterior. También se han incorporado dos botones nuevos, uno para mostrar la hora con voz, muy interesante para personas invidentes, y el otro para forzar el borrado del display en cualquier momento, mediante la aparición de Pac-Man.

Con esta nueva versión (v1.44), es posible escribir textos utilizando letras acentuadas y la letra Ñ, tanto en mayúsculas como en minúsculas. Además, si el reloj está configurado con el huso horario de España y el formato de presentación de la hora es el Europeo, los textos del día de la semana y fecha, aparecerán traducidos al Español.

¿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-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 de precisión, 8 x 7 segmentos LED

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.

Reloj de precisión, configurado por WiFi

El primer reloj tenía un display adicional de tipo OLED, y en el segundo sólo instalé las 4 matrices LED con el fin de reducir el tamaño de la caja.

Reloj y Texto en display LED, con ESP32

Ahora voy a montar otro reloj todavía más pequeño y barato, utilizando 8 dígitos LED de 7 segmentos.

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.

Esquema de montaje del reloj de 7 segmentos

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.

Configuración del reloj por WiFi

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:

Precision_Clock_ESP32_7Segment

Y también desde Dropbox:

ESP32_Time_8BCD_JR.rar

Caja 3D (Reloj de 7 segmentos)

 

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

El fichero .stl que necesitas para fabricar la caja de este reloj LED de 7 segmentos, lo puedes descargar desde el siguiente enlace: Precision clock on 7 segment 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 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

Y también desde Dropbox: ESP32_Time_Text_Matrix_JR.rar

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

 

Transmisor DCF77 con ESP32

Construcción de un pequeño transmisor de 77,5 KHz, para poder poner en hora los relojes DCF77 que no reciban correctamente la señal del transmisor de Alemania. Este transmisor es portátil, funciona con una batería de 3,7V y es muy preciso, ya que toma la información de la fecha y hora sincronizando previamente su reloj a través de un servidor NTP. Este transmisor está construído a partir del módulo ESP32, acoplando un pequeño display OLED de 64×48 pixel y 0,66 pulgadas.

ESP32 + OLED

Sistemas de sincronización horaria

Actualmente existen muchos métodos para mantener la hora exacta en cualquier dispositivo electrónico, ya sea través de un receptor GPS, o la recepción de la señales horarias en onda larga que se emiten desde diferentes países: 77,5 kHz desde Frankfurt en Alemania, 40 y 60 kHz desde Japón, 60 KHz desde Colorado en EE.UU, 66,66 kHz desde Taldom en Rusia, 68,5 kHz desde Lington en China, 60 kHz desde Anthorn en Reino Unido, o 162 kHz desde Allouis en Francia.

Cobertura DCF77

La mayoría de los relojes sincronizados por radio que se venden en Europa, utilizan la recepción de las señales horarias que envía el transmisor DCF77 desde Frankfurt, en Alemania.  Como sucede con cualquier transmisión por radio en Onda Larga, su cobertura varía en función de la distancia, climatología y el umbral de ruido electromagnético existente en el punto de recepción.

Con el fin de poder utilizar algunos relojes DCF77 que no disponen de ajuste de hora manual, hace algo más de un año publiqué una información para construir un pequeño transmisor que simulara la emisión DCF77. Este transmisor constaba de dos partes: una hardware construida con Arduino, junto con un software que funcionaba bajo Windows, encargado de suministrar los códigos de tiempo al transmisor.

Transmisor experimental DCF77

Tiempo UNIX

Tiempo Unix  se define como la cantidad de segundos transcurridos desde la medianoche UTC del 1 de enero de 1970, sin contar segundos intercalares. El tiempo que representa es UTC, pero no tiene forma de representar segundos bisiestos de UTC (por ejemplo, 1998-12-31 23:59:60).

Cualquier dispositivo que disponga de una conexión a Internet, podría sincronizar su fecha y hora con gran precisión en cuestión de segundos. Sólo es necesario  conectarse a un servidor NTP para recibir el código de tiempo, y luego introducir los comandos en una librería para que nos entregue la fecha y hora local en la zona que queramos .

D1 mini ESP32

Para hacer este nuevo transmisor DCF77, he utilizado una placa ESP32 y un pequeño display OLED de 64×48 pixel, 0,66 pulgadas. El módulo ESP32 dispone de todo lo se necesita para hacer un transmisor DCF77  completo.

Bloques ESP32
ESP32
  • Procesador de 32 bit, que permite generar la frecuencia de 77,5 kHz con mucha más precisión que Arduino.
  • Reloj en tiempo real (RTC) para gestionar el envío de los códigos de tiempo DCF77
  • Interface WiFi, para conectar a un servidor NTP y sincronizar la fecha y hora con gran precisión.

LIVE D1 mini ESP32

El módulo ESP32 es capaz de sincronizar cualquier reloj DCF77 por si solo, incluso se podría prescindir del display. Sólo sería necesario conectar un trozo de cable en el pin IO25 (antena) y acercarlo al reloj, aunque su alcance sería muy limitado.

MiniKit ES32

HW-699 0.66″ OLED display (64×48)

Con este display, además de mostrar la fecha y hora, es posible saber qué está haciendo el transmisor DCF77 en cada momento. El display  HW-699 se comunica con el módulo ESP32 mediante su interface I2C, y es posible configurarlo con dos direcciones diferentes (0x3C / 0x3D). Por defecto utiliza la dirección 0x3C, y así es como lo he utilizado para hacer este montaje.

Display OLED 0,66"

Módulo ESP32, dentro del transmisor DCF77

Aprovechando que ya tenía un transmisor DCF77 con Arduino, he montado dentro de su caja el módulo ESP32, junto con el display OLED. De esta manera aprovecho además de la caja su fuente de alimentación (batería 3,7V + StepUp 5V + módulo de carga), los indicaciones LED y el amplificador de potencia junto con su bobina de antena.

Esquema: Transmisor DCF77

Firmware:

Repositorio GitHub:
https://github.com/J-RPM/DCF77-Transmitter

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

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

Soporte 3D (ESP32+Display)

Soporte OLED

El fichero .stl que necesitas para fabricar esta soporte, lo puedes descargar desde el siguiente enlace: DCF77 transmitter with ESP32

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

Control-Medidor de Ozono en el aire, con Arduino

Construcción de un medidor de ozono en el aire con Arduino. Al mismo tiempo, este medidor se encargará de controlar el encendido y apagado del equipo generador de ozono, manteniendo así un nivel de concentración prefijado, dentro de un compartimento destinado a la desinfección de objetos. El sensor de gas ozono tipo MQ-131, de baja concentración, permite medir concentraciones de ozono en el aire comprendidas entre 0,01 y 1 ppm.

Medidor de la concentración de ozono en el aire

 

Concentración de Ozono en el aire

El ozono es muy bueno para desinfectar locales, ropa de trabajo, mascarillas y también alimentos. Debido a la situación actual, se están vendiendo generadores de ozono de todo tipo, y muchos de ellos orientados al uso doméstico.  El ozono, al igual que cualquier producto desinfectante, hay que utilizarlo con precaución. Es importante destacar que el ozono es un gas tóxico para los pulmones. Los generadores de ozono hay que utilizarlos en sitios cerrados y sin gente dentro.

Concentración máxima de ozono en el aire durante 8 horas

El problema que tiene el ozono frente a otros productos desinfectantes, es que es muy difícil de dosificar. El ozono es un gas muy inestable y no se puede envasar, debido a que las moléculas del ozono se recombinan muy rápidamente, convirtiéndose de nuevo en oxígeno. Cuando se utiliza el ozono como desinfectante, lo más importante es calcular el tiempo que debería estar funcionando el equipo generador. Ese tiempo dependerá del valor de concentración de ozono que necesitemos alcanzar (ppm), y varía en función de los metros cúbicos desinfectar (volumen) y de la potencia del generador.

Desinfectantes

Teniendo en cuenta que la producción de ozono de un generador varía en función de la calidad del aire (temperatura, humedad…) y además depende del rendimiento de su elemento reactor, el cual se envejece y no es muy lineal; la única manera de calcular ese tiempo sería mediante un equipo de medida, que a su vez controlara el encendido y apagado del equipo generador de ozono. Este interruptor funcionaría como el termostato de una calefacción, conectando y desconectando el generador en función de la concentración de ozono en el aire que se quisiera alcanzar.

Sensores de gas MQ

MQ  es una familia de sensores de gas, orientados a medir diferentes compuestos químicos dependiendo del modelo de sensor que se utilice. Los sensores MQ están compuestos por un elemento semiconductor (óxidos metálicos) sensible a cada tipo de gas, el cuál varía su resistencia en función de la concentración de gas en el aire.

Sensores de gas de la serie MQ

Estabilidad y Precisión de los sensores MQ

Para obtener una mayor estabilidad, los sensores MQ incorporan una resistencia calefactora, lo cual supone un consumo extra y una falta de precisión en las medidas que se realicen al poco tiempo de alimentar el sensor. Otro punto importante a considerar, es que cada modelo de sensor MQ tienen alta sensibilidad a un gas específico, pero en menor medida también reaccionan o otros gases, y esto provoca una mayor imprecisión. Por ejemplo, el sensor de ozono MQ-131 tiene una alta sensibilidad al ozono, pero también es sensible a otros gases oxidantes como el cloro y el dióxido de nitrógeno.

Módulo sensor de gas ozono MQ-131

Para obtener una precisión mínima, es necesario calibrar cada sensor, y almacenar su valor de resistencia sin presencia de gas, dentro del firmware encargado de calcular las medidas. La precisión de estos sensores depende muchos factores internos y externos difíciles de controlar (temperatura de trabajo, humedad, envejecimiento del sensor), y nunca deberían utilizarse como elemento de control en lugares críticos.

Detalles del módulo sensor de gas ozono MQ-131

Con la ayuda de un controlador programado, por ejemplo con Arduino, los sensores MQ los podemos utilizar para medir la concentración de un gas determinado, dependiendo del modelo de sensor que elijamos.  Los sensores de gas MQ pueden comprarse sueltos, pero es muy común conseguirlos ya montados en un pequeño PCB, en el cuál se incluye un circuito comparador que nos proporciona una salida digital extra, además de la propia salida analógica del sensor. A través de la resistencia variable (trimmer) que incluyen estos circuitos , podríamos prefijar un umbral máximo de gas, y disparar una alarma.

Esquema genérico, para utilizar con los sensores de tipo MQ

Medidor-Controlador de Ozono

En el caso del sensor MQ-131, muy sensible al gas Ozono, mediante esta salida digital podríamos controlar el encendido y apagado de un generador de ozono. Esto sería muy útil para mantener un nivel alto de ozono dentro de un compartimento cerrado (cabina, caja, etc.) con el fin de desinfectar objetos personales, utensilios de trabajo, ropa, etc.

Esquema del Medidor-Controlador de ozono.

Descargar el firmware

El firmware que necesitas para programar el ATMEGA328P (Arduino UNO),  los puedes descargar desde el siguiente enlace:  MQ-131_JR.rar

Cubierta del sensor, impresa en 3D

La cubierta de protección del sensor gas la he fabricado con PLA. El PCB del sensor se fija a esta cubierta sin tornillos,  calentando con un soldador los 4 resaltes de PLA que sobresalen por los orificios del PCB, una vez encajado en la cubierta.

Carcasa 3D, para el sensor de gas MQ

Los archivos que necesitas para imprimir esta cubierta de protección, los puedes descargar desde el siguiente enlace: Cover for MQ gas sensor

¿Necesitas fabricar un 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. Hasta un 30% de descuento para PCBs especiales, con fabricación en 24 horas.

Logo: PCBWay
Ahora el servicio de montaje en PCBWay por tan solo 30$, con tiempo de entrega rápido: https://www.pcbway.es/

 

 

 

 

Avisador para Smartphone

Construcción de un sencillo avisador acústico/luminoso, para amplificar las llamadas y avisos de un teléfono móvil. Este circuito entrega en una clavija la tensión de red cada vez que suena el teléfono, y podría suministrar hasta un máximo de 10 amperios.

El escuchar las llamadas de un teléfono móvil,  es un problema muy común en las personas de avanzada edad. La presbiacusia, o pérdida de audición, ocurre en la mayoría de las personas al envejecer, aunque también sucede con personas más jóvenes, cuando están expuestas a sonidos demasiado fuertes durante mucho tiempo.

Deficiencia auditivaPara teléfonos fijos existen muchos avisadores de tipo comercial… timbres de potencia, avisadores luminosos para sordos, etc. Estos dispositivos normalmente van conectados a la roseta del propio teléfono, aunque antiguamente existían algunos dispositivos que utilizaban una bobina captadora con una ventosa, que se pegaba en las proximidades del timbre del teléfono. Es complicado hacer algo parecido y fiable para un teléfono móvil, porque hay mucha variedad de dispositivos, y además la tecnología va cambiando. Mi idea es buscar algo que sirva para cualquier teléfono móvil de última generación, y sin tener que conectar nada al teléfono.

Posibles opciones

Una forma sencilla de hacerlo, sería activando el vibrador del teléfono con las llamadas; y detectar esa vibración para activar un timbre o una luz auxiliar. Hice bastantes pruebas con diferentes sensores, y al final lo descarté por ser poco fiable. El sistema de vibración de algunos dispositivos es muy leve, y al aumentar la sensibilidad del circuito se producen falsos avisos debido a las vibraciones del propio entorno.

Sensores de vibración

Buscando un poco en el Play Store, encontré muchas aplicaciones que permiten encender la luz/linterna trasera del teléfono cuando reciben llamadas o mensajes en redes sociales… y además todo esto es configurable!

Alert Flash en PlayStore
Pensando en uno de los últimos montajes que realicé, y con el fin de aprovechar los circuitos impresos que ya tenía, decidí construir una base de carga para el teléfono móvil, en la que se incluye la detección del encendido de la luz/linterna del móvil.

Interruptor inteligente

Funcionamiento del avisador

Cada vez que se encienda la luz del móvil, el circuito suministrará una tensión de red con un consumo máximo de 10A. Así en esta salida se podría conectar un timbre de potencia, una luz, o cualquier cosa que se nos ocurra.

Esquema: Avisador para Smartphone

Además, este circuito dispone un LED indicador de estado, que nos permitirá saber si ha habido alguna llamada o notificación desde que dejamos el teléfono móvil apoyado en la base.

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

Caja impresa en 3D

La caja la he fabricado en PLA, a medida del teléfono Xiaomi Mi A1.

Caja 3D: Avisador para Smartphone

Los archivos que necesitas para imprimir esta caja,los puedes descargar desde el siguiente enlace:

Call signaling for Smartphone

¿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. Hasta un 30% de descuento para PCBs especiales, con fabricación en 24 horas.

Logo: PCBWay

https://www.pcbway.es/

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

 

Transmisor experimental DCF77

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

En hora con DCF77

Diseño de un transmisor DCF77

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

Modulación en amplitud y fase del transmisor DCF77

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

Modulación ASK

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

Cobertura DCF77

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

Transmisor DCF77

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

Esquema: Transmisor DCF77

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

Interface: USB-RS232
Interface: USB-RS232

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

 

(Actualizado: Septiembre 2020)

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

Software de control DCF77

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

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

New version in english: Install_DCF77_eng.rar

Caja para el transmisor

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

Caja 3D: Transmisor DCF77

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

DCF77 experimental transmitter

¿Dónde fabricar el PCB?

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

Logo: PCBWay

https://www.pcbway.es/

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

PCB: TX_DCF77

Acceso a los GERBER de este PCB

PCB from PCBWay

Link of my shared project

 

Interruptor inteligente

Diseño y construcción de un interruptor inteligente, capaz de cortar la alimentación de todos los dispositivos conectados en una regleta de enchufes. El circuito detecta el consumo en una toma de red (Master), y desconecta todo (incluido el propio controlador) cuando se apaga el dispositivo conectado a la toma ‘Master’. Así en reposo (Standby), el consumo total de todo el conjunto será nulo.

Regletas de RED inteligentes

Buscando un poco por Internet, podemos encontrar regletas de alimentación inteligentes. La mayoría de ellas nos permiten conectar y desconectar la alimentación de todos los enchufes desde un dispositivo móvil, programar la hora de encendido y apagado, incluso medir el consumo y  calcular su coste.

Regletas inteligentes en Internet

El uso de regletas inteligentes podría suponer un gran ahorro energético, pero hay que tener en cuenta que estas regletas de por sí ya incorporan un consumo extra… y su circuito de control consume energía las 24 horas del día.

Interruptor inteligente

La idea de este montaje, es la de conseguir el apagado automático de una serie de dispositivos, al detectar el apagado del equipo principal (Master). Por ejemplo, si conectamos a la toma principal  de este circuito la CPU de nuestro PC,  y el resto de dispositivos (monitor, impresora, escáner, etc)  a la toma auxiliar; al desconectar la CPU se desconectaría la alimentación de todo el conjunto… incluso la del propio circuito de control. De esta manera no quedaría ningún equipo consumiendo en modo ‘Standby’, y el consumo total sería nulo.

Interruptor inteligente montado

A continuación se muestra el esquema del circuito de control, encargado de cortar la alimentación en todas las tomas de red, cuando detecte un caída de consumo en la toma ‘Master’.

Esquema: Interruptor inteligente

Las tensiones que obtendremos como muestra en la entrada del ATtiny cambiarán dependiendo de la inductancia y características del transformador que utilicemos (filtro EMI), además del tipo de carga que conectemos en la toma ‘Master’ (carga reactiva o lineal).

Principio de funcionamiento

El circuito está basado en la transferencia de tensión que aporta una de los dos  bobinas de un filtro EMI, al paso de la corriente de RED por el otro devanado.  Este montaje funciona como un transformador de corriente, entregando una tensión en el devanado secundario, proporcional a la corriente que circule por el primario. En este caso, la transferencia de tensión no es lineal con la potencia, pues dependerá del tipo de carga que conectemos en la toma ‘Master’. Si la carga se comporta como una resistencia pura,  la transferencia de tensión será menor que si tuviera una componente reactiva.

Medidas de tensión con diferentes cargas

El circuito detector de umbral está construido con Arduino, utilizando un ATtiny 85. Este pequeño micro controlador tiene sólo 8 pines y puede funcionar con un oscilador interno, lo que permite hacer uso de casi todos sus terminales.

Calibración y ajuste de los umbrales

En este montaje se han dedicado dos pines del ATtiny para poder configurar hasta 4 umbrales distintos de funcionamiento. Así podemos elegir el umbral de detección más adecuado al equipo que vayamos a conectar en la toma ‘Master’. Como es lógico suponer, los 4 umbrales los podremos calibrar y modificar con Arduino, antes de programar el ATtiny.

Ajuste y calibrado de los umbrales

Para facilitar el ajuste de los umbrales y la calibración de la escala, podemos cargar el código ‘Regleta_TEST.ino’ que se adjunta en la descarga, y utilizar la placa de desarrollo Arduino UNO. Para realizar este ajuste, colocamos un potenciómetro de 10K entre el positivo y negativo de la fuente de 5V, y conectamos el cursor del potenciómetro con la entrada A2 de Arduino UNO. El proceso a seguir para la calibración de la escala y fijación de los umbrales. se explica en el video final.

Los archivos que necesitas para programar el Arduino UNO y el ATtiny, lo puedes descargar de forma gratuita desde el siguiente enlace:

Interruptor_I.rar

¿Dónde fabricar el PCB?

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

Logo: PCBWay

https://www.pcbway.es/

PCB: Interruptor inteligente

 

Acceso a los GERBER de este PCB

PCB from PCBWay

Link of my shared project

Descarga del ficheros 3D:

Intelligent switch

Diseño 3D

 

 

 

 

 

 

 

Barra LED de señalización para bicicletas, con ATtiny

Construcción de una barra LED, para la señalización trasera en bicicletas, patinetes, etc. El circuito es muy simple y tiene muy pocos componentes electrónicos. Esta barra LED está construida con 5 LED de alta luminosidad, y está controlada con el pequeño procesador ATtiny (ATtiny 25/45/85 de 8 pines). La barra LED está alimentada con una batería de 3,7v (Li-Ion), pero también podría alimentarse con 2/3 pilas en serie de 1,5V.

Iluminación trasera en bicicletas

Luz trasera para bicicletasPor seguridad, cuando se circula con una bicicleta en zonas de baja luminosidad, es muy importante disponer de una buena iluminación trasera.  Por otra parte, es imprescindible señalizar cualquier cambio de dirección cuando se circula con tráfico. Como el ancho de una bicicleta es muy reducido, sólo se necesita un punto de luz, y es muy fácil integrar las luces de cambio de dirección construyendo una barra LED.

Luz intermitente secuencial

 

Al montar las luces de cambio de dirección junto con la iluminación trasera, es aconsejable que la identificación del sentido de giro sea clara, sin crear confusión por estar integradas en una sola barra. La mejor manera de hacerlo es creando una animación con las luces, igual que lo hacen algunos modelos de coche de alta gama.

Barra LED para señalización de bicicletas

El circuito de control está basado en el pequeño micro controlador ATtiny. Debido al número limitado de pines de conexión (8 pines), el modo de funcionamiento se determina en la fase de arranque. Así es necesario desconectar la alimentación del circuito cada vez que necesitemos cambiar su modo de funcionamiento: Luz trasera / Luz de dirección. Utilizando otro modelo de micro controlador con más pines, como el ATmega, se podrían integrar ambas funciones y ampliar el número de LED en la barra.

Programar el ATtiny

La programación del ATtiny se puede hacer con Arduino, mediante el interface ISP.

Programar ATtiny

Shield programador ATmega/ATtiny (ARDUINO)

Firmware

El código de programación de esta barra LED,  se puede descargar desde el siguiente enlace: Luz trasera para bicicletas