Sensor 3D Inteligente: Control de Lámpara por Voz para Amazon Echo
Componentes y materiales
| Amazon Alexa / Amazon Echo | × | 1 |
| Walabot Creator | × | 1 |
| Arduino Leonardo | × | 1 |
| Relé (genérico) | × | 2 |
| LattePanda 2G/32GB (Activado) | × | 1 |
| Pantalla LattePanda 7 pulgadas 1024x600 IPS | × | 1 |
| Lámpara | × | 2 |
Sobre el proyecto
Introducción
Si has tenido un Alexa o cualquier altavoz inteligente con integración de hogar inteligente, habrás experimentado el problema de tener que recordar el nombre de cada dispositivo para controlarlo. Tengo muchos dispositivos inteligentes y a veces recordar los nombres de cada uno es complicado.
A veces decía:
Ocurre una de tres cosas:
- Termino confundiendo a Alexa, encendiendo un dispositivo distinto.
- Maldiciendo a Alexa (sabes de lo que hablo, admítelo).
- O rendirme, frustrado, y decirle: "Olvídalo Alexa, lo hago yo mismo"... caminando a regañadientes hacia el interruptor.
A mis hijos les encanta este comando: "Alexa, enciende TODAS las luces". Y por supuesto, toda la casa se ilumina como un árbol de Navidad. ¡No es divertido cuando alguien hace eso a mitad de la noche!
¿Cómo hacerlo?
¿Y si pudiera decir simplemente: "Alexa, enciende esta lámpara"?
Que Alexa detecte dónde estoy en proximidad al dispositivo. Y sepa de qué hablo... ¿no sería una gran idea?
Bueno, una posible solución es montar una cámara en mi habitación y monitorizar movimientos. Pero eso sería DEMASIADO INVASIVO. No quiero cámaras dentro de mi casa haciendo reconocimiento de imagen.
Ahí es donde entra Walabot:
Walabot
¿Qué es un Walabot?
Walabot es un sensor 3D programable perfecto para proyectos DIY de electrónica. Es un nuevo tipo de sensor de imagen 3D. Usa radiofrecuencia (RF) y revela todo tipo de cosas ocultas en el mundo que te rodea. Es portátil, programable y nuestro SDK (kit de desarrollo de software) contiene una variedad de capacidades de imagen y nuestra API te permite construir tus propias aplicaciones personalizadas.
Puede rastrear movimientos usando RF.
LattePanda
LattePanda es un SBC x86/x64 con un procesador quad-core Intel Atom x8300 "Cherrytrail" que puede ejecutar Windows 10. Incluye 2GB o 4GB de RAM con Bluetooth 4.0 y WiFi 802.11n integrados, 1x USB 3.0, 2x USB 2.0, salida HDMI y un co-procesador ATMega32u4 integrado – como el que encontrarías en un Arduino Leonardo – con GPIO acompañante, ¡todo en una placa del tamaño de la palma de la mano!
Esta configuración hace a LattePanda ideal para varios escenarios. En este tutorial nos centraremos en las ventajas del microcontrolador integrado de LattePanda. Cuando este microcontrolador se usa junto con el procesador Intel Atom, puedes conectar el Walabot y el Arduino juntos.
Node-RED
Node-RED es una herramienta basada en navegador para construir rápidamente y fácilmente tu propia lógica de manejo de diversos dispositivos IoT, incluyendo suscripción a mensajes TCP, escucha de peticiones de Alexa, lectura/escritura en bases de datos, publicación en brokers MQTT y respuesta a peticiones HTTP. También permite definir funciones específicas en JavaScript para operaciones lógicas complejas, usando una interfaz visual drag-and-drop para vincular componentes y lógica.
Node-RED es un runtime muy ligero construido sobre Node.js, aprovechando su modelo de operación event-driven, no bloqueante.
Si podemos conectar datos de Walabot a Node-RED, se abren muchas posibilidades, especialmente en automatización del hogar. Hay algunos paquetes que usé para conectar Alexa y Arduino:
node-red-contrib-alexa-local: un nodo muy simple para añadir capacidad Alexa a tu flujo Node-RED.
node-red-node-arduino: Un nodo Node-RED para hablar con un Arduino.
Aquí tienes documentación para configurar Firmata: https://nodered.org/docs/hardware/arduino.html
Cómo funciona
Hardware
- LattePanda
- Pantalla 7" 1024x600 IPS para LattePanda
- Teclado y ratón inalámbricos USB
- Walabot
- Hub USB alimentado
- Relés
- Lámparas
Instalación
Paso 1. SDK de Walabot
Descarga el SDK e instálalo: https://walabot.com/getting-started
Paso 2. Configurar Arduino en Walabot
https://docs.lattepanda.com/content/hardware/accessPinoutsFromVS/
- Activa el modo desarrollador en tu sistema operativo.
Paso 3. Configurar el Arduino
- Abre Arduino y selecciona "StandardFirmata".
- Selecciona "Arduino Leonardo".
- Selecciona tu puerto COM.
- Sube el sketch.
- ¡Subida completada!
Conecta los relés al LattePanda.
Paso 4. Instalar y descargar NodeJS y Node-RED
Si no estás familiarizado con NodeJS y Node-RED, aquí tienes enlaces:
- https://nodejs.org/en/
- https://docs.lattepanda.com/content/projects/NodeRED/
- https://nodered.org/docs/getting-started/installation
Paso 5. Descargar Python3 e instalar
Paso 6. Repositorio del proyecto
https://github.com/rondagdag/smart3DSensorForAlexa
Descarga y extrae el zip:
> npm install
> npm start
Paso 7. Configuración final
Asegúrate de estar en la misma WiFi y haber activado las Skills de Hogar Inteligente en tu app Alexa. Di: "Alexa, descubre dispositivos". Alexa encontrará la Lámpara. Si quieres ver los flujos de Node-RED y modificarlos: https://localhost:8080/red/
Ahora puedes conectar a diferentes pines de Arduino en LattePanda. O conectar con MQTT u otros módulos de Node-RED.
El flujo completo se ve así...
3 Pasos:
- Manejar Servicio Walabot: un programa Python que lee datos del sensor Walabot y transmite datos a un puerto TCP 1890.
- Obtener y guardar datos de objeto Walabot: lee datos del servicio Walabot vía puerto 1890 y almacena la última ubicación conocida del objeto detectado.
- Manejar Comandos Alexa: se ejecuta cuando se recibe un comando de Alexa, y basándose en la última posición conocida, determina el pin de Arduino a conmutar conectado a un relé.
Manejar Servicio Walabot
Aquí está el código Python de Walabot. Lee datos de Walabot y transmite un string JSON vía TCP.
from __future__ import print_function
from sys import platform
from os import system
from imp import load_source
WalabotAPI = load_source('WalabotAPI', 'C:\\Program Files\\Walabot\\WalabotSDK\\python\\WalabotAPI.py')
import socket, sys
if __name__ == '__main__':
WalabotAPI.Init()
WalabotAPI.SetSettingsFolder()
WalabotAPI.ConnectAny()
WalabotAPI.SetProfile(WalabotAPI.PROF_SENSOR)
WalabotAPI.SetThreshold(35)
WalabotAPI.SetArenaR(50, 400, 4)
WalabotAPI.SetArenaPhi(-45, 45, 2)
WalabotAPI.SetArenaTheta(-20, 20, 10)
WalabotAPI.SetDynamicImageFilter(WalabotAPI.FILTER_TYPE_MTI)
WalabotAPI.Start()
system('cls' if platform == 'win32' else 'clear')
numOfTargetsToDisplay = 1
if len(sys.argv) == 2:
TCP_IP = '127.0.0.1'
TCP_PORT = int(sys.argv[1])
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((TCP_IP, TCP_PORT))
s.listen(1)
conn, addr = s.accept()
while True:
WalabotAPI.Trigger()
targets = WalabotAPI.GetSensorTargets()
finds = '{"targets": ['
index = 0
for i, t in enumerate(targets):
if i < numOfTargetsToDisplay:
index += 1
print('Target {}\nx = {}\ny = {}\nz = {}\n'.format(i+1, t.xPosCm, t.yPosCm, t.zPosCm))
finds += '{"x": "%s", "y": "%s", "z": "%s"}' % (t.xPosCm, t.yPosCm, t.zPosCm)
# if index < len(targets):
# finds += ','
finds += ']}'
conn.sendall(str.encode(finds))
conn.close()
WalabotAPI.Stop()
WalabotAPI.Disconnect()
Obtener y guardar datos de objeto Walabot
Esto recibirá datos del puerto 1890, parseará el JSON para establecer variables globales.
Código para convertir a array JSON
raw = msg.payload.toString('UTF-8')
j = JSON.parse(raw);
var msg1 = { payload: raw };
var msg2 = { payload: j };
if (raw.length > 20) {
X = msg2.payload.targets[0].x;
Y = msg2.payload.targets[0].y;
Z = msg2.payload.targets[0].z;
global.set("X", X);
global.set("Y", Y);
global.set("Z", Z);
var msg3 = { payload: X };
var msg4 = { payload: Y };
var msg5 = { payload: Z };
}
return [ msg1, msg2, msg3, msg4, msg5];
Manejar Comandos Alexa
Para manejar comandos Alexa, usamos node-red-contrib-alexa-local. Luego detectamos con esta lógica a cuál rutear el comando basándonos en la última posición conocida de la persona.
Si este proyecto te ha interesado para aprender más sobre Amazon Echo, Walabot, LattePanda, Node-RED, Python, o simplemente estás teniendo un día genial, haz clic en 'Respect project' y sígueme. Si te ayudó a construir un proyecto, deja un mensaje y danos feedback. Quiero saber cómo te ayudó este proyecto.
Nota que no se usa ninguna Skill personalizada de Alexa real para este proyecto; usa la funcionalidad integrada de Smart Home de Amazon Echo que controla de fábrica bombillas Philips Hue. El nodo node-red-contrib-alexa-local en Node-RED simplemente simula cualquier "Bombilla" personalizada que quieras controlar con Alexa.
Código
Smart 3D Sensor for Alexa
https://github.com/rondagdag/smart3DSensorForAlexa
Proceso de manufactura
- Sensor de movimiento SmartThings con visión artificial en Raspberry Pi 3
- Construya un Sensor de Movimiento Infrarrojo DIY para Raspberry Pi – Guía Paso a Paso
- Papelera Inteligente: Solución IoT Celular para Gestión Automatizada de Residuos
- Controla tu Chromecast con Amazon Alexa usando Raspberry Pi y Python
- Semáforo Inteligente: Iluminación Vial Adaptativa con IoT
- Construye un Robot Evitaobstáculos con Raspberry Pi: Guía para Principiantes
- Smart Pen: Seguimiento de Escritura y Movimiento en Tiempo Real con Raspberry Pi e IMU
- Sensor de Deformación Ultra-Sensible y Duradero Revoluciona Textiles Inteligentes
- Sensor Ultra-Fino Revolucionario Mejora la Funcionalidad de Lentes de Contacto Inteligentes
- Película de Sensor TOMOPLEX Avanzada para Monitoreo Aeroespacial en Tiempo Real
- Ropa con calefacción: La principal innovación en textiles inteligentes, revelan expertos