Hacía ya un tiempo que tenía pensado construir algún día un cubo de Leds como los que se ven por la red. Parecen cacharros interesantes por los efectos de animación que se consiguen y es un dispositivo con enormes posibilidades a la hora de programarlo.
Podría decirse que es un display tridimensional aunque de muy baja resolución, ya que cada pixel (en 3D se llaman “voxels”) es en realidad un diodo LED discreto, en este caso de 3mm de diametro y el conjunto está formado por un total de 512 LEDs que pueden encenderse o apagarse de forma totalmente independiente o, al menos esa es la impresión que percibe el ojo humano.

Controlarlos todos de forma completamente independiente requeriría 513 cables en el caso de que se optase por una configuración en cátodo común, por ejemplo. Esto está fuera de los límites que impone el sentido común. Aprovecharemos la relativa lentitud del ojo humano y lo que se conoce como “persistencia de la visión” (las imágenes se mantienen un tiempo en la retina y por tanto en el córtex visual aún cuando ya no existen en el mundo real) y de esta manera iluminando secuencialmente (que no simultaneamente) los LEDs conseguiremos la ilusión de que se encienden y apagan de forma independiente y simultanea.
Los 512 LEDs de un cubo 8x8x8 están organizados en 8 capas o pisos de 64 LEDs cada uno (8×8). Todos los LEDs de una capa están conectados en cátodo común, de forma que si conectamos ese cátodo a 0V y aplicamos una tensión positiva en los ánodos podemos encender cada uno de ellos por separado. Por otro lado, todos los que pertenecen a la misma columna (uno de cada capa, misma posición x,y pero distinta z) están a su vez conectados en ánodo común. Si aplicamos 0V en ese ánodo nunca se iluminarán y si, por el contrario, aplicamos una tensión positiva se iluminará tan solo aquel que pertenezca a una capa cuyo cátodo este puesto a 0V. Resumiendo, tenemos 64 cables conectados a ánodos (columnas) y 8 cables conectados a cátodos (capas).

La visualización se realizará una capa tras otra secuencialmente, o sea, capa 1: se aplica tension en los ánodos de los LEDs que deben iluminarse en la capa 1 y una vez están todos correctos se pone a masa (0V) el cátodo común de la capa1, pero solamente el de esta capa (los demás con resistencias de “pull-up” a positivo). Esto ilumina los LEDs de la capa1. Desconectamos el cátodo (se apagan) y repetimos el proceso para las siguientes capas, una tras otra, y así continuamente. Con la rapidez suficiente parece que todas las capas se iluminan a la vez. Yo estoy manteniendo encendida cada capa dos milisegundos y no se observa ni el mas mínimo parpadeo.
Una consecuencia lógica de esta forma de proceder es que cada LED solamente está encendido durante 1/8 del tiempo y sería razonable esperar algún tipo de parpadeo.
En cuanto al proceso de construcción yo no diría que conlleve gran dificultad si se tiene cierta experiencia en soldadura con estaño. Lo que no cabe duda alguna es que si que conlleva grandes dosis de paciencia, mucha calma, ninguna prisa y cierta exquisitez en los procedimientos empleados si queremos obtener un resultado mínimamente aceptable.
Un conteo por lo bajo muestra que la construcción de la estructura formada por los LEDs interconectados conlleva ya realizar 1024 soldaduras mas otras 512 en mi caso ya que he añadido una malla de 8×8 barras de alambre en cada capa por cuestiones de robustez y, por supuesto, pura estética geométrica.

Antes de comenzar con la construcción de la estructura decidiremos que separación queremos tener entre dos leds consecutivos y si esta permite la soldadura directa de los terminales de estos o, por el contrario es necesario el uso de barras de alambre verticales. Si optamos por un valor demasiado bajo no se verían bien los leds a través del cubo y, además la luz de unos iluminaría en exceso los contiguos, quedando, por otro lado, un cubo demasiado pequeño para mi gusto. He visto que mucha gente opta por una separación de 25mm, lo que permite soldaduras directas con la longitud de los terminales de la mayoría de leds que podemos encontrar en el mercado. Los que yo he comprado son demasiado cortos y menos de 25mm de separación me parece poco así que he decidido complicarme un poco la vida y usar barras de alambre tanto verticales como horizontales para soldar los 512 leds, optando por una separación de 30mm, con lo que quedará un cubo “grandecito”.

Todo aquel que tenga cierta experiencia en la soldadura de componentes electrónicos sabe que el estaño no se adhiere facilmente a cualquier metal. El alambre galvanizado que he usado se ha comportado a este respecto mejor de lo que esperaba y no ha sido necesario el uso de aditivos como el “flux” que mejoran la adherencia. Si que conviene observar una perfecta higiene de las herramientas de soldadura y proceder con bastante paciencia.
En un cartón robusto y de suficiente grosor he marcado una cuadricula y he perforado con un punzón y posteriormente con un led los 64 orificios que determinarán la posición de cada led. Utilizando esta plantilla se introducen los leds fila a fila soldando sus cátodos a barras de alambre, quedando los ánodos en dirección vertical. Una vez puestos todos se sueldan 8 barras de alambre transversales y tenemos una capa terminada.

Con dos o tres capas terminadas he procedido a soldar los 64 alambres verticales a los que van conectados los ánodos y unen físicamente las distintas capas. Por cierto, para conseguir barras de alambre suficientemente rectas he sometido trozos de un par de metros a tracción y los he cortado a la longitud necesaria obteniendo un resultado muy aceptable. Con ayuda de un soporte para soldadura provisto de pinzas he ido soldando las barras.

Posteriormente se colocan las capas de leds respetando la separación vertical de 30mm y se sueldan obteniendo una estructura cada vez más robusta y cómoda de manipular. A medida que añadimos nuevas capas se va pareciendo más al objetivo que teníamos en mente.
Con la parte más laboriosa acabada (o, al menos eso creía yo) me sumergí en el diseño y construcción de la electrónica de control. La tarea en principio no es simple: hay que manejar 64 ánodos + 8 cátodos lo que hace un total de 72 líneas de control. Es un número claramente excesivo para los microcontroladores que usamos habitualmente y vamos a requerir técnicas de multiplexado, lo que viene a querer decir que con relativamente pocas líneas de entrada/salida del MCU y cierta circuitería externa vamos a manejar esas 72 señales. Existen varias soluciones clásicas a este problema utilizando, por ejemplo biestables o “flip-flops” o registros de desplazamiento con entrada serie y salida paralelo, que es la solución que yo he escogido. No es muy habitual pero no he hecho ningún esquema previo a la construcción de la placa de control pero espero poder hacerlo pronto. Mientras tanto decir que hay esquemas interesantes (así como el resto del contenido) en https://www.instructables.com/id/Led-Cube-8x8x8/ y merece la pena echar un vistazo.
Me he decantado por el uso de un ESP8266 con la ventaja de la wifi y bluetooth incorporados y una velocidad de proceso de 80MHz que supera en cinco veces a los atmega habituales en arduino. Esta placa tiene sus pros y sus contras y posee un número mas bien reducido de líneas de entrada/salida o gpio (general purpose input output). Aunque en principio hay 17 gpios disponibles bastantes son compartidas con otras funciones que se usan internamente para, por ejemplo el módulo wifi o la memoria flash interna, así que al final solo se dispone de 9 líneas útiles (11 si usamos las del puerto serie rx y tx, lo que es posible sin problemas). Yo he conseguido diseñar mi circuito usando tan solo 10 líneas gpio, 8 para el bus de datos compartido por los 8 registros de desplazamiento y los 8 transistores que ponen a masa los cátodos, una línea de clock y una que denomino “habilitador de cátodos” o “cathode enable” que maneja un MOSFET que pone (o no) los emisores de los BJTs a masa, permitiendo que señales presentes en las bases de los BJTs no generen luminosidad no deseada en los leds, ya que no se termina de cerrar el circuito a masa o, visto de otra forma, los BJT permanecen en corte pues su intensidad de base es nula.
