Tabla de contenido:

NexArdu: Control inteligente de iluminación: 5 pasos
NexArdu: Control inteligente de iluminación: 5 pasos

Video: NexArdu: Control inteligente de iluminación: 5 pasos

Video: NexArdu: Control inteligente de iluminación: 5 pasos
Video: Séance ordinaire - 5 juillet 2021 2024, Noviembre
Anonim
NexArdu: Control inteligente de iluminación
NexArdu: Control inteligente de iluminación

Actualizar

Si ha desarrollado la misma funcionalidad usando Home Assistant. Home Assistant ofrece una inmensa gama de posibilidades. Puedes encontrar el desarrollo aquí.

Un boceto para controlar la iluminación del hogar de manera inteligente a través de dispositivos inalámbricos similares a X10 de 433,92 MHz (también conocido como 433 MHz), p. Ej. Nexa.

Fondo

En lo que respecta a la iluminación decorativa, me ha cansado un poco que cada dos o tres semanas tuviera que reajustar los temporizadores que encienden las luces por el cambio de la hora solar con respecto al CET. algunas noches nos acostamos más temprano que otras. Debido a esto, a veces las luces se apagan "demasiado tarde" o "demasiado temprano". Lo anterior me desafió a pensar: quiero que la iluminación decorativa se encienda siempre al mismo nivel de luz ambiental y luego se apague a una hora determinada dependiendo de si estamos despiertos o no.

Objetivo

Este instructable explota las posibilidades de los dispositivos controlados de forma inalámbrica como System Nexa que operan en la frecuencia de 433,92 MHz. Aquí vamos a presentar:

  1. Control de iluminación automatizado
  2. Control web

Control web. Servidor web interno vs externo

El servidor interno aprovecha la posibilidad del escudo Ethernet Arduino para proporcionar un servidor web. El servidor web atenderá las llamadas del cliente web para verificar e interactuar con Arduino. Esta es una solución sencilla con funcionalidad limitada; las posibilidades de mejorar el código del servidor web están limitadas por la memoria del Arduino. El servidor externo requiere la configuración de un servidor web PHP externo. Esta configuración es más complicada y no es compatible con este tutorial, sin embargo, el código / página PHP para verificar y dirigir el Arduino se proporciona con una funcionalidad básica. Las posibilidades de mejorar el servidor web están, en este caso, limitadas por el servidor web externo.

Lista de materiales

Para aprovechar al máximo las posibilidades que ofrece este boceto, necesita:

  1. Un Arduino Uno (probado en R3)
  2. Un escudo Ethernet Arduino
  3. Un equipo Nexa o similar que funcione a 433,92 MHz
  4. Un sensor PIR (infrarrojo pasivo) que funciona a 433,92 MHz
  5. Una resistencia de 10KOhms
  6. Un LDR
  7. Un RTC DS3231 (solo versión de servidor externo)
  8. Un transmisor de 433,92 MHz: XY-FST
  9. Un receptor de 433,92 MHz: MX-JS-05V

El mínimo recomendado es:

  1. Un Arduino Uno (probado en R3)
  2. Un equipo Nexa o similar que funcione a 433,92 MHz
  3. Una resistencia de 10KOhms
  4. Un LDR
  5. Un transmisor de 433,92 MHz: XY-FST

(La omisión del escudo de Ethernet requiere modificaciones del boceto que no se proporcionan en este instructivo)

La lógica de Nexa. Una breve descripción

El receptor Nexa aprende la identificación del control remoto y la identificación del botón. En otras palabras, cada control remoto tiene su número de remitente y cada par de botones de encendido / apagado tiene su ID de botón. El receptor tiene que aprender esos códigos. Algunos documentos de Nexa establecen que un receptor se puede emparejar con hasta seis controles remotos. Los parámetros de Nexa:

  • SenderID: ID del mando a distancia
  • ButtonID: número de par de botones (activar / desactivar). Empieza con el número 0
  • Grupo: sí / no (también conocido como botones "Todo apagado / encendido")
  • Comando: encendido / apagado

Pasos instruibles. Nota

Los diferentes Pasos descritos en este documento son para ofrecer dos sabores diferentes sobre cómo lograr el objetivo. Siéntase libre de elegir el que más le convenga. Aquí está el índice:

Paso # 1: El circuito

Paso # 2: Nexardu con servidor web interno (con NTP)

Paso # 3: Nexardu con servidor externo

Paso 4: información valiosa

Paso 1: El circuito …

El circuito…
El circuito…

Conecte los diversos componentes como se muestra en la imagen.

Pin de Arduino # 8 al pin de datos en el módulo RX (receptor) Pin de Arduino # 2 al pin de datos en el módulo RX (receptor) Pin de Arduino # 7 al pin de datos en el módulo TX (remitente) Pin de Arduino A0 a LDR

Configuración de RTC. Solo se necesita en la configuración del servidor externo. Pin A4 de Arduino al pin SDA en el módulo RTC Pin A5 de Arduino al pin SCL en el módulo RTC

Paso 2: Nexardu con servidor web interno (con NTP)

Las bibliotecas

Este código utiliza muchas bibliotecas. La mayoría de ellos se pueden encontrar a través del "Administrador de bibliotecas" del IDE de Arduino. Si no encuentra una biblioteca en la lista, busque en Google.

Wire. Cliente NTP

El bosquejo

El siguiente código aprovecha la posibilidad de usar la placa Arduino UNO no solo como medio para controlar los dispositivos Nexa, sino que también cuenta con un servidor web interno. Un comentario para agregar es que el módulo RTC (Real Time Clock) se ajusta automáticamente a través de NTP (Network Time Protocol).

Antes de cargar el código en Arduino, es posible que deba configurar lo siguiente:

  • SenderId: primero debe olfatear el SenderId, ver más abajo
  • PIR_id: primero debe olfatear el SenderId, ver más abajo
  • Dirección IP de LAN: establezca una IP de su LAN en su escudo Arduino Ethernet. Valor predeterminado: 192.168.1.99
  • Servidor NTP: No es estrictamente necesario, pero podría ser bueno buscar en Google los servidores NTP en sus alrededores. Valor predeterminado: 79.136.86.176
  • El código está ajustado para la zona horaria CET. Ajuste este valor, si es necesario, a su zona horaria para mostrar la hora correcta (NTP)

Oler los códigos de Nexa

Para esto, necesita cablear, al menos, el componente RX al Arduino como se muestra en el circuito.

Encuentra a continuación el boceto de Nexa_OK_3_RX.ino que, en el momento de redactarlo, es compatible con los dispositivos Nexa NEYCT-705 y PET-910.

Los pasos a seguir son:

  1. Empareje el receptor Nexa con el control remoto.
  2. Cargue Nexa_OK_3_RX.ino en el Arduino y abra el "Monitor en serie".
  3. Presione el botón del control remoto que controla el receptor Nexa.
  4. Tome nota de "RemoteID" y "ButtonID".
  5. Establezca estos números en SenderID y ButtonID en la declaración de variable del boceto anterior.

Para leer la identificación del PIR, simplemente use este mismo boceto (Nexa_OK_3_RX.ino) y lea el valor en el "Monitor serial" cuando el PIR detecta movimiento.

Paso 3: Nexardu con servidor externo

Las bibliotecas

Este código utiliza muchas bibliotecas. La mayoría de ellos se pueden encontrar a través del "Administrador de bibliotecas" del IDE de Arduino. Si no encuentra una biblioteca en la lista, busque en Google.

Wire. PIRTime.

El bosquejo

El boceto a continuación presenta otro sabor de lo mismo, esta vez potenciando las posibilidades que puede brindar un servidor web externo. Como ya se mencionó en la introducción, el servidor externo requiere la configuración de un servidor web PHP externo. Esta configuración es más complicada y no es compatible con este tutorial, sin embargo, el código / página PHP para verificar y dirigir el Arduino se proporciona con una funcionalidad básica.

Antes de cargar el código en Arduino, es posible que deba configurar lo siguiente:

  • SenderId: primero debe olfatear el SenderId, consulte Detectar los códigos Nexa en el paso anterior
  • PIR_id: primero debe olfatear el SenderId, consulte Detectar los códigos Nexa en el paso anterior
  • Dirección IP de LAN: establezca una IP de su LAN en su escudo Arduino Ethernet. Valor predeterminado: 192.168.1.99

Para el procedimiento de rastreo de código Nexa, consulte el Paso # 1.

Archivo complementario

Sube el archivo adjunto nexardu4.txt a tu servidor PHP externo y cámbiale el nombre a nexardu4.php

Ajuste de tiempo de RTC

Para establecer la hora / fecha en el RTC, utilizo el boceto SetTime que viene junto con la biblioteca DS1307RTC.

Paso 4: información valiosa

Información valiosa
Información valiosa
Información valiosa
Información valiosa

Es bueno saber el comportamiento

  1. Cuando Arduino está bajo "Control automático de luz", puede pasar por cuatro estados diferentes en relación con la iluminación ambiental y la hora del día:

    1. Despierto: Arduino espera a que llegue la noche.
    2. Activo: Ha llegado la noche y Arduino ha encendido las luces.
    3. Somnoliento: Las luces están ENCENDIDAS pero se acerca el momento de apagarlas. Comienza en "time_to_turn_off - PIR_time", es decir, si time_to_turn_off se establece en 22:30 y PIR_time en 20 minutos, entonces el Arduino entrará en el estado somnoliento a las 22:10.
    4. Inactivo: La noche pasa, Arduino ha apagado las luces y Arduino espera que el amanecer se despierte.
  2. Arduino siempre está escuchando las señales enviadas por controles remotos. Esta cuenta con la posibilidad de mostrar el estado de las luces (encendido / apagado) en la web cuando se usa el control remoto.
  3. Mientras Arduino está despierto, intenta apagar las luces todo el tiempo, por lo tanto, las señales de ENCENDIDO enviadas por un control remonte para encender las luces pueden ser capturadas por Arduino. Si esto sucediera, Arduino intentará apagar las luces nuevamente.
  4. Mientras Arduino está activo, intenta encender las luces todo el tiempo, por lo tanto, las señales de APAGADO enviadas por un control remoto para apagar las luces pueden ser capturadas por Arduino. Si esto sucediera, el Arduino intentará encender las luces nuevamente.
  5. En el estado somnoliento, las luces se pueden encender / apagar con un control remoto. El Arduino no contrarrestará.
  6. En el estado somnoliento, la cuenta regresiva del PIR comenzará a reiniciarse desde "time_to_turn_off - PIR_time" y, por lo tanto, el tiempo_to_turn_off se extenderá 20 minutos cada vez que el PIR detecte movimiento. "¡Señal PIR detectada!" El mensaje se mostrará en el navegador web cuando esto suceda.
  7. Mientras Arduino está inactivo, las luces se pueden encender y apagar a través del control remoto. El Arduino no contrarrestará.
  8. Un reinicio o ciclo de encendido del Arduino lo pondrá en modo activo. Esto significa que si el Arduino se ha reiniciado después de time_turn_off, Arduino encenderá las luces. Para evitar esto, el Arduino debe ponerse en modo manual (marque "Control automático de luz") y espere hasta la mañana para volver a "Control automático de luz".
  9. Como se mencionó anteriormente, Arduino espera que el amanecer se active nuevamente. Debido a esto, el sistema puede engañarse al dirigir una luz lo suficientemente fuerte hacia el sensor de luz que debe superar el umbral de "luminosidad mínima". Si esto sucede, Arduino debe cambiar al estado activo.
  10. El valor de Tolerancia es de gran importancia para evitar que el sistema se encienda y apague alrededor del valor de umbral Luminosidad mínima. Las luces LED, debido a su parpadeo y su alta capacidad de respuesta, pueden ser una fuente de comportamiento de aleteo. Aumente el valor de tolerancia si experimenta este problema. Yo uso el valor 7.

Es bueno saber sobre el código

  1. Como puede observar, el código es muy extenso y utiliza una cantidad considerable de bibliotecas. Esto compromete la cantidad de memoria libre necesaria para el montón. He notado un comportamiento inestable en el pasado que hizo que el sistema se detuviera, especialmente después de las llamadas web. Por lo tanto, el mayor desafío que he tenido ha sido limitar su tamaño y el uso de diversas variables para estabilizar el sistema.
  2. El código que explota el servidor interno, utilizado por mí en casa, se ha estado ejecutando desde febrero de 2016 sin problemas.
  3. He realizado esfuerzos considerables para enriquecer el código con explicaciones. Aproveche esto para jugar con diversos parámetros como el número de envíos de código Nexa por ráfaga, tiempo de sincronización NTP, etc.
  4. El código no incluye el horario de verano. Esto debe ajustarse a través del navegador web cuando corresponda.

Algunos puntos a considerar

  1. Agregue las antenas a los módulos de radiofrecuencia (RF) TX y RX. Le ahorrará tiempo quejándose de dos puntos principales: la resistencia y el alcance de la señal de RF. Yo uso un cable de 50 ohmios de 17,28 cm (6,80 pulgadas) de largo.
  2. Este intructable también puede funcionar con otros sistemas de automatización del hogar como Proove, por ejemplo. Una de las muchas condiciones a cumplir es que funcionen en la frecuencia de 433,92 MHz.
  3. Un gran dolor de cabeza con Arduino es lidiar con bibliotecas que pueden actualizarse con el tiempo y de repente no volver a ser compatibles con su "antiguo" esquema; el mismo problema puede surgir al actualizar su IDE de Arduino. Ojo que este podría ser nuestro caso aquí, sí, mi problema también.
  4. Varios clientes web simultáneos con diferentes modos de luz crean un estado "parpadeante".

Captura de pantalla

En el carrusel de imágenes de arriba, encontrará una captura de pantalla de la página web que se muestra cuando llama al Arduino a través de su navegador web. Dada la configuración de IP predeterminada del código, la URL sería

Un aspecto que puede ser objeto de mejora es el posicionamiento del botón "enviar", ya que tiene efecto en todos los cuadros de entrada y no solo en el "Control automático de luz" como se podría pensar. En otras palabras, si desea cambiar alguno de los valores posibles, siempre debe presionar el botón "enviar".

Documentación detallada / avanzada

He adjuntado los siguientes archivos para que puedan ayudarlo a comprender la solución completa, especialmente para la resolución de problemas y la mejora.

Arduino_NexaControl_IS.pdf proporciona documentación sobre la solución de servidor interno.

Arduino_NexaControl_ES.pdf proporciona documentación sobre la solución de servidor externo.

Referencias externas

Nexa System (sueco)

Paso 5: ¡Terminado

¡Finalizado!
¡Finalizado!

¡Ahí lo tienes todo terminado y en acción!

La carcasa Arduino Uno se puede encontrar en Thingiverse como "Arduino Uno Rev3 con carcasa Ethernet Shield XL".

Recomendado: