Cómo controlar las luces de tono philips de un arduino (y añadir un sensor de movimiento)
La gama Philips Hue de luz no son ciertamente barato (hay algunas alternativas), Pero una cosa que realmente aprecio es la bien documentada API para hacer sus propias aplicaciones Hue. Hoy voy a estar mostrando cómo controlar su luz Hue desde un Arduino - a continuación, añadir un sensor de movimiento simple.Philips Hue alternativas que son en realidad vale la penaPhilips Hue alternativas que son en realidad vale la penaEl sistema Philips Hue está liderando la carga cuando se trata de la iluminación inteligente, pero hay algunas alternativas dignas. Hemos escogido tres que todos ofrecen el mismo conjunto de características básicas y hackability.Lee mas
¿Por qué estamos haciendo esto? Dado que los sistemas de automatización del hogar pueden ser muy rígido y caro. Al aprender cómo controlar la tonalidad de Arduino, que abre las puertas a una variedad de proyectos de automatización del hogar a medida que simplemente no pueden ser golpeados por los componentes off-the-shelf. Si la piratería cosas juntos simplemente no es lo tuyo, prueba estos 8 aplicaciones Hue fabulosos en lugar.
El Sistema de Hue
Vamos a conseguir técnica para un poco para saber los sistemas subyacentes que está trabajando. luces crean un matiz red de malla, utilizando un protocolo inalámbrico de corto alcance llamado ZigBee - específicamente, son certificados ZigBee Light Link, lo que significa que otros productos ZLL también deben trabajar al lado de la tonalidad (en teoría).Las redes de malla: El futuro de la comunicaciónLas redes de malla: El futuro de la comunicaciónredes de malla son casi invulnerable. En una red de malla, no hay puntos de estrangulación a través de los cuales pasa todo el tráfico. En su lugar, la información se pasa de un dispositivo a otro hasta que llegue a su destino.Lee mas
Aunque gama técnicamente corto, la función de red de malla de ZigBee significa que cada nueva bombilla se extiende la red, la transmisión de mensajes a otros bulbos. Esto significa que si usted está teniendo problemas para controlar una luz al otro lado de la casa, trate de colocar otra luz entre los dos.
ZigBee es un gran protocolo, pero es muy diferente a Wi-Fi o una red informática con cable, por lo que necesitamos el puente de Hue Philips para unirse a los dos juntos. El puente Hue se ejecuta un firmware de código abierto Linux modificado, que emite un servidor web básico.
Es mediante la interacción con este servidor web local que se puede averiguar el estado actual de las luces, y controlarlos.
Vídeo: Luz Nocturna Automatica con Arduino - Facil de realizar Programacion paso a paso
Es un sistema muy simple, y maduro para proyectos de bricolaje. Felicitaciones a Philips para hacer esta cosa tan hackable.
Empezando
Antes de acceder a la documentación de la API, tendrá que registrarse como desarrollador. Es gratis, pero hay que aceptar los términos y condiciones. Hacer esto ahora.
Vídeo: Como conectar un sensor de movimiento INSTALACIONES ELECTRICAS
Cualquiera que esté familiarizado con los servicios web estándar o javascript debe ser capaz de trabajar con el Hue: todos los datos se pasan y recibió como paquetes JSON.¿Qué es JSON? Visión general de un laico¿Qué es JSON? Visión general de un laicoSi va a ser un desarrollador web o no, es una buena idea por lo menos saber qué es JSON, por qué es importante, y por qué se usa en toda la web.Lee mas
Para echar un vistazo a esto en acción, usted necesita saber la dirección IP de su puente de Hue. Hay algunas maneras de hacer esto:
- Mira la tabla de asignación de direcciones DHCP en la interfaz de administración del router
- Ejecutar un programa de mapeo de red como IP Scanner Inicio
- Pruebe la herramienta corredor de Philips UPnP
- Ping “Philips-hue.home”
Cuando haya terminado, seguir adelante y escribir en la barra de direcciones del navegador con debug / clip.html anexa a la URL. En mi caso, se trataba de:
http://192.168.1,216/depurar/acortar.html
Esta es una herramienta de depuración que nos deja que envíe y reciba los paquetes JSON a través de una simple interfaz web. El primer paso es permitir que el perfil de desarrollador en el propio puente Hue - que está desactivado por defecto por razones de seguridad. Pegue lo siguiente en el campo del cuerpo, dejar la URL, / API /, y enviar una solicitud POST haciendo clic en el botón de post:
{"tipo de dispositivo":"usuario de prueba","nombre de usuario":"newdeveloper"}
La primera vez que hace esto, verá un “botón de enlace no presiona” en alguna parte de la respuesta. Esta es una característica de seguridad que requiere que cada nueva aplicación que utilice para ser autorizado físicamente. Ir a buscar a su puente, presione el botón, y enviar la misma petición de nuevo dentro de los 30 segundos. Esta vez obtendrá una respuesta diferente, y se autorizará al usuario. Si desea utilizar un nombre de usuario diferente, leer los documentos de la API sobre la creación de usuarios. Por ahora, esto será suficiente.
Vídeo: Como Conectar una Sirena a una Alarma con Sensor de Movimiento PIR - Arduino
Una vez que el usuario ha sido configurado, la URL base que debe interactuar con los convierte / Api / newdeveloper / . Puede enviar una solicitud GET para averiguar todo lo que su puente conoce actualmente acerca de las luces connnected, alarmas, escenas y un breve registro de aplicaciones que se han utilizado. He aquí una muestra de algunas de las informaciones de estado contenida por una sola bombilla.
"estado": {"en": cierto,"bri": 254,"matiz": 14910,"sab": 144,"efecto": "ninguna","xy": [0.4596,0.4105],"Connecticut": 369,"alerta": "ninguna","Modo de color": "Connecticut","accesible": falso},"tipo": "luz de colores ampliada","nombre": "1 dormitorio","ModeloId": "LCT001",
Tenga en cuenta que la “En”: true Estado en realidad no se mostrará si la bombilla está encendida o sólo eso no- acuerdo con la configuración del puente, se debería estar en. “Accesible”: false puede indicar tanto una bombilla que está demasiado lejos, o simplemente apaga el interruptor principal.
Un último ejemplo antes de que las integren en el Arduino: asegúrese de que uno de sus luces es visible y sigue, y que sepa qué número es. Cambiar la URL para / Api / newdevelopers / luces / 1 / Estado (Cambiando el número en la luz), y enviar una solicitud PUT con los siguientes datos:
{"matiz": 50100,"sab":255,"bri":255}
Debe ver a su luz reacciona de esta manera:
Lo que has hecho es empujar a un nuevo estado de la bombilla. También puede agregar “transitionTime”, que es un método de animación primitiva que indica el número de segundos que desea que el cambio de estado a tomar.
El color se puede ajustar en un número de maneras diferentes, pero por desgracia no hay forma sencilla de enviar un valor RGB. En el ejemplo anterior, hemos enviado matiz, sabURACIÓN, y brillo. Intente cambiar el valor del tono y el envío de la solicitud PUT nuevo.
Trabajando a partir de Arduino
Hay una biblioteca de Tono / Arduino existente llamado ArduinoHue la que Philips enlazar a sí mismos en la documentación de la API, pero el problema con esta biblioteca es que se comunica a través de la conexión USB al PC, que también debe estar en ejecución una aplicación Python constantemente. eugh. Usted puede también dejar que su computadora funcione toda la cosa en ese punto, y cortar el Arduino en su totalidad.
En su lugar, te voy a mostrar cómo controlar la tonalidad de la Arduino el uso de un escudo de Ethernet. Arduino no necesita estar conectado a un ordenador, por lo que puede funcionar de forma independiente en cualquier lugar se puede poner un cable Ethernet. De hecho, también debería funcionar con un escudo Wi-Fi, pero no tengo con quien jugar.
Si desea saltar a continuación, el código de ejemplo completo está incrustado abajo, o disponible aquí. Me he adaptado desde un ejemplo Publicado por Gilson Oguime. Si nunca has jugado con su escudo de Ethernet antes, es posible que desee tener un rápido repaso por el tutorial cliente web - Voy a asumir un cierto nivel de familiaridad con esto, y no va a cubrir el código utilizado para establecer una red IP, etc. Hemos mostrado también le cómo crear un mini servidor web con el escudo de Ethernet.Dar a su proyecto Arduino su propio mini-servidor web, con un escudo de EthernetDar a su proyecto Arduino su propio mini-servidor web, con un escudo de EthernetHace un tiempo, he mostrado cómo configurar un sistema de control de Internet para su Arduino - pero tenía que estar conectados a un ordenador a través de USB con el fin de mantener la conexión a Internet ....Lee mas
/ * |
Hablando a la tonalidad de un Arduino |
Por James Bruce (MakeUseOf.com) |
Adaptado de código por Gilson Oguime. https://github.com/oguime/Hue_W5100_HT6P20B/blob/master/Hue_W5100_HT6P20B.ino |
* / |
#incluir |
#incluir |
// constantes Hue |
const char hueHubIP [] = "192.168.1.216"- // Hue centro de propiedad intelectual |
const char hueUsername [] = "newdeveloper"- // nombre de usuario Hue |
const int hueHubPort = 80- |
// PIR |
int pir = 2- |
boolean activada = falsos |
// variables de Hue |
boolean hueOn- // on / off |
int hueBri- // valor de brillo |
// valor de tono de largo hueHue- |
Cadena hueCmd- // comando Tono |
tampón de largo sin signo = 0- // tampón para el almacenamiento de datos recibido |
addr- largo sin signo |
// Ethernet |
mac bytes [] = {0x74,0x69,0x69,0x2D, 0x30,0x31} - // dirección MAC W5100 |
IP Dirección IP (192,168,1,2) - // Arduino IP |
EthernetClient cliente- |
/ * |
Preparar |
* / |
void setup () |
{ |
Serial.begin (9600) - |
Ethernet.begin (MAC, IP) - |
pinMode (pir, INPUT) - |
retardo (2000) - |
Serial.println ("Listo.") - |
} |
void loop () |
{ |
si (digitalRead (pir) == 1) { |
Serial.println ("activado") - |
// Una serie de cuatro comandos de ejemplo, que color se desvanece entre las dos luces de color rojo y rosa. Lea sobre la API de Hue |
// documentación para obtener más detalles sobre los comandos exactos a ser utilizado, pero tenga en cuenta que las comillas deben escaparse. |
cadena de comando = "{"en": cierto,"matiz": 50100, "sab": 255, "bri ": 255, "tiempo de transición":"+ String (aleatorio (15,25)) +"}"- |
setHue (1, comandos) - |
comando = "{"en": cierto,"matiz": 65280, "sab": 255, "bri ": 255, "tiempo de transición":"+ String (aleatorio (15,25)) +"}"- |
setHue (2, comandos) - |
comando = "{"matiz": 65280, "sab": 255, "bri ": 255, "tiempo de transición":"+ String (aleatorio (15,25)) +"}"- |
setHue (1, comandos) - |
comando = "{"matiz": 50100, "sab": 255, "bri ": 255, "tiempo de transición":"+ String (aleatorio (15,25)) +"}"- |
setHue (2, comandos) - |
// para que podamos realizar un seguimiento del estado |
activado = cierto- |
} |
más{ |
activado = falsos |
Serial.println ("desactivado") - |
// se activó, por lo que enviar un solo comando fuera |
cadena de comando = "{"en": False}"- |
setHue (1, comandos) - |
setHue (2, comandos) - |
} |
} |
/ * SetHue () es nuestra función de control principal, que debe ser aprobado una serie de luz y una |
* cadena de comandos con el formato adecuado en formato JSON (básicamente un conjunto de variables de estilo javascript |
* Y los valores. Se hace entonces un simple petición HTTP PUT para el puente en la IP especificada en la salida. |
* / |
setHue booleano (int lightNum, cadena de comando) |
{ |
si (client.connect (hueHubIP, hueHubPort)) |
{ |
while (client.connected ()) |
{ |
client.print ("PUT / API /") - |
client.print (hueUsername) - |
client.print ("/luces/") - |
client.print (lightNum) - // hueLight base cero, agregar 1 |
client.println ("/ HTTP estado / 1.1") - |
client.println ("mantener viva") - |
client.print ("Anfitrión: ") - |
client.println (hueHubIP) - |
client.print ("Largancia de contenido: ") - |
client.println (command.length ()) - |
client.println ("Content-Type: text / plain-charset = UTF-8") - |
client.println () - // línea en blanco antes cuerpo |
client.println (comandos) - // comando Tono |
} |
client.stop () - |
devolver cierto-// comando ejecutado |
} |
más |
volver falsos // comando falló |
} |
/ * Una función de ayuda en caso de que la lógica depende del estado actual de la luz. |
* Esto establece una serie de variables globales que se puede comprobar para saber si una luz está activada o no |
* Y el tono etc. No es necesario sólo para enviar comandos |
* / |
boolean getHue (int lightNum) |
{ |
si (client.connect (hueHubIP, hueHubPort)) |
{ |
client.print ("GET / api /") - |
client.print (hueUsername) - |
client.print ("/luces/") - |
client.print (lightNum) - |
client.println (" HTTP / 1.1") - |
client.print ("Anfitrión: ") - |
client.println (hueHubIP) - |
client.println ("Content-type: application / json") - |
client.println ("mantener viva") - |
client.println () - |
while (client.connected ()) |
{ |
si (client.available ()) |
{ |
client.findUntil (""en":", " 0") - |
hueón = (client.readStringUntil ( ``) == "cierto") - // si la luz está encendida, establezca la variable a cierto |
client.findUntil (""bri ":", " 0") - |
hueBri = client.readStringUntil ( ``) Toint () -. // establecer variable para Valor de brillo |
client.findUntil (""matiz":", " 0") - |
HUEHUE = client.readStringUntil ( ``) Toint () -. // establecer la variable a Hue valor |
// Break no capturar otros atributos de la luz todavía |
} |
} |
client.stop () - |
devolver cierto-// capturada en, bri, tonalidad |
} |
más |
volver falsos // error en la lectura, bri, tonalidad |
} |
Creación de Cambios de estado
La creación de un nuevo estado para empujar a las bombillas es un simple caso de la creación de una nueva Cuerda variable y escapar de todas las comillas dobles. He añadido una aleatorio() función en allí también para crear una animación algo dinámico. Trate de hacer la tonalidad variable aleatoria demasiado para diferentes colores.
cadena de comando = "{"en":cierto,"matiz": 50100, "sab": 255, "bri ": 255, "tiempo de transición":"+Cuerda(aleatorio(15,25))+"}"-
Enviar el comando
Para enviar el comando de hecho, tiene una función auxiliar llamada setHue () que toma el número luz y la cadena de comandos como argumento, así:
Vídeo: Arduino + LDR + LED = Sensor de luz | Tutorial
setHue(1,mando)-
Todo lo que hace es, entonces, se conecta con el puente, escupe el comando como una solicitud PUT, junto con todas las otras cosas sin sentido que la creación de una petición HTTP implica.
cliente.impresión("PUT / API /")-cliente.impresión(hueUsername)-cliente.impresión("/luces/")-cliente.impresión(lightNum)-cliente.println("/ HTTP estado / 1.1")-cliente.println("mantener viva")-cliente.impresión("Anfitrión: ")-cliente.println(hueHubIP)-cliente.impresión("Largancia de contenido: ")-cliente.println(mando.longitud())-cliente.println("Content-Type: text / plain-charset = UTF-8")-cliente.println()- // línea en blanco antes cuerpocliente.println(mando)- // comando Tono
La adición de un sensor de movimiento
Finalmente, Telegrafié un simple sensor de movimiento HC-SR501 de E / S digital pin 2. Cuando se detecta movimiento, una serie de estados son empujados al puente para 2 bombillas para crear una animación lento, dinámico. Cuando el sensor de movimiento se desactiva, un solo comando se envía fuera a ambos. Lo ideal es que se pueden revertir al estado en que estaban antes se detecta movimiento, pero la lógica no es tan inteligente - sólo vamos a encenderlos y fuera.
limitaciones
Si bien es cierto código no optimizado, se tarda casi un segundo de la interfaz de red de la Arduino para enviar una única solicitud de comando. Probé el mismo comando desde un Mac, utilizando la misma conexión Ethernet, y era capaz de diez a veinte veces la velocidad (aquí está la AppleScript en caso de que desea probar). En consecuencia, cualquier tipo de animación rápida (yo estaba tratando de crear un efecto de vela parpadeante) simplemente no es posible desde un Arduino. Esto no debería ser un problema para la mayoría de los proyectos, sólo para animaciones de luz de alta velocidad, pero es bueno estar al tanto de la limitación.
También es difícil de analizar completamente cualquier respuesta JSON a volver desde el puente- simplemente no hay suficiente memoria RAM en el Arduino para almacenar todos los datos en bruto. Por esta razón, es posible que desee limitar su mayoría a sí mismo a enviar.
Hackear el Hue
Ahora que usted está armado con el conocimiento de cómo controlar la tonalidad de forma totalmente independiente, se abre un mundo de Hue cortes de automatización del hogar. La verdadera pregunta es: ¿qué vas a hacer?