Frases flotando
La idea básica del funcionamiento de este "invento" consiste en aprovechar la persistencia de nuestra visión [1], que hace que si una serie de imágenes se nos muestran muy rápidamente, tengamos la sensación de movimiento o continuidad. En este caso concreto, una única columna de 7 pequeñas bombillitas [2] -LEDs- se encienden y apagan muy deprisa a la vez que van girando consiguiendo que dé la sensación de estar viendo una serie de letras "flotando" en el aire.
Lo que a partir de aquí se detalla es el proceso de cálculo y construcción del mecanismo que muestra esas letras y, aunque no es muy complejo, sí que harán falta algunos conocimientos de física, electrónica e informática para poder seguir los detalles que a continuación se cuentan.
No olvides hacer clic en cualquier imagen para verla ampliada
Antes de comenzar
Como en un primer momento no estaba claro si la idea iba o no a ser viable, lo primero que se hizo fue construir un prototipo para comprobarlo. Dado que la parte mecánica del giro es bastante "delicada", se optó por hacer el prototipo movido "a mano"... de esta forma se pudo comprobar que sí que era posible construir un aparato de este tipo.
Luego, y como primera aproximación, se intentó añadir a un motor de un juguete un "brazo" y hacer que éste girara las luces. Esta idea no resultó factible y el brazo, al no estar nivelado y no poder ajustarse con ninguna precisión, oscilaba de tal forma que no permitía apenas comprobar su funcionamiento.
Un segundo intento consistió en aprovechar un viejo ventilador de una fuente de alimentación de un ordenador para "adosarle" el brazo con las luces. Desafortunadamente, esta idea, aunque funcionaba algo mejor que la anterior (era bastante más estable), tenía el inconveniente de no disponer de suficiente potencia como para hacer girar rápidamente el brazo.
Finalmente, y como solución definitiva, se optó por usar un viejo disco duro que, aunque no consigue mover todo el conjunto a la velocidad que sería deseable, sí que es totalmente estable y está perfectamente alineado. Además es fácil de agarrar a cualquier soporte y tiene espacio en su interior como para añadir las "piezas" que hacen falta para que todo funcione. De todas formas, y como se comenta en el apartado sobre la parte informática, el uso del disco duro ha supuesto no pocos quebraderos de cabeza.
Un poco de física
Como siempre en esta disciplina, se comenzará por determinar algunos valores de forma más o menos exacta y otros se estimarán o promediarán. El objetivo es determinar el tiempo concreto que cada punto que forma un carácter debe permanecer encendido o apagado mientras se va realizando el giro.
De los 360 grados de una vuelta completa del brazo que sostiene los LEDs, se decidió hacer tres partes de 120 grados, cada una de forma que cupiese el mismo grupo de letras tres veces, con la idea de que, se mire desde donde se mire, se pueda leer el texto que se está mostrando [3].
Partiendo de que la longitud del brazo de giro es de 26 centímetros (en la parte sobre electrónica se detalla el porqué de este medida), se deduce que una vuelta completa de este brazo abarcará longitud=2·π·r=2·3,14·0,26=1,63 metros.
Repartiendo esta longitud entre las 3 partes que se desean mostrar resulta que se dispone de 1,63/3=0,54 metros, es decir, que cada trozo de texto podría ocupar hasta 54 centímetros.
Se sabe que el texto mostrado está formado por 15 caracteres (en la parte sobre informática se detalla el porqué de este número concreto). Además, para que de las tres veces que se muestra el texto en el mismo giro se separe un poco un trozo de otro, hay que dejar algo de hueco entre ellos. Digamos que unos buenos valores podrían ser que cada carácter -cada letra o número- midiese unos 2,5 centímetros... por lo que 15·2,5=37,5 centímetros, más unos 16,5 centímetros de separación entre trozo y trozo de texto hará que se cubran los 54 centímetros disponibles.
La mayor parte de los caracteres mostrados están inscritos en una matriz de 5 filas por 4 columnas [4]. Por tanto, cada una de estas 4 columnas deberá medir algo más de medio centímetro de ancho (para ser exactos, 2,5/4=0,625 centímetros). Aunque este valor es un tanto aproximado, ya que entre carácter y carácter también habrá que dejar algo de "hueco" libre para que no se vean demasiado juntos dos caracteres adyacentes de una misma palabra.
Por otra parte, el brazo de giro da 191 vueltas cada minuto -rpm- (el porqué de este valor se detalla en la parte sobre electrónica), así que dará una vuelta cada 314 milisegundos (para calcularlo basta con hacer una regla de tres sabiendo que si en 60 segundos da 191 vueltas, para dar una sola vuelta empleará 60/191≈314 milisegundos)... Dicho de otra forma, los 1,63 metros de espacio total de una vuelta se cubren en 314 milisegundos. Es fácil calcular por tanto que para recorrer 0,625 centímetros se emplearán 1,2 milisegundos (al igual que antes, basta con hacer una regla de tres sabiendo que si para recorrer 163 centímetros se tardan 314 milisegundos, para recorrer 0,625 se tardarán x milisegundos, resultando como se comentaba antes, 1,2 milisegundos).
Concluyendo, para mostrar cada columna que forma un carácter se disponen de 1,2 milisegundos. Tras unas cuantas pruebas, este tiempo se ha repartido de esta forma: 580 microsegundos el LED encendido (o apagado, según corresponda para formar el carácter en cuestión) y 127 microsegundos el LED apagado (este tiempo correspondería a la separación entre columna y columna de un mismo carácter). El tiempo restante -hasta completar los 1,2 milisegundos que había disponible, -es decir, 493 microsegundos- por cada una de las 4 columnas que forman un carácter -o sea, sobre 2 milisegundos- se "acumula" al final -detrás de la última columna de cada carácter- y sirve como separación entre ellos (aunque tras algunas pruebas, finalmente la separación se ha fijado en 1 milisegundo y parecen verse mejor las letras).
Pues con estos datos físicos, ya se tienen los detalles que se necesitan para luego poder construir la parte informática de la gestión de las frases.
Ahora, algo de electrónica
La parte electrónica tiene dos secciones casi por completo independientes. Por una parte la electrónica que hace posible encender y apagar los LEDs; y por otra, la que hace girar al brazo que los soporta. Ambas están diseñadas en torno a un viejo disco duro despiezado del que se han aprovechado casi todos sus componentes (el motor -que hace girar a todo el conjunto-, sus transistores de potencia -que se usan para alimentar las bobinas del motor-, sus potentes imanes -para activar el relé reed que más abajo se menciona-, su cabeza lectora -para hacer llegar la alimentación al brazo de giro-, sus fichas de conexión -para alimentar eléctricamente a todos los circuitos- y sus discos de datos -para soportar todo el conjunto-).
La parte que gestiona los LEDs se basa en un microcontrolador PIC12F683 que tiene potencia -y salidas- suficientes como para controlar la columna de 7 LEDs. El diseño inicial sólo se modificó posteriormente para incluir, por una parte, un condensador que mantiene la tensión de alimentación del microcontrolador durante algunos instantes debido a las pequeñas microinterrupciones de la tensión de alimentación que eran causadas por el sistema usado para llevar esa tensión hasta el brazo con los LEDs. Y por otra, se añadió un relé reed (si no sabes lo que es, aquí puedes ojear unos cuantos tipos) que permite hacer que cada renglón comience a mostrarse exactamente en el mismo punto de giro, ya que activa una entrada del microcontrolador justo al pasar por una posición concreta que está "marcada" con un imán pegado a un lateral de la carcasa del disco.
La parte electrónica que gestiona el giro se intentó diseñar en primer lugar en torno a la propia electrónica de control que incluía el disco duro. La idea era aprovechar que los discos duros "normales" comienzan a girar por si mismos nada más conectarlos a la tensión de alimentación, lo que hacía pensar que con eso sería suficiente y no habría más problemas... Pero, desafortunadamente, al situarle "encima" todo el peso del brazo de giro, el disco no llega a alcanzar su velocidad prefijada y al cabo de unos pocos segundos la electrónica que lo gestiona se desconecta automáticamente y deja de girar... Aun así, y tratando de no descartar la idea de usar la propia electrónica del disco, se añadió un microcontrolador para que pasados unos segundos reseteara la electrónica de control y ésta se viera obligada a comenzar a girar de nuevo... A pesar de todo, esta idea tampoco sirvió pues el giro no era uniforme, ya que continuamente el disco se aceleraba -al arrancar- y se desaceleraba -al resetear- y no permitía mostrar el texto correctamente (daba la sensación de que las letras se estiraban y encogían debido a los continuos cambios de velocidad). Así las cosas, no quedó más remedio que usar otro microcontrolador PIC12F683, que con ayuda de tres transistores (como éstos obtenidos del propio disco duro) gestiona la alimentación de las tres bobinas del motor. Como se ve en la imagen, lo que se ha hecho es prescindir completamente de la placa controladora que acompaña a todos los discos duros -normalmente en su parte inferior- y se ha sustituido por una placa de circuito impreso -más pequeña y en la parte superior- que contiene el microcontrolador, los tres transistores y un LED (que indica que el brazo ha alcanzado la velocidad final de giro cuando se ilumina).
Otro problema con este apartado sobre la electrónica del disco duro fue determinar una velocidad de giro apropiada [5]. La limitación de la tensión de alimentación de las bobinas del disco duro (que comienzan a calentarse de forma preocupante en cuanto sube más allá de 5 voltios) hace que haya muy poco margen de maniobra, pues si bien es verdad que sin el peso del brazo de giro el disco es capaz de alcanzar más de 7.000 rpm, con todo montado no es capaz de pasar de unas 200 rpm. De ahí, que por seguridad se haya fijado 191 rpm como un valor aceptable para no sobrecargar en exceso el motor... y aun así, se ha comprobado que si se deja más de un par de horas funcionando continuamente se calienta bastante [6] (en el caso del Centro, como sólo funciona "a ratos" -durante los recreos y a las entradas y salidas-, este problema no afecta, pero en otros casos habría que tomarlo en serio y considerar la posibilidad de añadir un ventilador bajo el conjunto para mantener "a raya" la temperatura).
Finalmente, el tema de la longitud del brazo de giro también planteó algún que otro problema. Idealmente, cuanto más largo sea, mejor, pues más será la longitud disponible para mostrar letras. Sin embargo, una longitud excesiva hace que cada vez pese más, que la inercia de giro vaya aumentando y, como consecuencia, que el motor no disponga de la suficiente potencia como para hacerlo girar. Para resolver el problema, se optó por usar una varilla de una vieja antena de televisor que permitió, con el montaje ya hecho, aumentar y disminuir su longitud hasta determinar empíricamente que unos 26 centímetros era una medida "de compromiso" entre el peso, la inercia, la longitud disponible para el texto y la potencia que la parte electrónica es capaz de obtener del motor.
Y por último, la parte informática
Aunque pueda parecer lo contrario, el apartado de control del motor del disco duro puede que sea hasta más complejo que la gestión de los LEDs, así que comenzaremos por lo más sencillo.
Partiendo de los datos físicos que antes se calcularon, el programa para hacer encender y apagar los LEDs no tiene demasiada complicación. Tal vez lo más laborioso sea diseñar el juego de caracteres -es decir, crear con unos y ceros los puntos que forman cada una de las letras y números a mostrar- y lo más delicado "distribuir" las zonas de memoria del microcontrolador para que quepa un número razonable de caracteres y así poder mostrar cuanta más información mejor. Como cada página de memoria de este microcontrolador mide 256 bytes y tiene un total de ocho -sí, 2 kilobytes- se han repartido así: 186 bytes de la primera página de memoria para el código del programa, las segunda y tercera página de memoria se usan para contener respectivamente el juego de caracteres de las letras y el de los números, y desde la cuarta hasta la octava -ambas incluidas-, contienen las frases que se mostrarán (por lo que hay "hueco" para escribir hasta 5·256=1.280 caracteres) [7].
Como se ha comentado, la página uno, la que contiene el código del programa, aún no está completa. También están sin usar los 256 bytes de memoria EEPROM que tiene este microcontrolador (que se podrían usar para almacenar parte del texto a mostrar y así recuperar una página completa de memoria para programar). La idea sería emplear todo este espacio sobrante para implementar un sistema de recepción por infrarrojos [8] que haría posible cambiar "a distancia" el texto que se está mostrando... Pero, aunque se ha intentado que los alumnos del ciclo superior de desarrollo de aplicaciones informática lo hagan, por ahora no ha habido suerte... Aunque no pierdo la esperanza :-)
Por otra parte, si se observa con detenimiento el texto de las frases se verá que está formado por 76 columnas de puntos, que repartidas entre los 4 puntos que de promedio ocupa cada carácter (algunos caracteres miden 3 puntos de ancho -como la "i"- mientras que otros llegan hasta los 5 -como la "m"-) más un punto de separación entre ellos resulta que se muestran unos 76/(4+1)≈15 caracteres a un mismo tiempo. En cuanto a por qué precisamente 76 columnas, esto se debe a que para poder crear la ilusión de que el texto se desplaza hacia la izquierda -como si estuviese en una cinta sin fin- se usa un espacio temporal en la memoria RAM del microcontrolador -un buffer- que mide 80 caracteres [9], de los que los últimos 4 bytes se emplean para guardar el nuevo carácter que se verá por la derecha cuando se pierda uno por la izquierda [10].
Respecto al control del motor del disco duro que mueve el brazo de giro, ha sido bastante más laborioso de lo que cabría esperar. En primer lugar es necesario considerar que los discos duros suelen usar motores "sin escobillas" -brushless- en inglés-. Estos motores tienen unas características que los hacen ideales para aplicaciones en las que se necesite una gran velocidad (sobre las 7.200 vueltas por minuto -rpm- es lo habitual aunque no es extraño encontrar discos que llegan a las 10.000 rpm) y siempre que la carga a la que se vean sometidos no varíe demasiado bruscamente (en los discos duros y en los aviones de aeromodelismo, que es donde más se emplean, ambas condiciones se cumplen).
El mayor inconveniente de estos motores es que al no tener escobillas no es posible conocer dónde está el rotor -la parte central que gira- y por tanto, no es posible conocer a priori qué bobina se debe activar y en qué instante concreto para que gire correctamente. Hace algún tiempo se añadían al motor unos sensores de efecto Hall que permitían saber en qué posición se encontraba el rotor, lo que desde luego facilitaba su control... Pero, desafortunadamente, a fecha actual, como los sensores Hall son caros y los discos duros cada vez más baratos, se prescinde de ellos y los motores de prácticamente cualquier disco duro actual no disponen de estos sensores (algunos motores de lectores de CD sí que aún los incluyen, pero su poca potencia no lo hace viables para este proyecto).
El caso es que, al no disponer de las referencias que proporcionan los sensores Hall, no queda más remedio que recurrir a "trucos" para poder conocer en qué posición se encuentra el rotor del motor y saber así cuándo activar cada bobina [11]. En una primera aproximación se realizaron unos cuantos cálculos al respecto para este caso, pero finalmente se decidió usar otra forma de gestionar el motor.
La idea está basada en que cuando la velocidad que se pretende conseguir no es demasiado alta -y las 191 rpm que se usan en este caso no lo es en absoluto frente a las típicas 7.200 rpm de este tipo de motores- hay una solución más sencilla para conmutar las bobinas. En este caso se puede controlar el motor en "lazo abierto", o dicho más llanamente, "a ciegas"... es decir, el microcontrolador hace girar los campos magnéticos de las bobinas del motor pero sin saber en ningún momento en que posición real se encuentra el rotor. Esto tiene dos inconvenientes serios. Por una parte, el proceso de aceleración debe ser lento -o el rotor no será capar se seguir a las bobinas- y por otro, el arranque es muy laborioso (hay que asegurar una posición inicial y comenzar a girar muy despacio hasta estar seguros de que el giro ha comenzado correctamente y en el sentido que se espera). Después de un buen número de pruebas (usando poco más que ensayo y error) se ha conseguido diseñar un proceso de aceleración razonable (en unas 100 vueltas consigue llegar desde parado a la máxima velocidad) y un proceso de arranque que, si bien no es el que se habría deseado, sí que al menos cumple su cometido y permite poner en funcionamiento todo el conjunto.
Conclusiones
Si has leído hasta aquí tendrás una idea razonable de cómo funciona este aparato y de cómo se puede construir a partir de material informático "de desecho" y algún que otro componente más. También habrás comprobado que, aunque factible, no es desde luego algo para hacer "en un par de tardes". De todas formas, si te animas a hacer uno o te queda algún detalle de los aquí comentados poco claro, puedes pasar por el departamento de informática del Centro y tal vez podamos orientarte.
-
[1] aunque el tema de la persistencia de la visión es muy discutido y no aceptado de igual forma por todos los autores (basta con dar una ojeada aquí para comprobarlo), para el caso que nos ocupa esa idea sencilla de permanencia o recuerdo de lo ya visto durante un tiempo posterior a cuando dejó de verse (del orden de algunos milisegundos) es más que suficiente
-
[2] en realidad, bombillas incandescentes no servirían para este caso y es imprescindible usar LEDs. El motivo es que las bombillas "normales" tienen un efecto llamado "inercia térmica" que hace que si se apagan después de estar encendidas, no dejen de alumbrar al instante, sino que emiten algo de luz durante algún tiempo aún ... Y eso haría que este aparato no pudiese funcionar, pues los tiempos que deben las luces permanecer encendidas y apagadas tienen que ser muy cortos y muy precisos
-
[3] aunque los cálculos se hicieron para mostrar tres veces el mismo texto en cada vuelta, la ubicación real del "invento", encajado en una esquina, hace que una de esas tres veces resulte imposible de ver -a no ser que veas a través de las paredes, ¡claro!-. De ahí que en la versión final de la parte informática que se encarga de mostrar las letras, a pesar de que se realicen todos los cálculos y se respeten los tiempos detallados, no se enciendan los LEDs para la tercera vez que debe mostrarse la frase evitando así "brillos" innecesarios en la zona que permanece fuera de observación
-
[4] esta afirmación hay que matizarla un poco. Por una parte, si has visto el "invento" en detalle habrás observado que la columna de LEDs que forma las letras tiene realmente 7 filas y no sólo 5 como se dice más arriba. Esto es así porque los LEDs de las posiciones 2 y 5 son duplicados de los de las posiciones 3 y 6... es decir, si se enciende el LED de la fila 2 también se encenderá el de la fila 3, y lo mismo para los de las filas 5 y 6 (no hay que olvidar que el microcontrolador 12F683 que se usa para gestionar los LEDs no dispone más que de 5 salidas). Por tanto, lo que se ha hecho es diseñar el juego de caracteres mostrado de forma que siempre esas posiciones sean idénticas y así un único bit -una sola patilla del microcontrolador- puede manejar dos LEDs
-
[5] si el cine muestra 24 imágenes por segundo y nos da una sensación de continuidad muy convincente, quiere decir que cada una de las imágenes individuales que vemos se nos presenta durante 1/24=41,6 milisegundos. Si cada 314 milisegundos se produce un giro -es decir, se está girando a 191 rpm-, es que se estarán mostrando 1/314 milisegundos≈3 imágenes por segundo... Conclusión, que aunque las letras que forman el texto se vean, ya sabes el porqué del efecto de "parpadeo", que seguro que habrás comprobado si has visto el funcionamiento real. Desde luego hubiera sido deseable una velocidad en torno a las 1.500 rpm para terminar con el parpadeo, pero ese valor está bastante lejos de las posibilidades reales de motor del disco duro usado, y lo que es peor, de lo que la inercia permitiría en un montaje como éste antes de "desintegrarlo" :-)
-
[6] el efecto que produce el calentamiento de las bobinas en el motor es que éste se queda completamente "sin fuerza". Los imanes usados en los discos duros suelen ser de neodimio, un material que tiene una potencia magnética mucho mayor que un imán "normal". Sin embargo, al calentarse, este material pierde parte de sus propiedades y de ahí que el motor o bien deje de girar (si lo estaba haciendo), o, si estaba parado, ni siquiera sea capaz de arrancar hasta que no se enfría
-
[7] una pregunta curiosa podría ser: si hay sitio como máximo para 1.280 caracteres y se ocupan al completo con texto a mostrar, ¿cuánto tiempo tardaría en verse todo ese texto antes de que vuelva a repetirse? Pues sabemos que de media los caracteres están formados por 4 columnas, así que en total habrá 4·1280 = 5.120 columnas para mostrar. Como en cada vuelta del giro se "avanzan" tres columnas, resultará que tras 5.120/3≈1.706 vueltas se habrá mostrado todo el texto disponible. Sabiendo que la velocidad de giro es de 191 vueltas por minuto, resultará que en 1.706/191≈9 minutos se habrá mostrado el texto completo
-
[8] no es imprescindible que el sistema de transmisión sea por infrarrojos, aunque desde luego sí que sería lo más sencillo de implementar y lo más fácil de gestionar luego usando, por ejemplo, un mando a distancia de un televisor. Pero lo que sí que es totalmente necesario es que la transmisión sea "inalámbrica", porque no se puede perder de vista que el microcontrolador que hace aparecer el texto va situado en el extremo exterior del brazo de giro a 191 rpm, lo que desde luego descarta cualquier otra forma de comunicación con él
-
[9] este microcontrolador no posee más que 128 bytes de memoria RAM -aunque, teniendo en cuenta que está basado en la arquitectura Harvard, no es extraño- y hace falta algo de espacio para almacenar más cosas además del buffer (por ejemplo, las variables que controlan el programa), además de que a 32 de esas posiciones es más "trabajoso" acceder que a las 96 restantes... Si tienes la curiosidad por saber por qué es así, ojea la página 8 de la documentación de este dispositivo y te darás cuenta que no toda la memoria reside en un mismo banco...
-
[10] como curiosidad, si alguien mira al extremo izquierdo por donde se "pierden" las letras, verá que éstas lo hacen a razón de 3 columnas cada vez que el brazo da una vuelta... Pero si uno pudiese "correr" más deprisa de lo que gira el brazo y conseguir ver simultáneamente las 3 veces que se muestra el mismo texto en un giro, se daría cuenta de que en realidad cada una de esas 3 veces se diferencian en una única columna, no en 3... pero como sólo vemos una de ellas, el efecto es que cada giro avanza 3 columnas :-)
-
[11] el caso más habitual es que estos motores tengan 3 bobinas -bueno, en realidad tienen 12, pues el esquema de 3 bobinas se repite hasta 4 veces en la misma circunferencia del motor-, y que activándolas una tras otra se consiga el giro del rotor (sí, el típico circuito "en estrella" que se puede estudiar en cualquier asignatura sobre máquinas eléctricas). Pero si en lugar de esto se activan dos bobinas simultáneamente (eso es, ahora como si fuese un circuito "en triángulo"), quedará libre una tercera bobina por la que habrá pasado (por delante de ella) el imán del rotor -ya que éste se moverá debido a la magnetización de las otras dos-, y eso hará que se induzca una fuerza contra-electromotriz que podrá ser medida, y a partir de ella deducir en qué posición se encuentra el rotor y, por ende, a partir de ahí determinar cúal es el momento oportuno de activar cada bobina. En la práctica esto no es nada sencillo de implementar, pues además de lo ya de por sí complejo del sistema, se añade la dificultad adicional de que las bobinas no suelen estar imantadas o no estarlo (es decir, no es un esquema de tipo todo/nada), sino que se usa tensión "a pulsos" -PWM- para evitar sobreintensidades en el arranque y para poder fijar una velocidad de giro concreta, y esto hace que la fuerza contra-electromotriz se vea muy afectada y se necesite una gran cantidad de "proceso informático" antes de poder usarla como referencia de dónde está el rotor en cada momento. Por supuesto, también hay circuitos que hacen toda esta labor por sí mismos (como éste o éste otro) aunque suelen necesitar muchos componentes auxiliares para funcionar y tal vez no sería mala idea recurrir a microcontroladores específicos para esta tarea (empresas como Microchip tienen buena documentación al respecto en su web)
Volver al departamento