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

 

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/

 

 

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/

 

 

 

 

Bloqueador de llamadas telefónicas

Construcción de un bloqueador de llamadas telefónicas. El decodificador de llamadas está basado en el circuito integrado HT9032, el cuál está diseñado para recibir las señales FSK, transmitidas según el protocolo Bellcore TR-NWT-000030 y especificaciones ITU-T V.23. El sistema de bloqueo de llamadas está construido con un Arduino UNO, junto con su shield LCD, el cuál incluye una botonera de control. Para almacenar la información de las llamadas entrantes y los números de teléfono que se deben bloquear, se utiliza un lector de tarjetas SD/MicroSD, especialmente diseñado para funcionar con Arduino.

Decodificador HT9032

El circuito integrado HT9032 está diseñado para identificar las llamadas telefónicas. La interfaz de señalización de datos debe cumplir con el estándar Bell 202, que se describe a continuación:

  • Sistema análogo, fase coherente, cambio de frecuencia
  • 1 lógico (marca) = 1200 + / 12 Hz
  • 0 lógico (espacio) = 2200 + / 22 Hz
  • Velocidad de transmisión = 1200 bps
  • Aplicación de datos = serial, binario, asíncrono

La interfaz debe estar dispuesta para permitir datos simples de transmisión, desde la central de telefonía hacia la CPE (Equipo de instalaciones del cliente), solo cuando CPE está en estado colgado. Los datos serán transmitidos en el período de silencio entre el primer y el segundo tono de la llamada, antes de que se establezca la comunicación de voz. El nivel de transmisión será -13.5 dBm. (+/-1 dB) y la atenuación máxima entre puntos de 20 dB. El receptor por lo tanto, debería tener una sensibilidad de aproximadamente de -34.5 dBm, para poder decodificar la información en el peor de los casos. El estándar ITU-T V.23 también utiliza la codificación FSK, sistema utilizado para transmitir datos a través de la red telefónica conmutada. Para el modo 2 del V.23, la velocidad de modulación y frecuencias características se detallan a continuación:

  • Sistema análogo, fase coherente, cambio de frecuencia
  • 1 lógico (marca) = 1300 Hz
  • 0 lógico (espacio) = 2100 Hz
  • Velocidad de transmisión = 1200 bps

Diagrama de estados: HT9032C

Dado que el filtro de paso de banda del circuito integrado HT9032 permite pasar la señal V.23,  el HT9032 también puede demodular señal V.23

Pinout: HT9032C

Detección de la llamada

Los datos de identificación de llamada se transmiten en el período de silencio, entre el primer y el segundo tono de llamada antes de establecer la comunicación de voz. El HT9032 primero debe detectar un tono válido, para luego realizar la demodulación FSK. El montaje típico a utilizar, sería rectificar primero la señal telefónica mediante un puente de diodos, y luego enviarla a una red de resistencias con el fin de atenuar el nivel de tensión entrante. Los valores de las resistencias y condensadores de desacoplo, deben elegirse para obtener un voltaje suficiente en el pin RDET1, el cuál espera recibir como mínimo 40 Vrms en la entrada de las línea cuando se reciba la señal del RING. Cuando se supera la tensión de disparo en RDET1, el transistor NMOS conducirá, descargando el condensador conectado al pin RTIME. Esto iniciará un encendido parcial, tan solo de las partes del circuito involucradas en el análisis de la señal de llamada, incluido el pin RDET2. Con el pin RDET2 habilitado, una porción de la señal alterna del RING (la que supere 1.2 V), se conducirá al circuito de análisis del RING. Una vez que se identifica la señal de llamada, el pin RDET se pondrá a nivel bajo.

Detección de llamada (HT9032C)

Normalmente, el pin PDWN y el pin RTIME controlan el modo de operación del HT9032. Cuando ambos pines están a nivel ALTO, el HT9032 quedará configurado en el modo apagado, consumiendo menos de 1uA. Cuando llega un RING válido, el pin RTIME se pondrá a nivel BAJO, y el chip quedará habilitado. Este es el modo de encendido parcial, consumiendo aproximadamente 1,9 mA. Una vez que el pin PDWN quede a nivel BAJO, el circuito quedará completamente encendido, y listo para recibir señal FSK. Durante este modo, el consumo de corriente aumentará a aproximadamente 3,2 mA. Después de recibir el mensaje FSK, se puede permitir que el pin PDWN regrese a VDD, y el circuito volverá al modo de apagado.

Identificador/Bloqueadro de llamadas (esquema)

Descargar el firmware

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

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

 

 

Monitor FM-RDS v2

Construcción de un pequeño receptor de radio de FM con RDS, orientado al personal de mantenimiento de los centros emisores de radio. La idea es construir un pequeño receptor de radio que decodifique la información más relevante del RDS, para poder controlar el correcto funcionamiento de la información que se está transmitiendo por la subportadora RDS de cada transmisor.

PCB: SI4703Este receptor es la segunda versión, utilizando el módulo SI4703, en lugar del RDA5807M que monté anteriormente:

Monitor FM-RDS

Módulo receptor FM-RDS: SI4703

El módulo SI4703, incluye un completo receptor de radio en FM: sintonizador, demodulador FM, decodificador estéreo, decodificador RDS y un pequeño amplificador de audio estéreo de 150mW.

Módulo receptor FM-RDS: SI4703

 

Este módulo se alimenta con una tensión continua de 3,3V, la configuración y el control se realiza mediante el bus I2C y la toma de antena está acoplada al hilo común de los auriculares. De esta forma, el cable de los auriculares hace de antena.

Receptor FM-RDS con: SI4703

Este sencillo receptor de radio está basado en el módulo SI4703, de bajo coste y altas prestaciones. Este módulo incluye en su interior todo el receptor de radio, incluso el decodificador Estéreo, el decodificador RDS y un pequeño amplificador de audio. Para controlar este módulo, he utilizado el micro-controlador ATMEGA328P (Arduino).

Esquema: Radio LCD con SI4703

Descarga de ficheros

El firmware y librerías que necesitas para programar el ATMEGA328P,  los puedes descargar desde el siguiente enlace: Radio_SI4703.rar

¿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

https://www.pcbway.es/

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

Monitor FM-RDS

Construcción de un pequeño receptor de radio de FM con RDS, orientado al personal de mantenimiento de los centros emisores de radio. Este receptor está basado en el módulo RDA5807M, de bajo coste y altas prestaciones. La idea es construir un pequeño receptor de radio que decodifique la información más relevante del RDS, para poder controlar el correcto funcionamiento de la información que se está transmitiendo por la subportadora RDS de cada transmisor.

COMIENZOS DEL SISTEMA RDS (Radio Data System)

A mediados de los ’70, varias organizaciones europeas estaban trabajando en el desarrollo de un sistema para la explotación de subportadoras de FM, lo que llevó en 1978 a la Unión Europea de Radiodifusión (UER) a la definición de un estándar para la identificación de estaciones y programas. El grupo de trabajo partió de la idea de desarrollar un sistema compatible con ARI, ampliando sus prestaciones, y se fijaron los siguientes objetivos:

  • La recepción debería ser fiable en un área grande, al menos como el área de cobertura del programa principal.
  • La velocidad de transmisión debería cubrir las necesidades de identificación del programa, y disponer de capacidad adicional para futuros desarrollos.
  • El formato de los mensajes debería ser flexible, permitiendo realizar algunos cambios a los radiodifusores para adaptarse a sus requerimientos.
  • El sistema tiene que ser capaz de permitir la recepción por medio de equipos de bajo costo.

En base a estos requisitos, en 1984 fueron publicadas las especificaciones del sistema RDS, descritas en el documento técnico 3244 de la EBU.

Logo RDS Standard IEC 62106

En Ginebra, el año 1993 se fundó el RDS Forum, con el fin de compartir las experiencias y necesidades de todos sus miembros y poder adaptar la norma según las necesidades de cada momento, manteniendo la compatibilidad con los receptores RDS más antiguos.

Standard IEC 62106: publicado en el año 2000, está basado en el anterior documento europeo CENELEC EN 50067:1998, que también realizó el RDS Forum; y partiendo del documento 3244 que desarrolló la EBU (European Broadcasting Union) el año 1984. El año 2009 se publicó la versión 2.0: IEC 62106 ed2.0.

ESTRUCTURA DEL RDS

La unidad de información mínima a transmitir por la subportadora RDS, es el Grupo. Cada grupo RDS está compuesto por 104 bits, de los cuales sólo 64 bits son de información útil (61,5%). Los 40 bits restantes de cada grupo (4×10 bits), contienen la información para sincronizar y detectar errores a nivel de bloque.

Estructura del RDS

El algoritmo empleado para la detección de errores, le permite corregir ráfagas de un máximo de 5 bits erróneos por bloque. Si partimos de una velocidad binaria baja (1187,5 bps), con el fin de consumir el mínimo posible de los recursos del transmisor de FM (3% aprox.), y además reducimos la tasa de datos útiles en un 61,5%, la tasa binaria útil del RDS se reduce a 730 bps. En realidad esta capacidad no es la efectiva, ya que dentro de cada grupo tendremos que ocupar 5 bits para indicar al receptor el tipo de grupo y su variante. Esta información es una especie de índice, y es necesaria para poder transmitir la información secuenciada en el tiempo y sin orden preestablecido; su función es equivalente al número de página del Teletexto en TV.

El sistema RDS transmite la información estructurada en paquetes de datos de 104 bits, conocidos con el nombre de: Grupo RDS. La cadencia de envío de cada grupo es de 87,5 mSeg aproximadamente, ya que la velocidad de transmisión de este sistema es de 1187,5 bps. Un grupo RDS está compuesto por 4 bloques de 26 bits, de los cuales 16 bits (2 Bytes) están destinados al envío de información y 10 bits para la sincronización y corrección de errores del propio bloque. De esta forma, los receptores reciben la información de sincronización en intervalos de 26 bits, cada 21,9 mSeg. A pesar de que la sincronización del RDS sea a nivel de bloque, la información sólo se valida después de haber recibido un grupo completo; desde el primer bit del bloque 1 (MSB) hasta el último bit (LSB) del bloque 4 de un mismo grupo recibido, y sin errores en ninguno de sus 4 bloques. Aunque existan errores en un solo bloque, si no se pueden corregir, se perderá la información de todo el grupo.

La finalidad principal del sistema RDS, es la de mantener la sintonía en los receptores de radio y facilitar información rápida (87,5 mSeg) de su disponibilidad para dar información de tráfico y del tipo de contenido que se emite: música, deportes, noticias, etc.; permitiendo la búsqueda rápida del receptor (Scan).

Detalles de un grupo RDS

Por este motivo, TODOS los grupos RDS transmiten una información con asignación fija, en sus primeros 27 bits de información de cada grupo. La asignación del contenido de los 37 bits restantes, dependerá del código y versión de grupo que se esté transmitiendo en cada momento; cuyo valor se transmite en los primeros 5 bits del bloque 2 de todos los grupos. A modo de resumen, estas son las características principales de la estructura del RDS (ver los detalles en la imagen anterior):

  • La información del primer bloque de todos los grupos, está destinada al envío del código PI (Programme Identification).
  • En los primeros 4 bits del segundo bloque se envía el código de grupo, necesario para extraer la información que se envía en los 37 bits de asignación variable de dicho grupo. Con 4 bits, se pueden codificar 16 códigos diferentes, normalmente expresados en formato decimal (0…15).

El quinto bit del segundo bloque, a continuación del bit LSB del código de grupo, indica la versión del grupo. El bit de la versión de grupo se expresa con una letra, A=0 / B=1. La única diferencia que existe entre un grupo del mismo código pero diferente versión (A/B), es que en la versión B se sustituye la información asociada al Bloque 3, por una repetición del Bloque 1 (PI); de manera que el código PI se transmitirá 2 veces en todos los grupos de tipo B (Bloques 1 y 3). La repetición del código PI, versión B, agiliza los tiempos de respuesta en los receptores cuando tienen que realizar cambios de frecuencia. Para facilitar la detección del contenido del Bloque 3 cuando se repite el PI (versión B), independizándolo del código ‘versión’ del Bloque 2, se utilizan dos códigos Offset diferentes C/C’ en el Bloque 3. Se utiliza el código C cuando el grupo es de versión A, y C’ cuando la versión es B. El bit TP (Traffic Programme identification) y los 5 bits del PTY (Programme Type code) también ocupan un lugar fijo, dentro del Bloque 2 de todos los grupos.

SINCRONIZACIÓN, DETECCIÓN Y CORRECCIÓN DE ERRORES

En la trama del RDS, de los 26 bits que contiene cada bloque, 10 bits están dedicados a sincronizar la trama y permitir a los receptores la detección y corrección de errores. La información de los 10 bits de cada bloque se compone de una palabra de control (Checkword) sumada en módulo 2 (XOR, suma sin acarreo) con una palabra Offset, fija y diferente en cada bloque. La palabra de control es el resultado de multiplicar los 16 bits de información del bloque, por el siguiente generador polinomial de 10 bits:

g(x) = x10 + x8 + x7 + x5 + x4 + x3 + 1

Checkword del RDS

La palabra de desplazamiento (Offset) A, B, C (ó C’) y D se suma a los Bloques 1, 2, 3 y 4 respectivamente. Esta palabra tiene un valor escogido para no ser interpretada como ráfaga de errores igual o menor de 5 bits. Esto se hace así, porque el corrector de errores sólo puede detectar una ráfaga de errores de 5 bits como máximo. Si existen más de 5 errores obtendremos una palabra síndrome, pero no la esperada. Al sumar una palabra Offset diferente con la palabra de control, es posible realizar un circuito reversible en los receptores y sincronizar a nivel de bloque.

TIPOS DE GRUPO RDS: CÓDIGO Y VERSIÓN

El sistema RDS puede transmitir 16 tipos de grupo (0···15) y con 2 versiones (A/B). En la estructura básica de todos los grupos, se define una zona de información con asignación fija y otra variable. La información fija es imprescindible para que los receptores puedan diferenciar un programa de otro (PI), pero esta información tiene que ser complementada con el resto de requisitos que se fijaron en la norma: identificar la emisora (PS), permitir un cambio de sintonía rápido (AF) y dar las órdenes de información de tráfico al receptor (TA). El grupo que contiene toda la información básica, necesaria para un receptor de radio con RDS, es el Grupo: 0.

Grupo RDS del tipo: 0A

Para el resto de los grupos, del 1 al 15, inicialmente la norma asignó algunas aplicaciones que raramente se utilizan ahora, por ejemplo el grupo 7 para el  Paging (Buscapersonas). A partir de la revisión del año 1998, el sistema quedó más abierto, ya que se definió el grupo 3A (ODA: Open Data Applications) para transmitir el código de cualquier aplicación, presente o futura, junto con el código del grupo que el radiodifusor utilice para enviar dicha información. De esta forma, el RDS Forum asigna un código para cada aplicación que los fabricantes le soliciten, y la hace pública junto con los formatos y tipo de información que dicha aplicación transmitirá. Así los receptores (especiales y dedicados) buscarán el código de su aplicación en el grupo 3A, leerán el código de grupo por el que se transmite su información, y podrán extraer los datos utilizando ese grupo. El resultado final, es que algunos grupos que anteriormente estaban asignados a una aplicación determinada y ahora sin uso, el radiodifusor los puede reasignar con la información del grupo 3A, para transmitir cualquier tipo de información ODA.

La norma mantiene la asignación fija de todos los grupos RDS que transmiten información destinada a receptores de radio, no pudiendo reasignarlos el radiodifusor para transmitir otro tipo de información. La información ODA se recibe en receptores especiales, no son receptores para escuchar el programa de radio.

PI (Programme Identification)

El código de identificación del programa (PI) está compuesto por 16 bits (2 Bytes) y se transmite en el Bloque 1 de todos los grupos RDS; repitiéndose en el Bloque 3 de todos los grupos versión B. El código PI no se muestra en la pantalla de los receptores, pero es imprescindible para el correcto funcionamiento del RDS, ya que los receptores asocian el PI con el programa. Si algún radiodifusor utilizara el mismo PI de otro programa, como los receptores de radio con RDS sintonizan la frecuencia que reciban con menor tasa de errores RDS y mismo PI, no diferenciarían los dos radiodifusores y cambiarían de frecuencia alternando dos contenidos diferentes.

Código PI del RDS

Los 16 bits del código PI se dividen en tres grupos:

1 – Código del país: 4 bits fijos y definidos en la norma. Como hay más países que número de códigos disponibles (15), los códigos tienen que repetirse en más de un país, pero separados estratégicamente para evitar las zonas de cobertura solapada entre ellos.

2 – Área de cobertura: 4 bits configurables, para que el radiodifusor transmita el código más acorde al ámbito de cobertura de su programa. Cuando un radiodifusor transmite por una cadena programación nacional con desconexiones, debería modificar el código de área cuando cambia el programa, con el fin de que los receptores puedan diferenciar sus contenidos. Cuando existen más de 12 regiones a diferenciar, como es el caso de España, el radiodifusor tiene que repetir los códigos de área, pero comprobando que no existe cobertura solapada entre regiones con un mismo código de área. Para seleccionar el modo de seguimiento RDS que debe realizar un receptor de radio, los equipos disponen de dos modos configurables por el usuario:

Regional ON (REG On): El receptor mantiene la sintonía del programa regional. Verifica los 16 bits del PI antes de realizar un cambio de frecuencia (AF).

Regional OFF (REG Off): El receptor mantiene la sintonía de la cadena de radio, pudiendo cambiar entre emisoras de la misma cadena que estén transmitiendo diferente programación. El receptor omite la verificación de los 4 bits asociados al área de cobertura, comprueba los 12 bits restantes del PI antes de realizar un cambio de frecuencia.

3 – Referencia del programa: 8 bits fijos y definidos por el organismo competente de cada país, para asociar un código único e irrepetible, con una cadena de radio: Radiodifusor + Red.  Por ejemplo, el radiodifusor RNE transmite en FM por 5 redes diferentes, y transmite el RDS utilizando los siguientes códigos de programa:

  • E# 11  RNE 1
  • E2 12  RNE-CLAS
  • E2 13  Radio 3
  • E# 14  RNE 4
  • E# 15  RNE 5

PS (Programme Service name)

Con el fin de que los oyentes no tengan que buscar las frecuencias por las que emiten los radiodifusores en cada localidad, el sistema RDS transmite una ‘etiqueta de texto’, de tamaño fijo y compuesta por 8 caracteres alfanuméricos: Programme Service name (PS). A diferencia del código PI, que no se muestra en los receptores, el PS es el ‘texto por defecto’ que aparece en los receptores de radio con RDS, pasando la frecuencia de sintonía a segundo plano. Sin embargo, el contenido del PS es algo irrelevante para el receptor, sólo es una etiqueta de texto que cada radiodifusor asocia con su programa (código PI para el receptor). Así los radiodifusores pueden transmitir los 8 caracteres que quieran, enviando de forma secuencial los 8 Bytes (64 bits) codificados con alguna de las tablas de caracteres del RDS. El sistema RDS dispone de 3 tablas de caracteres, la principal G0 y las tablas auxiliares G1 y G2.

Tabla de caracteres GO, para el RDS

La tabla GO incluye la mayoría de los caracteres utilizados por las diferentes lenguas de la zona EBU, sin embargo, no incluye los caracteres griegos ni árabes. Por defecto, los receptores de radio traducen los 8 Bytes del PS utilizando la tabla de caracteres G0. En caso de que el radiodifusor quisiera transmitir los caracteres de otra tabla (G1/G2) tendría que insertar un comando de control al inicio del PS, compuesto por 2 Bytes. De esta forma, el radiodifusor tendría que enviar 10 Bytes para transmitir los 8 caracteres del PS. La norma no permite codificar un PS utilizando más de una tabla, pero es posible secuenciar ‘N’ etiquetas PS y utilizar una tabla de caracteres diferente para cada uno de ellos. Esta opción, pensada para facilitar el cambio de tabla, es utilizada por muchos radiodifusores para transmitir información y publicidad utilizando el PS, haciendo caso omiso de los consejos de la norma. Aunque el sistema RDS disponga de medios más adecuados y eficientes para transmitir publicidad (Radio Texto), para los radiodifusores es más atractivo utilizar el PS; ya que todos los receptores de radio con RDS decodifican el PS, y además es lo primero que muestran en su pantalla.

¿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

https://www.pcbway.es/

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

Construcción del receptor FM-RDS

Este sencillo receptor de radio está basado en el módulo RDA5807M, de bajo coste y altas prestaciones. Este módulo incluye en su interior todo el receptor de radio, incluso el decodificador Estéreo, el decodificador RDS y un pequeño amplificador de audio. Para controlar este módulo, he utilizado el micro-controlador ATMEGA328P (Arduino).

Esquema: Radio LCD

Caja y mecanizado

Para montar este receptor de radio, he utilizado una caja de plástico estándar de 100 x 60 x 25mm. La tapa frontal la he mecanizado con la ayuda de la CNC, y la carátula y serigrafía está fabricada con PLA de color negro, con la ayuda de una impresora 3D. Los archivos se incluyen junto con la descarga del firmware.

Frontal de la Radio LCD

Descarga de ficheros

El firmware y librerías que necesitas para programar el ATMEGA328P, junto con los ficheros para mecanizar y fabricar la carátula 3D, los puedes descargar desde el siguiente enlace: Radio_LCD.rar