Pantalla de reloj victoriana: 350 luces LED y una placa de control para gobernarlas a todas
En un blog anterior, "Recreación de pantallas victorianas de 21 segmentos", hablé sobre cómo mi amigo de bricolaje (DIY) (y creador extraordinario) Steve Manley y yo estamos en el proceso de crear interpretaciones modernas de pantallas victorianas de 21 segmentos. A diferencia de las pequeñas bombillas incandescentes que iluminaban la pantalla original, estamos usando luces LED WS2812B tricolores, como la 4684 de Adafruit Industries LLC.
De manera similar, en lugar de usar un interruptor electromecánico complicado para controlar todo (algo que hubiera sido de última generación "en aquellos tiempos"), estamos usando una unidad de microcontrolador (MCU) moderna, que habría sido alucinante para los ingenieros e inventores de la época victoriana.
Steve y yo estamos creando pantallas de 10 caracteres. Solo para darle una idea de cómo se ve una de estas, la Figura 1 muestra una implementación temprana de la pantalla de Steve mediante un panel frontal impreso en 3D rociado con pintura de color bronce. En este caso, Steve está ejecutando un patrón de prueba simple para verificar que todas sus luces LED estén funcionando.
Figura 1: Implementación temprana de 10 caracteres de una interpretación moderna de pantallas victorianas de 21 segmentos. (Fuente de la imagen: Steve Manley)
Observará que el panel de pseudolatón de Steve está dividido en dos mitades porque su impresora 3D no podía manejar la extensión completa de 20 pulgadas (in) de la pantalla. Además, Steve optó por 10 grandes "orificios" en su panel frontal que rodean los bordes exteriores de sus caracteres. En comparación, mi panel frontal fue cortado con láser a partir de una sola pieza de acrílico con un acabado de latón (Figura 2).
Figura 2: Elementos principales de la pantalla de 10 caracteres. El panel de pseudolatón de acrílico cortado con láser se ve en primer plano. Detrás de este panel hay diez carcasas impresas en 3D, cada una de 64 mm de alto, 50 mm de ancho y 10 mm de grosor. En la parte superior hay diez placas LED vistas desde atrás, agrupadas en cinco subconjuntos de dos placas. (Fuente de la imagen: Max Maxfield)
Cada una de las placas de circuito tiene 50 mm de ancho y 64 mm de alto. Estas placas se agrupan en cinco subconjuntos de dos placas. También hay diez carcasas impresas en 3D que son del mismo tamaño que las placas y de 10 mm de grosor. En el caso de mi panel de pseudolatón cortado con láser, el láser fue capaz de cortar los 21 segmentos que forman cada carácter y dejar tiras finas de 0.7 mm entre los segmentos.
Steve y yo hemos trabajado en proyectos similares en el pasado, generalmente a modo de competencia amistosa, como los ingeniosos cronógrafos que creamos hace un par de años (vea Create a Cunning Chronograph with Arduino). El caso es que aunque hemos acordado previamente las reglas básicas, como el número y las ubicaciones relativas de las luces LED, normalmente hemos seguido nuestro propio camino con respecto a artículos como las MCU, los relojes en tiempo real (RTC), etc. El problema con este enfoque es que nos ha hecho casi imposible compartir e intercambiar códigos.
Además, cada vez que empezamos a trabajar en un nuevo proyecto, ambos terminamos "reinventando la rueda", lo que es una pérdida de tiempo y esfuerzo. Por lo tanto, en este caso decidimos crear una única placa de control que ambos usaríamos para controlar nuestras pantallas. Además, decidimos crear una placa con todos los "arreglos" necesarios para impulsar proyectos futuros en los próximos años.
Conozca nuestra placa de control de pantalla victoriana
Después de muchas lluvias de ideas, negociaciones y compromisos, se nos ocurrió un diseño que cubría todas nuestras necesidades. Quizás la mejor manera de hacerlo es mostrarle la placa (Figura 3) y luego dar un breve paseo por las distintas partes.
En el medio del lado izquierdo tenemos el procesador principal, que es un Teensy 3.6 en forma de DEV-14058 de SparkFun Electronics. Cuenta con un procesador Arm Cortex-M4F de 32 bits que funciona a 180 megahercios (MHz) (se puede sobreacelerar a 240 MHz) con 1 megabyte (Mbyte) de flash, 256 kilobytes (Kbytes) de SRAM y 4 Kbytes de Memoria Programable y Borrable de Solo Lectura.
Figura 3: A la izquierda, la primera versión de nuestra placa de control, comenzando con la placa del procesador DEV-14058 Teensy 3.6, basada en un núcleo Arm Cortex-M4F. (Fuente de la imagen: Steve Manley)
Detrás del Teensy en el lado más alejado de la placa hay dos potenciómetros que se pueden usar para controlar lo que querramos, como el brillo de la pantalla o la sensibilidad al sonido. A la derecha del Teensy hay cabeceras que brindan acceso a los pines de entrada/salida (E/S) no comprometidos de la MCU.
Delante del Teensy hay una batería tipo botón CR2032 que se utiliza para mantener el RTC cuando se desconecta la alimentación principal del sistema. Delante de la CR2032, a la derecha, hay cabeceras que permiten conectar a la placa sensores y actuadores adicionales basados en I2C. Delante de la CR2032, a la izquierda, hay ocho grupos de cabeceras de tres pines, cada uno de los cuales comprende un pin de 0 voltios, un pin de 5 voltios y un pin de datos. Cada uno de estos puede controlar una cadena de luces LED WS2812. Además, el Teensy tiene una biblioteca Octo LED asociada que puede controlar ocho cadenas simultáneamente.
En el caso de nuestras pantallas de 21 segmentos, los siete segmentos más cortos tienen cada uno una sola LED, mientras que los catorce segmentos más largos tienen cada uno dos LED, lo que da como resultado 35 LED por carácter; esto da un total de 350 LED para la pantalla de 10 caracteres. Cada LED requiere 24 bits de datos y el reloj utilizado para cargar las LED funciona a 800 kilohercios (kHz). Esto significa que si tuviéramos que controlar todas las LED desde un solo pin de MCU, llevaría ([35 x 10] x 24)/800,000 = 10.5 milisegundos (ms) cargar la cadena.
En comparación, utilizando la biblioteca Octo de Teensy y dividiendo nuestros 10 caracteres en cinco pares de dos caracteres, podemos reducir este tiempo a solamente ([35 x 2] x 24)/800,000 = 2.1 ms. Aún mejor, la biblioteca Octo puede usar el motor de acceso directo a memoria (DMA) de Teensy para realizar esta carga en segundo plano, lo que libera el procesador principal para realizar otras tareas, como calcular nuestros asombrosos e ingeniosos efectos de iluminación.
Los cinco interruptores pulsadores momentáneos en el medio de la placa se utilizan para acceder a los menús, seleccionar modos y efectos e ingresar valores (por ejemplo, fecha y hora). También es posible conectar cinco interruptores montados en gabinete en paralelo usando los terminales de bloque de tornillos verdes montados en los bordes de la placa. También decidimos incluir la capacidad de control de infrarrojos (IR) que se puede utilizar para realizar las mismas tareas que los pulsadores. El detector de infrarrojos se encuentra debajo del botón central. Encima de este botón hay una resistencia dependiente de la luz (LDR) que se puede usar para controlar el brillo de la pantalla según la luz ambiental. Sobre la LDR hay un micrófono Electret, que podemos usar para hacer que la pantalla responda al sonido. Todos estos dispositivos se pueden quitar de la placa, montar en el gabinete y conectar a la placa a través de los terminales de bloque de tornillos verdes.
En el lado derecho de la placa, vemos una Seeeduino XIAO102010328 de Seeed Technology. Aunque solo tiene el tamaño de una estampilla postal, la XIAO tiene un gran impacto con un núcleo de procesador Arm Cortex-M0+ ATSAMD21G18 de 32 bits que funciona a 48 MHz con 256 Kbytes de memoria flash y 64 Kbytes de SRAM. La XIAO se utiliza para procesar cualquier señal de control de infrarrojos y enviarla al Teensy. Aunque esto podría considerarse una exageración (porque es casi seguro que podríamos usar Teensy para manejar el IR directamente), decidimos que un enfoque de "dividir y vencer" nos facilitaría la vida a largo plazo.
Todos los dispositivos de montaje en superficie (SMD) se encuentran debajo de la placa. Estos incluyen un RTC DS3231SN# de Maxim Integrated, un CODEC de audio estéreo de baja potencia SGTL5000XNAA3R2 de NXP, un chip antirrebote de interruptor LS119-S de LogiSwitch y un transceptor de bus octal 74HCT245 que actúa como un desfasador de nivel de voltaje de Toshiba Electronic Devices and Storage Corp.
La placa de control roja se muestra montada en la parte posterior de mi pantalla en la Figura 4. También se muestra una placa de distribución de alimentación verde, que incluye un regulador robusto de 3.3 voltios que se puede usar para controlar cualquier sensor adicional de 3.3 voltios, si es necesario.
Figura 4: Montaje de una pantalla de 10 caracteres. La placa de control roja se muestra a la derecha de la imagen. La placa verde a la izquierda se utiliza para distribuir energía a las placas y pantallas. (Fuente de la imagen: Max Maxfield)
A la derecha de la pantalla, que no se muestra aquí, hay una placa de prototipos azul. Todo esto significa que tenemos placas rojas, verdes y azules (RGB), lo que "activó nuestro sentido del humor". Idealmente, la placa de distribución de alimentación habría sido roja, mientras que la placa de control habría sido verde; pero por razones desconocidas, la fábrica de placas habría impuesto una penalización de costo significativa para que tuviéramos el cobre más grueso requerido para la distribución de alimentación en un sustrato rojo, así que hicimos lo que teníamos que hacer para ahorrar dinero.
Programación de la placa de control
El siguiente paso es donde comienza la verdadera diversión porque tenemos que comenzar a escribir el código para controlar la pantalla. Un enfoque que planeamos usar es tener el concepto de un color de fondo, un color de primer plano y una máscara. Cuando un bit de máscara se establece en 0, el segmento correspondiente mostrará el color de fondo; cuando el mismo bit de máscara se establece en 1, ese segmento mostrará el color de primer plano. El punto interesante aquí es que tanto los colores de primer plano como los de fondo pueden ser colores estáticos como el negro, el blanco o algún otro color. Alternativamente, uno o ambos colores de primer plano y de fondo podrían ser dinámicos, como, por ejemplo, rayas de arcoíris que ondulan en la pantalla.
Conclusión
Hay muchos otros experimentos que tenemos la intención de realizar utilizando estas pantallas de reloj victorianas recién acuñadas. Por ejemplo, usando el micrófono y el chip de CODEC de audio, podríamos tener un modo reactivo al audio (consulte también Audio-Reactive Artifact with Arduino Parte 1 y Parte 2). Otra cosa que me gustaría probar es agregar la capacidad de hacer que el texto que se desplaza se "deslice" por la pantalla inclinándolo hacia la izquierda o hacia la derecha (consulte también Adding Motion and Orientation Sensing to Hobby Projects).
Para terminar, mientras escribo estas palabras, sigo pensando en George Lafayette Mason, quien solicitó la patente para las pantallas originales de 21 segmentos en 1898, hace 123 años. Me pregunto qué habría pensado George si pudiera ver lo que estamos haciendo con su idea utilizando las tecnologías de hoy.
Have questions or comments? Continue the conversation on TechForum, Digi-Key's online community and technical resource.
Visit TechForum




