Si eres fan de Star Wars esto te va a encantar, vamos a integrar un Sable Láser en Home Assistant para usarlo como lámpara.
🥑 Si estás empezando con ESPHome, te recomiendo que veas el taller de la academia para sacarle el máximo partido!
Índice
¿Qué es un Sable Láser?
Tanto si eres un ‘friki’ de Star Wars, como si no has visto las películas jamás, estoy seguro de que ya sabes lo que es un Sable Láser. Son las míticas armas de los Jedi y los Sith, un objeto icónico en la cultura pop que todos hemos soñado con tener alguna vez.
Nuestro Sable Láser
Sé que si eres fan de Star Wars lo estabas esperando. Aunque hay una cantidad ingente de juguetes y objetos basados en este arma, lo que hace especial al nuestro es que lo he diseñado pensando específicamente en integrar un Sable Láser en Home Assistant.
Vas a poder usar nuestro Sable Láser de esta forma:
- Es genial como lámpara de escritorio, ya que incorpora un botón para que puedas encenderla y apagarla con una simple pulsación.
- Como está integrada en Home Assistant, también puedes encenderla con tu asistente de voz, desde tu panel de control o como parte de tus automatizaciones.
- Como no deja de ser una tira LED, puedes utilizarlo como sistema de notificaciones luminosas (por ejemplo, para que se encienda en color rojo cuando acabe la lavadora).
Quiero uno!!
Si ya estás impaciente por integrar un Sable Láser en Home Assistant, empezaré por decirte cómo conseguirlo:
- Constrúyelo tú mismo. Si tienes al alcance una impresora 3D puedes descargar nuestro modelo y hacerlo tú mismo. Recuerda que si eres Patreon de aguacatec tienes acceso ilimitado a todos nuestros modelos 3D, entre otras ventajas. Ten en cuenta lo siguiente a la hora de imprimir el modelo:
- Te recomiendo encarecidamente que utilices filamento blanco para imprimir la pieza que hace de difusor. Esto hará que consigas el equilibrio perfecto entre luminosidad y que no se vean los LEDs.
- Si quieres, utiliza un ‘spray’ de pintura color plata sobre el mango (aunque puedes personalizarlo como quieras).
- Consíguelo con aguacoins. Si ya tienes unos cuantos aguacoins en tu monedero, puedes recibirlo en casa listo para ser montado por 3 aguacoins.
Componentes del Sable Láser
Antes de integrar un Sable Láser en Home Assistant, repasemos los componentes necesarios:
- Primero y más importante, la estructura de nuestro Sable Láser.
- Haber instalado ESPHome en Home Assistant.
- Una placa ESP8266, que por su pequeño tamaño va a ser perfecto para alojarla en el interior del mango.
- Una tira LED direccionable de alta densidad. Te recomiendo que elijas el modelo WS2812B DC5V, White PCB, 1m 144 IP30.
- Un botón. Este nos servirá para encender y apagar el Sable Láser rápidamente.
- Un cable USB-C para alimentar la placa de DATOS (con un cable de carga no vas a poder instalar el software).
Configuración en ESPHome
Para integrar un Sable Láser en Home Assistant vamos a empezar por instalar o ‘flashear’ el firmware en la placa. De esta forma podrás ir comprobando que todo funciona bien a medida que vas montando el dispositivo. Para ello sigue estos pasos:
- Conecta la placa a tu ordenador a través del puerto USB-C.
- En Home Assistant, accede al complemento de ESPHome desde el menú lateral y pulsa en “New device”. Pulsa en “Continue” y dale un nombre (por ejemplo, “Sable laser”).
- Pulsa en “Next” y a continuación selecciona la opción “ESP8266” como tipo de dispositivo. Verás que en el fondo se ha creado un nuevo dispositivo.
- Pulsa en “Skip” y haz clic en el enlace “Edit” del bloque correspondiente al dispositivo que acabas de crear.
- Añade las siguientes líneas al final del código.
captive_portal: light: - platform: neopixelbus type: GRB variant: ws2812x pin: GPIO2 num_leds: 89 name: "Sable laser" id: laser effects: - addressable_lambda: name: "Fade in" update_interval: 1ms lambda: |- static int x = 0; if (initial_run) { x = 0; it.all() = ESPColor(0, 0, 0); } if (x < it.size()) { it[x] = current_color; x += 1; } - addressable_lambda: name: "Fade out" update_interval: 1ms lambda: |- static int x = 0; if (initial_run) { x = it.size(); } if (x > 0) { x -= 1; it[x] = ESPColor(0, 0, 0); } - pulse: - addressable_rainbow: - addressable_lambda: name: "Fire" update_interval: 15ms lambda: |- int Cooling = 55; int Sparking = 110; static byte heat[82]; int cooldown; // Step 1. Cool down every cell a little for( int i = 0; i < it.size(); i++) { cooldown = random(0, ((Cooling * 10) / it.size()) + 2); if(cooldown>heat[i]) { heat[i]=0; } else { heat[i]=heat[i]-cooldown; } } // Step 2. Heat from each cell drifts 'up' and diffuses a little for( int k= it.size() - 1; k >= 2; k--) { heat[k] = (heat[k - 1] + heat[k - 2] + heat[k - 2]) / 3; } // Step 3. Randomly ignite new 'sparks' near the bottom if( random(255) < Sparking ) { int y = random(7); heat[y] = heat[y] + random(160,255); } // Step 4. Convert heat to LED colors for( int Pixel = 0; Pixel < it.size(); Pixel++) { // Scale 'heat' down from 0-255 to 0-191 byte t192 = round((heat[Pixel]/255.0)*191); // calculate ramp up from byte heatramp = t192 & 0x3F; // 0..63 heatramp <<= 2; // scale up to 0..252 // figure out which third of the spectrum we're in: //this is where you can reverse the effect by switching the commented out lines in all 3 places. if( t192 > 0x80) { // hottest //it[it.size() - Pixel - 1] = ESPColor(255, 255, heatramp); it[Pixel] = ESPColor(255, 255, heatramp); } else if( t192 > 0x40 ) { // middle //it[it.size() - Pixel - 1] = ESPColor(255, heatramp, 0); it[Pixel] = ESPColor(255, heatramp, 0); } else { // coolest //it[it.size() - Pixel - 1] = ESPColor(heatramp, 0, 0); it[Pixel] = ESPColor(heatramp, 0, 0); } } binary_sensor: - platform: gpio name: Power internal: true pin: number: GPIO16 mode: input_pulldown on_click: min_length: 50ms max_length: 350ms then: - if: condition: light.is_off: laser then: - light.turn_on: id: laser effect: "Fade in" - delay: 1000ms - light.turn_on: id: laser effect: None else: - light.turn_on: id: laser effect: "Fade out" - delay: 1000ms - light.turn_on: id: laser effect: None - light.turn_off: laser
- Cuando hayas terminado de editar el código pulsa en “Save” e “Install”. Selecciona la opción “Manual download” y espera a que el código se compile.
- Cuando termine, selecciona la opción “Modern format” para descargar el fichero ‘.bin’ correspondiente.
- Ahora ve a la página de ESPHome y pulsa en “Connect”. En la ventana emergente selecciona tu placa y pulsa en “Conectar”.
- Ahora pulsa en “Install” y selecciona el fichero ‘.bin’ obtenido en el paso 7. De nuevo, pulsa en “Install”.
- Vuelve a Home Assistant y ve a Ajustes > Dispositivos y servicios. Lo normal es que tu dispositivo haya sido descubierto y aparezca en la parte superior, esperando únicamente a que pulses el botón de “Configurar”. De lo contrario pulsa en el botón de “Añadir integración”, busca “ESPHome” e introduce la IP de tu placa en el campo ‘Host’.
Montaje del Sable Láser
Conexión del botón
Como siempre lo primero que te recomiendo es que consultes el ‘pinout’ (o distribución de pines) de la placa. En este caso, usaremos la ESP8266 (WeMos D1 Mini) cuyo ‘pinout’ es el siguiente.
Empezaremos por soldar directamente el botón a nuestra placa, con el siguiente esquema de conexión.
- Conecta una de las patillas del botón (por cualquiera de sus extremos) al pin 3V3 de la placa para suministrar la alimentación.
- Conecta la otra patilla del botón (por el mismo extremo que has utilizado anteriormente) al pin D0 /GPIO16, que va a leer el estado del botón.
- Utiliza cables lo más cortos posible, para que no ocupen espacio y puedas adherir el botón a la placa cómodamente.
- Levanta hacia arriba las patillas que vayas a usar, para que puedas apoyar el botón sobre la propia placa. Corta las patillas del extremo contrario, ya que no las vamos a utilizar.
- PRESTA ATENCIÓN al lado sobre el que realizas las soldaduras y pegas el botón, ya que la disposición de los componentes va a ser importante para poder colocar con holgura los componentes dentro del mango del Sable Láser.
- Utiliza una pistola de silicona para adherir el botón a la placa (sin pasarte con el pegamento), de forma que puedas hacer una pulsación sólida sobre el botón sin que se mueva.
Al final debería quedarte así:
💡 Si quieres comprobar que funciona correctamente, conecta tu placa por el puerto USB-C. En Home Assistant, entra en el complemento de ESPHome y localiza el bloque de tu Sable Láser. Pulsa en "LOGS" para abrir la consola y selecciona la opción "Wirelessly". Ahora pulsa el botón que acabas de instalar. Si todo ha ido bien deberías ver unas líneas de color azul informando de su pulsación.
Conexión de la tira LED
El siguiente paso es conectar la tira LED a la placa, por el lado contrario al que has conectado el botón.
Estas tiras suelen venir con un cable que en un extremo tiene un conector «macho» en un extremo, y la propia tira LED con un conector «hembra» en el extermo. No obstante, vamos a necesitar economizar el espacio, por lo que únicamente vamos a utilizar la tira LED. Por tanto tendrás que cortar los cables, dejando unos 7 cm (yo me quedé corto y después me tocó empalmar cables) para soldarlo a la placa de la siguiente forma:
- El cable rojo proporciona la alimentación a 5 voltios, por lo que irá al pin correspondiente (5V)
- El cable blanco es el de la conexión de tierra o ‘ground’, e irá conectado a uno de los respectivos pines (GND)
- El cable verde proporciona los datos e irá conectado al al D4/GPIO2
- Es posible que también encuentres otros dos cables (rojo y blanco). Córtalos, ya que no los vamos a utilizar.
Al final debería quedarte así:
💡 Si quieres comprobar que funciona correctamente, conecta tu placa por el puerto USB-C. Pulsa el botón y comprueba que la tira se enciende. Es muy posible que no se encienda por complpeto, porque en el código hemos limitado el número de LEDs. No te preocupes todavía de eso.
Montaje del Sable Láser
Ya tenemos los componentes electrónicos, ahora vamos a preparar el Sable Láser. Para ello te recomiendo que sigas estos pasos:
- Si vas a pintar el mango, es el momento. En mi caso le he dado una ligera capa de ‘spray’ de color plateado.
- Cuando se seque, introduce el cable USB-C por el hueco inferior y sácalo por el extremo superior, para facilitar el montaje posterior.
- Ahora tienes que enrollar la tira LED al palo alargado, desde su base hasta el extremo (corta el sobrante de tira LED). Te recomiendo que apliques un poco de silicona tanto en la base como en el extremo superior para fijar la tira. Aunque estas vienen con un adhesivo, el calor de los LED puede calentar el pegamento y despegarlas.
- Aprovecha este momento para editar en el código de LEDs de tu sable. Esto dependerá de la tira que hayas usado y cómo lo hayas enrollado. Si te sirve de orientación, en mi caso han sido 89 LEDs. Puedes editarlo en las siguientes líneas del código.
light: - platform: neopixelbus type: GRB variant: ws2812x pin: GPIO2 num_leds: 89 <---- Indica aquí cuántos LEDs tiene tu tira
- Conecta el cable USB-C a la placa y aloja el botón en el hueco correspondiente. Comprueba que lo colocas en una posición en la que puedes pulsar el botón de una forma efectiva desde fuera.
- En esta posición, utiliza de nuevo la pistola de silicona para fijar la placa desde el interior. La intención es que esta quede firme, mientras que el botón quede liberado (para que puedas pulsarlo con normalidad). Si te pasas con la silicona (como me ha pasado a mí) y más tarde te molesta para alojar el palo con la tira LED, puedes retirar el exceso con un ‘cutter’ o calentando un poco la silicona con la punta de la pistola.
- Encaja el palo en la parte superior del mango y comprueba que puedes seguir pulsando el botón (o ajusta la posición de los componentes). Cuando todo esté en su sitio, coloca el mango en la base para darle más estabilidad.
- Por último, coloca el difusor cubriendo los LED.
💡 ¿Te has fijado en que he puesto un poco de cinta aislante tapando la endidura por la que pasan los cables? Esto es porque la placa ESP8266 tiene un pequeño LED azul que, en este caso, no podemos apagar. De esta forma lo he tapado para que no se aprecie cuando la lámpara está apagada. No obstante, esto es opcional.
¿Dudas?¿necesitas ayuda? entra aquí
Y si te ha gustado, compártelo! 🙂