Arte LED Triangular Dinámico: Construye una Pantalla RGB de 45 LEDs con Arduino UNO
Componentes y materiales
| LED RGB programable APA-106 | 45 |
| Cable de cobre estañado calibre 22 | 1 |
| Arduino UNO | 1 |
| Triángulo de contrachapado 12 pulgadas por lado, 1/4 pulgada de grosor | 1 |
Herramientas y máquinas necesarias
- Soldador (genérico)
- Pistola de pegamento caliente (genérica)
- Clips disipadores de calor (para proteger LEDs del calor del soldador)
Sobre este proyecto
Introducción
Este proyecto usa 45 LEDs programables APA-106 controlados por un Arduino UNO. Estos LEDs son similares a las tiras LED programables individualmente, así que usamos la librería NeoPixel de Adafruit para controlarlos. Un solo pin del UNO programa toda la pantalla, ya que una única línea de datos recorre todos los LEDs en cadena.
La inspiración para este diseño vino de dos de mis proyectos anteriores. Mi segundo cubo RGB 5x5x5 (Otro Cubo RGB 5x5x5) usaba LEDs programables APA-106 y me sobraron unos 75. Podría haber construido un cubo 4x4x4 con ellos, pero he construido muchos cubos recientemente: ¡hora de algo diferente! Mi proyecto de Arte con Motor Servo se construyó como un triángulo y ese diseño triangular creó muchos patrones interesantes. Así que este proyecto usa 45 LEDs APA-106 dispuestos en un patrón triangular para explorar más el arte triangular.
Este es un proyecto bastante fácil tanto desde el punto de vista del hardware como del software. Veamos primero el hardware y luego el software.
Hardware
El hardware consiste solo en el UNO y 45 LEDs. Estos LEDs son increíblemente brillantes a máxima potencia, así que tengo el brillo de toda la pantalla establecido en 30 en una escala de 0 a 255. A ese nivel, el UNO y todos los LEDs pueden alimentarse directamente desde la entrada USB del UNO, por lo que una fuente de alimentación de 1 amperio - 5 voltios es opcional.
El primer paso en la construcción es taladrar agujeros en una pieza de contrachapado de 1/4 de pulgada. La placa mide 12 pulgadas en cada borde. Los LEDs están espaciados 1 pulgada entre sí en un triángulo equilátero cuidadosamente construido. Los LEDs son de 8mm, así que taladré agujeros de 8 mm que daban a los LEDs un ajuste perfecto: no se movían en absoluto una vez presionados.
Arriba a la izquierda está el LED APA-106. El terminal largo es tierra. La salida de datos es el terminal a la derecha junto al borde plano del encapsulado. El primer terminal a la izquierda es la entrada de datos, y el siguiente terminal entre la entrada de datos y tierra es +5V. Estos 4 terminales se doblan como se muestra a la derecha. El terminal de tierra tiene un segundo doblez al final: su propósito es solo identificar el terminal de tierra, ya que es difícil verlo una vez que todos están doblados.
La imagen de arriba muestra cómo se cablea la placa. Primero observa que la línea de datos en azul va de un lado a otro mientras los LEDs se encadenan. Esto significa que en las filas impares los datos fluyen de izquierda a derecha, mientras que en las pares, de derecha a izquierda. Esto también hace que los rieles de alimentación sean diferentes para filas impares versus pares. En filas impares, el terminal de tierra sube y el de +5V baja, luego lo contrario para filas pares.
La foto de arriba muestra el cableado. Todo está hecho con cable de cobre estañado desnudo calibre 22. Recogí los rieles de tierra a la izquierda y los de +5V a la derecha. Deberías hacer justo lo contrario. Cada conexión de línea de datos en mi placa tenía que cruzar un riel de alimentación, pero si cambias tierra a la derecha y +5V a la izquierda, ¡las líneas de datos no tendrán que cruzar nada!
Arriba hay una vista cercana del cableado. Observa cómo la línea de datos a la derecha cruza por encima del riel de alimentación de 5 voltios.
La foto de arriba muestra la placa terminada. Usé pequeñas piezas de plástico como separadores para el UNO y monté el UNO en la placa con un poco de pegamento caliente.
La foto de arriba muestra el triángulo en una carcasa. Esta es una impresión 3D del archivo .stl incluido aquí. También podrías construir una fácilmente con contrachapado.
Software
El software es bastante sencillo gracias a la librería NeoPixel de Adafruit. Nos da setPixelColor(# en la cadena, color) para definir el color de cualquier LED y show() que actualiza toda la pantalla a los últimos cambios. La librería usa un número de 32 bits sin signo para representar el color de un LED, almacenando 8 bits cada uno para la intensidad de rojo, verde y azul. Usé este esquema directamente para el brillo y atenuación de los colores primarios, pero para todo lo demás usé mi propio esquema simple de gestión de color, tomado de mis cubos LED. Es un esquema simple donde los números 1 a 42 representan una paleta de colores arcoíris, añadiendo 0 para Negro (todo apagado) y 43 para Blanco (todo encendido).
Puede que hayas notado en el diagrama de cableado de arriba que los LEDs se numeraban empezando con 0 en la parte superior y los números iban de izquierda a derecha por fila. Este es el sistema de numeración que usé para identificar LEDs. No va de ida y vuelta como la línea de datos, así que creé mi propia versión de setPixelColor que se refiere a LEDs por mi asignación de números y me permite especificar un color usando mi paleta de 0 a 43.
Casi todas las animaciones o efectos que ves en el video están controlados por tablas. Una tabla te dice cómo barrer desde la esquina superior. Otras dos tablas traducen ese efecto a las otras dos esquinas. Otra tabla te dice los LEDs en el triángulo exterior, luego el medio, luego el más interno. Todas estas tablas se almacenan en memoria de programa en lugar de RAM. Inicialmente me preocupaba que todas estas tablas ocuparan demasiado espacio valioso de programa. Pero usar este enfoque de tablas resultó muy eficiente y el espacio de programa nunca fue un problema.
El programa o sketch está dividido en cuatro archivos o pestañas en el Arduino IDE. El primero son declaraciones, tablas y la rutina de configuración. El segundo es el bucle principal que simplemente llama a una lista de las diversas animaciones. El tercero son las animaciones en sí. El cuarto son las funciones de propósito general o subrutinas que soportan todas las animaciones.
En el video de arriba ves el show original con 15 animaciones. Dura unos 3 minutos antes de repetirse. Desde entonces, sin embargo, he expandido el show para incluir una serie de nuevas animaciones que puedes ver en el video de abajo.
Todas las animaciones en el video de arriba se hacen con llamadas a una única subrutina llamada rotation(). El triángulo está compuesto por un triángulo exterior de 24 LEDs, uno medio de 15 LEDs y uno interior de 6 LEDs. El denominador común de estos tres números es 120. Así que en 120 pasos podemos rotar el contenido de todo el triángulo 360 grados. Eso es lo que hace la rutina rotate(). Cambia los patrones iniciales, cambia la dirección de rotación, cambia la velocidad de rotación, y obtienes todos los efectos que ves en el video de arriba.
El show en la descarga ahora incluye el show original, así como todas las animaciones de arriba, produciendo un show con 26 animaciones que dura 5 minutos antes de repetirse.
Código
Código Arduino para Triángulo de Arte (archivo zip con rutina de prueba, show con 26 animaciones e instrucciones para usar la librería NeoPixel)
Piezas personalizadas y cajas
Archivo .stl para una carcasa
Esquemáticos
Diagrama esquemático disponible
Proceso de manufactura
- Walabasquiat: arte generativo interactivo con Walabot, Raspberry Pi y Android
- Dominando el Fresado Horizontal: Impulsa la Eficiencia de Producción
- Bombas Dinámicas vs. Desplazamiento Positivo: Diferencias Fundamentales
- Dominando la trigonometría del triángulo rectángulo: Conceptos y fórmulas clave
- Dominando la trigonometría: Ley de senos y cosenos para cualquier triángulo
- Controladores lógicos programables (PLC): control digital moderno para sistemas industriales
- G.AL® C330 Dynamic: Aleación de aluminio de alta resistencia para aplicaciones de precisión
- G.AL® C210 Dynamic: Placa de aluminio de resistencia media premium con uniformidad superior y bajo estrés
- Asignación dinámica de memoria en C: Dominando malloc, calloc, realloc y free
- Dominando la Memoria Dinámica en C++: Stack vs Heap Explicado
- Explorando FPGAs: Aplicaciones, ventajas y primeros pasos con VHDL