Saltar al contenido

Torres de Iluminación Inteligentes con Arduino

En este post quiero enseñarte cómo he creado mi propia versión de las torres de iluminación inteligentes de Corsair. Si no las conoces, el objetivo es poner una torre LED a cada lado del ordenador y que se enciendan con los mismos colores que hay en la pantalla.

Una vez dicho esto, ¡suscríbete a mi canal de YouTube para más proyectos como este y empecemos!

Tiras LEDs necesarias para las torres de iluminación

Lo primero de todo, ¿cuál es el componente principal de este proyecto? Pues está claro que las tiras LEDs. En concreto tienen que ser el modelo WS2812B, o cualquier otro modelo en el que los LEDs sean independientes, es decir, que cada LED pueda tener un color diferente. Yo he utilizado 35 centímetros de tira LED para cada torre. 

Para que el resultado quede realmente bien, la idea es que las torres sean un poco más altas que el ordenador o monitor que utilices, así que simplemente ten esto en cuenta para cuando cortes la tira LED.

Cómo difuminar las luces LEDs

Lo siguiente que hay que mirar es como vas a hacer para difuminar la luz. Si no pones ningún difusor se van a ver los LEDs y eso queda bastante cutre. Con un difusor se verá mucho mejor.

En principio yo pensaba hacer el difusor con la impresora 3D, que es una buena opción. Simplemente habría que imprimir una tapa fina de color blanco, de unos 0,4 mm de grosor.

Sin embargo, yo tengo resina epoxi en casa porque estoy haciendo otros proyectos que ya verás aquí en la página web o en el canal de YouTube. Utilizando la resina epoxi y colorantes creo que puede quedar un resultado espectacular y que posiblemente se vea mucho mejor.

Estructura de las torres de iluminación inteligentes

En cuanto a la estructura de las torres, que también es muy importante, hay muchas posibilidades. Simplemente escoge la que mejor te venga. Puedes imprimirla en 3D, utilizar algún perfil de aluminio o hacerlo con madera que es lo que voy a hacer yo. 

No he elegido la madera por nada en especial, simplemente la tenía en casa y por eso la utilizo. El único inconveniente que tiene es que hacen falta algunas herramientas para trabajar con ella, como por ejemplo una fresadora.

En las bases he hecho un hueco para poder meter los componentes electrónicos. 

Estructura y montaje

Componentes electrónicos - Arduino

¿Qué componentes electrónicos necesitas? Pues la verdad es que no muchos. Sobre todo el módulo Bluetooth, para que pueda comunicarse el Arduino con el ordenador, y el propio Arduino, que es el modelo Nano y se encarga de controlar los colores de la tira LED.

Recuerda que como son dos torres, necesitas 2 Arduinos y 2 módulos Bluetooth. El modelo del módulo Bluetooth es el HC-05.

¿Realmente hace falta utilizar Bluetooth? Pues la verdad es que no, se podrían conectar las torres al ordenador mediante un cable USB y hacer la comunicación entre el ordenador y los Arduinos utilizando simplemente los puertos serie.

Las dos opciones son buenas y por ello yo voy a desarrollar ambas. Lo bueno de utilizar el módulo Bluetooth es que hace que las torres sean inalámbricas, pero los colores cambian de forma más lenta. Al conectarlas al ordenador, la comunicación es mucho más rápida y por ello los colores se actualizan con mayor velocidad.

Elegir una opción u otra ya depende del gusto de cada uno. La buena noticia es que el código, que veremos más adelante, es prácticamente el mismo para hacer las torres con o sin Bluetooth.

Esquema eléctrico de las torres de iluminación con Arduino

El esquema eléctrico es muy fácil. Por un lado hay que conectar la tira LED, que solo tiene 3 pines, el de tierra, el de alimentación y el de datos. El de tierra tienes que conectarlo tanto a la tierra de Arduino, como a la de la fuente de alimentación.

El pin de alimentación solo a la fuente, y el de datos a un pin digital de Arduino. Para que sea más fácil conectar la tira LED, la he cortado y la he dividido en dos partes, una para la base y otra para la torre. 

Por otro lado está el módulo Bluetooth, si es que lo vas a utilizar. Su conexión también es muy sencilla. GND, como siempre, a GND de Arduino. Vcc al pin de 5 Voltios. RXD a TXD de Arduino Nano, es decir, el pin digital 1, y por último, TXD del módulo Bluetooth, a RXD de Arduino Nano, qué es el pin digital 0.

Toda esta conexión tienes que hacerla para cada torre. Respecto a la fuente de alimentación, yo estoy utilizando una de 5 Voltios y 3 Amperios. Además tienes dos opciones. Utilizar dos, una para cada torre, o solamente utilizar una y derivar los cables a ambas torres. Como yo he decidido hacerlas independientes, voy a aprovechar, y utilizar dos fuentes de alimentación.

Esquema Eléctrico Torres de Iluminación Inteligentes

Código de las torres de iluminación inteligentes

Es necesario desarrollar dos programas, uno que se va a ejecutar en el ordenador y otro para Arduino. El programa que se ejecuta en el ordenador está hecho con Python. Sin embargo, antes de pasar con el código hay que vincular los módulos Bluetooth al ordenador en caso de que los utilices.

Para ello los tienes que tener conectados e ir a las opciones de Bluetooth de tu ordenador. Actívalo y busca dispositivos Bluetooth. Normalmente aparecen con el nombre HC-05. Cuando le des a conectar, es posible que te pida una contraseña. Casi siempre es 1234. Si no te funciona prueba con 0000. Debe ser alguna de estas dos a no ser que la hayas cambiado previamente.

Una vez vinculados, debes ir a «Más opciones Bluetooth» y seleccionar Puertos COM. Ahí te aparecen 4 puertos, 2 para cada módulo. Apunta los nombres en los que pone la palabra «saliente», que son los que utilizaremos para enviarles la información.

Es posible que entender esta parte sea mucho más fácil a partir del vídeo que te he dejado al principio de este post.

Instalación de las librerías

Para hacer el programa con Python de la forma más sencilla posible, vamos a utilizar 4 librerías que tienes que instalar. Abre el terminal (símbolo del sistema) y ejecuta los siguientes comandos:

pip3 install opencv-contrib-python
pip3 install pyserial
pip3 install pyautogui
pip3 install pillow

Si en tu ordenador tienes la versión 2 de Python, en vez de la 3, utiliza pip en lugar de pip3.

Programa desarrollado con Python

El programa hecho con Python, y que se ejecuta en tu ordenador, se encarga de analizar los colores de la pantalla y enviarle esta información a Arduino a través de los puertos serie o Bluetooth.

Lo único que tu tienes que cambiar es el número de LEDs y el nombre de los puertos, independientemente de si son los de los módulos Bluetooth o tienes los Arduinos directamente conectados al ordenador. También debes cambiar la velocidad de transmisión de datos y poner la que tu estés utilizando.

No se por qué pero al intentar poner el código de Python en la página me daba un error, así que te dejo un enlace aquí: Código y esquema eléctrico de las torres de iluminación.

Código de Arduino

Arduino lo único que hace es recibir la información enviada por el ordenador y encender las tiras LEDs de acuerdo a ello. Simplemente tienes que cambiar ciertas variables de acuerdo a tus torres. El número de LEDs de la base y la torre, los pines digitales que estás utilizando para controlar las tiras LEDs (DATA_PIN_BASE y DATA_PIN_TORRE) y la velocidad de transmisión en la función Serial.begin(), que tiene que coincidir con la que hayas puesto en el programa de Python.

Ten en cuenta que para poder subir el código a Arduino si estás utilizando los módulos Bluetooth tienes que desconectarlos. 

#include <FastLED.h>

#define NUM_LEDS_BASE 14
#define NUM_LEDS_TORRE 21
#define DATA_PIN_BASE 7   
#define DATA_PIN_TORRE 6
#define LED_TYPE WS2812B
#define COLOR_ORDER GRB
#define MAX_BRIGHTNESS 200


byte R[NUM_LEDS_TORRE];
byte G[NUM_LEDS_TORRE];
byte B[NUM_LEDS_TORRE];
char recv[1];


CRGB leds_base[NUM_LEDS_BASE];
CRGB leds_torre[NUM_LEDS_TORRE];


void setup() {
  // put your setup code here, to run once:
  Serial.begin(500000);
  //Serial.setTimeout(5);
  //G[0] = 255;
  FastLED.addLeds<LED_TYPE, DATA_PIN_BASE, COLOR_ORDER>(leds_base, NUM_LEDS_BASE);
  FastLED.addLeds<LED_TYPE, DATA_PIN_TORRE, COLOR_ORDER>(leds_torre, NUM_LEDS_TORRE);
  FastLED.setBrightness(MAX_BRIGHTNESS);


  for(int dot = 0; dot < NUM_LEDS_TORRE; dot++) { 
      leds_torre[dot].setRGB(255,0,0);
      FastLED.show();
      delay(10);
  }

}

void loop() {
  // put your main code here, to run repeatedly:
  if(Serial.available()>0){
    //Serial.readBytes(recv, 1);
    if(Serial.read()== 'w'){
      for(int i = NUM_LEDS_TORRE - 1; i>=0; i--){
        
        while(!Serial.available());
        String r = Serial.readStringUntil('a');
        //r.remove(r.length()-2);
        int R = r.toInt();
        
        while(!Serial.available());
        String g = Serial.readStringUntil('a');
        //g.remove(g.length()-2);
        int G = g.toInt();
        
        while(!Serial.available());
        String b = Serial.readStringUntil('a');
        //b.remove(b.length()-2);
        int B = b.toInt();
        
        leds_torre[i].r = R;
        leds_torre[i].g = G;
        leds_torre[i].b = B;
        
        //FastLED.show();
        
      }
      //FastLED.show();
      
      for(int i = NUM_LEDS_BASE - 1; i>=0; i--){
        
        while(!Serial.available());
        String r = Serial.readStringUntil('a');
        //r.remove(r.length()-2);
        int R = r.toInt();
        
        while(!Serial.available());
        String g = Serial.readStringUntil('a');
        //g.remove(g.length()-2);
        int G = g.toInt();
        
        while(!Serial.available());
        String b = Serial.readStringUntil('a');
        //b.remove(b.length()-2);
        int B = b.toInt();
        
        leds_base[i].r = R;
        leds_base[i].g = G;
        leds_base[i].b = B;
        
        //FastLED.show();
        
      }
      FastLED.show();
    }   
  }
}

Precio de las torres de iluminación con Arduino

Si te estás preguntando qué cuánto ha costado montar estas torres, más o menos han salido las dos por unos 40, 50 euros, es decir, 20 25 euros por torre. Como puedes ver son mucho más baratas que las de Corsair, que cuestan entorno a los 180 euros en PcComponentes.

Es evidente que las que torres de iluminación inteligentes que hemos hecho con Arduino son mucho más baratas. Sin embargo, para ser justos, también hay que decir que el software de ellos está más depurado, ofrecen una interfaz gráfica y la estructura de la torre es de mejor material.

Resultado Final

Creo que el resultado final es genial. Siempre se pueden mejorar cosas pero estoy muy contento con el resultado. En el vídeo se puede ver mejor como ha quedado el proyecto, pero aquí te dejo una imagen.

Resultado final del proyecto con Arduino