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

 

 

 

Nuevo PCB + Sorteo

Diseño de un nuevo circuito impreso con 2 dígitos de 7 segmentos, LED SMD, incluyendo los dos puntos separadores y el punto decimal. Este circuito impreso es compatible con el anterior de un sólo dígito que utilicé en el ‘Reloj SMD’. Así se pueden utilizar ambas placas en el mismo montaje y construir cualquier tipo de display, sin la necesidad de tener que pegar más diodos en el PCB.

Construye un Reloj SMD

Reloj serie con el nuevo PCB

Display de 4 dígitos

El display del último reloj que hice, estaba construido con 4 circuitos impresos  de un dígito de 7 segmentos. Cada uno del los dígitos permite el control de encendido de un punto decimal, el cuál se incluye en cada PCB. Sin embargo, este reloj utiliza además del punto decimal un separador central, formado por dos puntos LED. Como es lógico, para poder controlar 2 signos es necesario utilizar la salida del control decimal de 2 dígitos. Por otra parte, en los PCBs no estaba contemplada la posibilidad de montar los dos puntos separadores. La solución fue la de colocar 2 LED entre las dos placas centrales, pegando uno en cada tarjeta.

Pegar LED en el display

Ambos LED van conectados en serie. El ánodo de esta serie, como es el punto común, va conectado con la alimentación al +12V.

Cableado LED

El cátodo de la serie lo tuve que cablear hasta la salida de control del punto decimal del dígito anterior (el punto decimal del dígito de la izquierda no se utiliza en este reloj).

Nuevo PCB

A pesar de que la solución que tomé es válida, no queda muy elegante hacer semejante ‘engendro’ en un diseño nuevo. Al final decidí hacer otro circuito impreso, con los dos puntos además del punto decimal, y que fuera totalmente compatible con los circuitos impresos que ya tenía fabricados.

PCB: 2 dígitos de 7 segmentos

Este nuevo circuito impreso contiene 2 dígitos, y los dos puntos LED están montados entre ambos dígitos. Este circuito impreso va montado en el centro del display del reloj de 4 dígitos, ocupando los 2 dígitos centrales; y a cada lado va montada otra placa de un sólo dígito.

Nuevo display del Reloj

¿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. Por suerte, se puso en contacto conmigo el fabricante de circuitos impresos PCBWay, preguntando si quería hacer una colaboración con ellos. Lo primero que hice es visitar su página Web, y me pareció muy interesante su manera de trabajar.

Proyectos compartidos en PCBWay

https://www.pcbway.com/project/shareproject/

Esta empresa, aparte de ser grande y tener muy buenos precios, dispone de un apartado en su Web para alojar los diseños y poder compartirlos. Creo que la idea es muy buena para ambas partes. El diseñador recibe un porcentaje de las ventas que se realicen de sus diseños y el fabricante aumenta sus ventas.

Link of my shared project: 
PCB from PCBWay

Lote PCBs

Sorteo por cortesía de: PCBWay

Sorteo patrocinado por PCBWay

El sorteo se realizará el próximo día 23 de Diciembre de 2017, y habrá 3 ganadores. Cada ganador recibirá un cupón de regalo para mandar a fabricar sus propios PCB’s. Los circuitos impresos podrán ser de una o dos caras, y con un tamaño máximo de 100×100 milímetros… con transporte incluido.

PARTICIPANTES

El sorteo se realizará entre los suscriptores de este canal, que dejen un comentario en la línea de comentarios del video (YouTube). Si quieres participar, no te olvides de dejar sin marcar en tu cuenta de YouTube la casilla: ‘Mantener todas mis suscripciones en privado’ (por lo menos el día 23 de Diciembre).

Logo: PCBWay
https://www.pcbway.com/

CIRCUITOS IMPRESOS (PCB)

Archivos GERBER para fabricar este nuevo PCB, con 2 dígitos de 7 segmentos:

PCB_Display_2x7.zip

El DIAC, comprobador de diodos (v2)

Se realizan algunas modificaciones en el comprobador de diodos, para poder medir diodos de tipo DIAC, así como los diodos ZENER de más de 25V. Un DIAC es un diodo bidireccional autodisparable, o DIodo para Corriente Alterna. Este tipo de diodos se utilizan normalmente para controlar el punto de disparo de un TRIAC, con el fin de modificar el ancho de impulso de una señal alterna.

Curva DIACEl DIAC no tiene polaridad y se comporta de manera similar a diodos ZENER de la misma tensión conectados en serie, uniendo sus ánodos o cátodos como punto común y quedando los otros dos terminales para su conexión. En este caso, el conjunto conduciría en ambos sentidos, pero sólo cuando la tensión fuera superior al valor del ZENER. Un DIAC funciona casi igual, pero su tensión de disparo está en torno a los 30V, y cuando se supera este umbral conduce  como un diodo normal, manteniéndose así mientras no baje la tensión por debajo de 20V aproximadamente (dependiendo del tipo y fabricante).   El comportamiento de un DIAC es similar al de una lamparita de neón.

Más detalles de la primera versión del comprobador de diodos:

Comprobador de diodos – Diode tester

Comprobador de diodos (v2)

Este comprobador de diodos funciona de manera diferente al anterior. El primero mantenía una tensión máxima al conectar su alimentación, y con el potenciómetro de ajuste se regulaba la corriente máxima de salida. Con esta versión, el potenciómetro ajusta el valor de la tensión de salida, variando también la corriente que circula por el diodo bajo pruebas. Pero en este circuito es necesario limitar la corriente máxima de salida, por lo que se incluye un circuito limitador de corriente. Al poder variar la tensión de salida con el potenciómetro de ajuste, es posible comprobar la tensión de disparo de un DIAC.

XL6009 (Step Up Converter)El módulo Step Up Converter MT3608, se ha sustituido por el módulo XL6009. El módulo XL6009 permite subir la tensión de salida hasta cerca de 50V, así es posible llegar a la tensión de disparo de un DIAC y comprobar diodos ZENER de más de 25V.

Esquema: Comprobador de diodos (v2)

Limitador de corriente

El circuito limitador de corriente está construido a partir de un regulador de tensión de 5V (7805), conectando sus terminales de una forma especial (ver esquema). El terminal de salida + del comprobador se conecta al punto común del regulador, el cuál se conectará a masa a través del diodo bajo prueba. Entre el terminal de salida del regulador y su terminal de referencia, se conecta una resistencia de 220 ohmios. El valor de esta resistencia es el que determina la corriente máxima, y se calcula según la Ley de Ohm (R=V/I). Siendo V la tensión del regulador y colocando una resistencia de 220 ohmios, la corriente máxima a la salida de este comprobador será 22,7 mA (5/220). Este valor de corriente máxima es aproximado, porque depende de la tolerancia de los componentes utilizados.

Si no consigues entender el funcionamiento de este circuito limitador de corriente, junta las puntas del comprobador simulando un cortocircuito y revisa de nuevo el circuito resultante… la corriente que circula por la resistencia de 220 ohmios, cierra a masa a través del cortocircuito que acabas de hacer. 

 

 

Termostato de precisión #1

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

Descripción de funcionamiento

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

Esquema: Termostato de precisión

Salidas de control

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

2 Relay Module

Power Down Mode

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

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

Circuito impreso

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

Circuito impreso universal

Firmware

Termostato de precisión (v1.00)

Caja y frontal

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

Frontal delTermostato

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

 

Eficiencia lumínica: ¿qué lámpara comprar?

Eficiencia lumínica

Funcionamiento de las lámparas de descarga, conocidas como lámparas de bajo consumo o ahorradoras. Sistema de desmontaje y modo de comprobar su estado. Tabla comparativa de la luminosidad (Lumen/LUX/Candela) de lámparas de filamento, halógenas, descarga y LED. La temperatura de color. Esquema y medidas en una placa de control (balastro electrónico-ballast). Instalación de un balastro electrónico reciclado, en sustitución de la reactancia y cebador de un tubo fluorescente. Ventajas al utilizar un balastro electrónico con un tubo fluorescente.