Crear Animaciones LED Web con Raspberry Pi y Arduino
Componentes y suministros
| Raspberry Pi 3 Modelo B | × | 1 |
| Arduino UNO (también sirve Nano; Mega para más píxeles) | × | 1 |
| Tira NeoPixel (WS2812) | × | 1 |
Aplicaciones y servicios online
- Arduino IDE
Sobre el proyecto
Visión General del Proyecto
Arduino Light Animation (ALA) es una librería Arduino para controlar LEDs y ejecutar animaciones coloridas con mínimo esfuerzo. Ofrece más de 30 animaciones predefinidas y varias paletas de colores. Para más info sobre ALA visita mi blog.
Este proyecto introduce una Raspberry Pi 3 que provee una página web para controlar animaciones, colores y velocidad desde smartphone o PC vía navegador. Aquí un video corto de AlaWeb en acción.
Componentes necesarios:
- Tira LED RGB WS2812: Contiene varios LEDs RGB direccionables individualmente por interfaz de un hilo, permitiendo control total del color de cada LED.
- Arduino: El famoso microcontrolador ejecutará mi librería ALA para pilotar la tira LED recibiendo comandos de la Raspberry Pi por puerto serie USB. Sirve Uno, Nano y Mega.
- Raspberry Pi: Este pequeño PC provee la página web para controlar parámetros de iluminación y animación.
El proyecto es bastante simple si conoces Arduino y Raspberry Pi. Lo he dividido en dos pasos para guiarte en la configuración.
Cableado
Las tiras WS2812 son muy fáciles de conectar. Solo necesitas suficiente potencia para alimentar todos los LEDs. Para tiras muy cortas (máx. 10 LEDs) puedes alimentarlas directo del puerto USB, pero para tiras más largas necesitas buena fuente de alimentación. Como punto de partida sugiero usar el pin 5V del Arduino para alimentar la tira como se ve en el video.
- GND Arduino → GND WS2812
- 5V Arduino → 5V WS2812
- Pin 6 Arduino → Ctrl/Din WS2812
Si quieres pilotar más píxeles necesitas más potencia. El cálculo es fácil: cada LED RGB consume 60mA a blanco máximo. Ejemplo: para tira de 2m con 60 LED/m necesitas fuente 5V de 2m × 60px/m × 60mA = 7,2A.
Conecta tu fuente, Arduino y tira WS2812 así:
- GND fuente → GND Arduino y GND WS2812
- 5V fuente → Pin 5V Arduino y 5V WS2812
- Pin 6 Arduino → CTRL WS2812
Nota: alimentando el pin 5V del Arduino le das energía al Arduino, así que no necesitas segunda fuente en el conector jack. ¡Ten mucho cuidado con este esquema porque el pin 5V bypassa el regulador y protecciones! Para más detalles lee esta guía.
Para más detalles sobre cableado de tiras WS2812 lee esta guía.
Configuración Arduino
Conecta tu Arduino al USB del PC. Abre Arduino IDE y el Gestor de Librerías (Sketch > Incluir Librería > Gestionar Librerías) para instalar la última librería ALA.
Abre el ejemplo RgbStripSerial (Archivo > Ejemplos > ALA > RgbStripSerial) y verifica que la constante NUM_PIXELS coincida con el número de LEDs de tu tira. Recuerda que para más de 10 píxeles debes usar el esquema de conexión mejorado.
Sube el sketch pulsando Ctrl+U o Sketch > Subir. Si hay problemas, verifica tipo de placa y puerto en Herramientas.
Abre el Monitor Serie (Herramientas > Monitor Serie) y verás un mensaje de bienvenida como este:
Configura «Newline» en finales de línea (abajo a derecha) y asegura baud rate 9600.
Prueba estos comandos (en negrita) sin espacios:
- A=101 - enciende los LEDs
- A=251 - ejecuta animación «larson scanner»
- P=2 - establece paleta arcoíris
- A=242 - otra animación
¡Guay, verdad?
Experimenta con comandos y combinaciones según esta referencia:
- A=[código animación] - Establece animación. Códigos disponibles en
AlaLed.h. - B=[brillo] - Brillo en rango [0-100].
- D=[duración] - Duración en ms del ciclo de animación. Valores típicos 500-5000.
- C=[color] - Color en hex RGB como E8A240.
- P=[paleta] - Paleta en rango [0-5].
Ahora controlemos las animaciones desde tu smartphone.
Configuración Raspberry Pi
En esta parte configuraremos la Raspberry Pi para ejecutar un pequeño servidor web que controle la tira LED desde navegador. La misma app puede correr en cualquier PC con Python 3.
Requisito: Raspberry Pi ya configurada y corriendo último Raspbian OS (probado con Stretch) y conectada a Internet.
Primero instala librerías para Python 3:
sudo pip3 install pyserial flask
Crea directorio home para tu proyecto:
mkdir /home/pi/AlaWeb
cd /home/pi/AlaWeb
Descarga repositorio AlaWeb en directorio LightStrip y descomprime:
wget https://github.com/bportaluri/AlaWeb/archive/master.zip
unzip master.zip
Todo el software listo. Conecta puerto USB Arduino a Raspberry Pi. La app AlaWeb descargada se comunicará con Arduino por conexión serie USB.
cd AlaWeb-master
sudo python3 AlaWeb.py
La app listará puertos serie USB e intentará detectar Arduino automáticamente. Si buclea, interrumpe e intenta pasando el nombre del puerto:
sudo python3 AlaWeb.py /dev/ttyACM0
Si todo va bien verás algo así:
Abre navegador y ve a la URL mostrada. Obtendrás una página web llena de botones para controlar la tira LED desde el navegador.
¡Disfruta!
Código
AlaWeb
Pequeño servidor web en Python y Flask para controlar animaciones desde navegador.
https://github.com/bportaluri/AlaWeb
ALA
Arduino Light Animation (ALA) es librería para placas Arduino que simplifica desarrollo de animaciones lumínicas con LEDs y tiras LED. Más detalles: https://yaab-arduino.blogspot.it/p/ala.html
https://github.com/bportaluri/ALA
Esquemáticos
Proceso de manufactura
- Construya un Sistema Rápido y Fiable de Detección de Incendios con Samsung SAMIIO, Arduino UNO y Raspberry Pi
- Construye un sistema aeropónico automatizado con Raspberry Pi y sensor de humedad
- Construya un robot con Raspberry Pi y Python: Guía completa
- Construya un robot con streaming de vídeo controlado por Internet con Arduino y Raspberry Pi
- gatoBot: Robot Web‑Controlado con Raspberry Pi Zero W y Streaming de Video en Vivo
- Panel de control para Flight Simulator 2020 con Arduino Nano: Pantallas LCD y CDI
- Panel de interruptores y LEDs para Microsoft Flight Simulator 2020 con Arduino
- Controla un LED por Bluetooth con Arduino – Guía DIY paso a paso
- Construye un Robot Cuadrúpedo Inteligente con Arduino: Guía Paso a Paso
- Control Preciso de Servo con Arduino y MPU6050 (SG90 / MG996R)
- Control de brillo LED sin interrupciones con Bolt IoT y Arduino UNO