Smart Home Sensors DIY con Arduino, MySensors y OpenHAB

Smart Home Sensors DIY con Arduino, MySensors y OpenHAB / Casa inteligente

Los sensores de casas inteligentes cuestan una cantidad ridícula de dinero. Con $ 60- $ 100 solo para un detector de movimiento o sensor de humedad, el cableado de una casa entera se convierte en el dominio de aquellos con cantidades tontas de ingresos disponibles. Vamos a construir nuestro propio.

Afortunadamente, el trabajo duro ya lo hicieron las personas que están detrás de MySensors.org. Hoy les mostraré cómo usar el marco de MySensors para crear una gama barata de sensores inteligentes para el hogar que pueden integrarse en una instalación de OpenHAB (consulte nuestra guía de Introducción a OpenHAB en Raspberry Pi) Introducción a OpenHAB Home Automation en Raspberry Pi Comenzando con OpenHAB Home Automation en Raspberry Pi OpenHAB es una plataforma de automatización del hogar de código abierto y madura que se ejecuta en una variedad de hardware y es independiente del protocolo, lo que significa que puede conectarse a casi cualquier hardware de automatización del hogar en el mercado actual. Lee mas . Supongo que ya tiene un servidor MQTT en funcionamiento y que comprende los conceptos básicos del formato de mensajería MQTT; de lo contrario, asegúrese de leer el seguimiento de la guía de OpenHAB, que incluye instrucciones para instalar un servidor MQTT. , el software de código abierto de automatización del hogar, supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil de configurar. De hecho, puede ser francamente frustrante. Lee mas .

Aunque me ocuparé específicamente de enviar los datos de MySensors desde una red de Arduinos, utilizando MQTT, a una instalación de OpenHAB, debo señalar que el marco de MySensors puede incorporarse a una serie de controladores de automatización del hogar diferentes. Presenté esto aquí como una solución completa que funciona para mí, pero visite el sitio de MySensors, ya que puede que también se adapte a su propósito similar, pero con un hardware ligeramente diferente o un protocolo de mensajería diferente. Es increíblemente versátil..

El costo del hardware para mi configuración es de menos de $ 10 por nodo (un poco más para la puerta de enlace), pero se pueden agregar sensores y actuadores adicionales por muy poco (el sensor de humedad y temperatura DHT11 por ejemplo es de aproximadamente $ 1 cada uno; un relé de alto voltaje es alrededor de $ 3).

Lo que estamos haciendo

La idea básica es que, en lugar de agregar a nuestra red local abarrotada actual utilizando Wi-Fi no confiable o costosos protectores de Ethernet, creamos una red totalmente independiente con capacidad de malla solo para los Arduinos; luego transfiéralo a la red local utilizando un único nodo de puerta de enlace, que tiene una conexión Ethernet y una conexión de radio a los otros Arduinos. Así que estamos haciendo un par de nodos sensores, que recopilan datos; y un nodo de puerta de enlace, que transmite esos datos al servidor OpenHAB.

Nuevamente, esto es lo que funciona para mí, porque mi recepción de Wi-Fi es tan terrible y no quiero saturarla con datos innecesarios. Si está contento con la conexión Wi-Fi, mire a bajo costo el ESP8266 compatible con Arduino. Conozca al Arduino Killer: ESP8266 Conozca al Arduino Killer: ESP8266 ¿Qué pasa si le digo que hay una placa de desarrollo compatible con Arduino con Wi-Fi integrada? -Fi por menos de $ 10? Bueno, la hay. Lea más con las tarjetas Wi-Fi incorporadas: MySensors también las admite.

Nota importante para los usuarios de El Capitán y los clones de Arduino: Apple logró romper los controladores de serie utilizados para comunicarse con una serie de tableros de clon de Arduino en el último lanzamiento de El Capitán gracias a las nuevas medidas de seguridad. Para ver si está afectado, mire su tarjeta y el chip más cercano al puerto USB. Si dice CH340, estás afectado por esto. Siga las instrucciones aquí para deshabilitar la firma kext del controlador, instale nuevamente los controladores seriales CH340.

Componentes necesarios

Para la entrada, necesitarás:

  • Arduino Uno
  • Ethernet Shield (basado en W5100)
  • Módulo NRF24L01 - He usado el +PA + LNA Versiones en todo, que tienen un alcance aumentado de hasta 1 km. El cableado es el mismo que elijas..

Para cada nodo sensor:

  • Arduino Uno
  • Módulo NRF24L01
  • Sensores (para empezar, sugeriría un módulo DHT11 o DHT22 de temperatura y humedad)

Adicional / Opcional:

  • Condensadores de 10uF, uno para cada módulo de RF que tenga (¡el enlace es para un paquete de 50!)
  • Fuente de alimentación con salida de 5v y 3.3v (YwRobot MB102 funciona bien y cuestan $ 1 cada uno) - Se requiere si se usa un clon de Arduino.. También necesitarás una fuente de alimentación de 9-12v CC para estos.
  • Prototipos de prototipos, o cables cortos de puente macho-hembra.

Trabajando con los módulos NRF24L01

Comencemos con los módulos NRF24L01, ya que son la parte más compleja del proyecto. Opté por la versión más costosa y de mayor alcance de estos: técnicamente conocida como NRF24L01 + PA + LNA. Vienen con un circuito de amplificación de señal a bordo y una conexión de antena, aunque le sugiero que pruebe primero la versión más barata sin antena de los módulos si tiene un hogar normal con paredes regulares, no la pared de piedra sólida de un metro de espesor que Hago. El rango reclamado de estos es de aproximadamente un kilómetro, más que suficiente para que yo los coloque en el cobertizo del jardín..

Sin embargo, estas cosas son De Verdad difícil de trabajar con; Si sigue adelante y conecta todo sin leer estos consejos primero, se sentirá decepcionado..

  • El módulo necesita 3.3V de potencia de entrada al pin VCC. - no 5v. Si pones 5v, lo freirás.
  • Suelde un condensador de 10uF a través de los terminales VCC / GND. La línea gris continua en el capacitor indica el lado negativo / GND.
  • Utilice cables de salto cortos y de alta calidad; o mejor aún, suelda directamente a un protector de prototipos para mantener la longitud del cable al mínimo y conexiones sólidas.
  • Si está usando un clon de Arduino, el regulador de voltaje no proporciona suficiente para ellos en el pin de 3.3v; tendrá que usar una placa de fuente de alimentación externa (vinculada arriba), disponible por aproximadamente $ 1 cada uno. Estos proporcionan un 3.3v estable. Si estás usando un original Marca Arduino Uno, esto no parece ser un problema..

Le sugiero que haga algunas pruebas básicas primero para establecer que su radio está funcionando. Conecta dos radios como se muestra en la página de MySensors. No importa que su diagrama muestre los tableros Arduino Micro, se utilizan los mismos números de pin. Tenga en cuenta que el diagrama muestra el NRF24L01 de la parte superior; En realidad estarás conectando cosas desde la parte inferior. Ajustar mentalmente en consecuencia. Ignora el pin gris de IRQ, no se usa actualmente. En resumen:

  • VCC va a 3.3v en su fuente de alimentación externa
  • GND va al riel común
  • CE al pin 9
  • CSN / CS al pin 10
  • MOSI al pin 11
  • MISO al pin 12
  • SCK al pin 13

Necesitarás dos nodos completamente cableados para probar. Descarga la librería RF24 y carga la más sencilla. Empezando ejemplo. Encienda ambos módulos, pero deje uno conectado por USB y abra la consola serial. Tipo “T” y envíe, para cambiarlo a modo de transmisión, en el momento en el que debería recibir mensajes de depuración que indiquen que está haciendo un ping exitoso al otro nodo..

Construyendo el MySensors MQTT Client Gateway

Ok, ahora que sabemos que las radios RF24 están conectadas y funcionan correctamente, adelante, descargue la rama de desarrollo del paquete MySensors Arduino. Este tutorial fue escrito usando la versión 1.5, pero también debería estar bien con versiones posteriores. Estamos usando la rama de desarrollo porque en el momento de escribir este artículo, el MQTT cliente La puerta de enlace aún no es parte del paquete principal..

Aunque hay MQTTGateway disponible en la rama maestra, también actúa como un servidor, lo cual no queremos porque ya tenemos un servidor MQTT estable que se ejecuta en la Raspberry Pi. Solo queremos reenviar los datos de MySensors a eso. Nuevamente, si esto no es lo que quieres, si prefieres no usar MQTT, mira EthernetGateway o SerialGateway, que también son compatibles con OpenHAB.

Vale la pena señalar que el paquete de descarga no solo incluye archivos MySensors esenciales, sino que también incluye bibliotecas compatibles necesarias para cada sensor posible. Para evitar conflictos, sugeriría simplemente hacer una copia de seguridad de toda la carpeta de bibliotecas actual y reemplazarla con las del paquete de descarga..

El cableado para la puerta de enlace es un poco diferente; Una vez que tenga su escudo Ethernet, use los siguientes pines para el módulo de radio:

  • CE al pin 5
  • CSN al pin 6
  • SCK al pin A0
  • MOSI al pin A1
  • MISO al pin A2

También necesitas habilitar el #define SOFTSPI línea en el bibliotecas / mySensors / MyConfig.h expediente. Haga esto eliminando el // para descomentarlo, es alrededor de la línea 309 en la mía.

Necesitamos hacer esto porque tanto el módulo de radio como el escudo de red usan SPI, y son incompatibles; así que simplemente cambiamos el módulo de radio SPI a algunos otros pines y realizamos la comunicación SPI en el software (por lo tanto,, suave SPI).

Cargar el MySensors / GatewayW5100MQTTClient bosquejo. Si no ve esto en el menú de MySensors, no tiene el rama de desarrollo instalado. Utilice el enlace proporcionado anteriormente para volver a descargar toda la biblioteca..

Tendrá que definir una dirección IP estática para el controlador, la IP de su red y su red, y la dirección IP de su servidor MQTT existente. Siéntase libre de modificar los prefijos del tema también si lo desea. Sube y conecta esa cosa a la red. Revise brevemente la consola Serial para detectar errores evidentes, como no poder conectarse a su servidor MQTT; de lo contrario, déjelo a un lado (pero déjelo encendido).

Construyendo los nodos sensores

Primero, comenta que #define SOFTSPI línea en el MyConfig.h archivo de nuevo, poniendo el // al inicio de nuevo. Solo se necesita para la puerta de enlace: estamos usando el cableado NRF24L01 estándar para los nodos de sensores, que usan hardware SPI. Si necesitas recordarlo:

  • VCC va a 3.3v en su fuente de alimentación externa (o en el propio Arduino si es un original y no un clon)
  • GND va al riel común
  • CE al pin 9
  • CSN / CS al pin 10
  • MOSI al pin 11
  • MISO al pin 12
  • SCK al pin 13

A continuación, conecte su sensor de elección; Utilizo el sensor de humedad y temperatura DHT11 para las pruebas, pero si se desplaza hacia abajo a la lista de sensores y actuadores en la barra lateral de la página de MySensors, encontrará una gran selección de otras opciones: puertas, pluviómetro, luz, movimiento, incluso RFID - y cargas más. Puedes ver que también agregué un relevo al nodo que se muestra a continuación, pero más sobre eso más adelante.

Finalmente, carga la Sensor de humedad Ejemplo del menú de MySensors y agregue la siguiente línea inmediatamente después de los comentarios.

#define MY_NODE_ID 2

Ya que estamos usando una versión especial del controlador que simplemente reenvía las cosas a nuestro propio servidor MQTT, no tiene la función de controlador estándar que asignaría automáticamente las ID de nodo a cada nuevo nodo. En su lugar, solo vamos a definirlo manualmente cada vez. Anote este número en algún lugar para sus propios registros y cámbielo para cada nodo.

Habilitar la salida de depuración también:

#define MY_DEBUG

Finalmente, verifique que el pin de datos de su sensor DHT11 sea correcto.

# define HUMIDITY_SENSOR_DIGITAL_PIN 7

Luego, subir!

Vale la pena abrir la consola de serie para echar un vistazo. El bit crucial a mirar es st =, cual es el estado del mensaje. st = fallar significa que el mensaje no fue enviado Es posible que no haya definido un ID de nodo único o que su puerta de enlace esté fuera de línea. Fingí estos fallos simplemente desenchufando la puerta de enlace:

Si todo está funcionando, debería comenzar a ver que algunas lecturas de datos entran en su servidor MQTT. Ponerlas en OpenHAB está fuera del alcance de este tutorial, pero se trató en la parte 2 de la guía de OpenHAB. El software de código abierto para la automatización del hogar supera con creces las capacidades de otros sistemas de automatización del hogar en el mercado, pero no es fácil de configurar. De hecho, puede ser francamente frustrante. Lea más para que pueda consultar allí.

Combinando el código del sensor

Aunque hacer que un solo nodo de sensor esté en funcionamiento es relativamente simple, se vuelve un poco más complicado cuando se quieren agregar múltiples sensores a cada nodo. Esencialmente vas a combinar los fragmentos de código de dos ejemplos diferentes. ¡La forma más fácil de mostrarte esto es con un video! Aquí estoy combinando nuestro sensor de humedad básico con un relé..

Puede encontrar el código completado para el sensor de humedad y el relé aquí, que ya ha sido modificado con un bucle no bloqueante como mencioné en el video. Para obtener más información sobre la estructura de comandos de MQTT necesaria para activar el relé, verifique la API en serie, pero baste con decir que el siguiente canal controla el primer relé en el código que he dado (con un cuerpo de mensaje de 0 o 1):

mysensors-in / 9/1/1/0/2

Su única limitación ahora es la cantidad de memoria en el Arduino, y diré esto: los sensores más confiables en mi hogar inteligente no son los módulos comerciales Z-Wave que cuestan $ 80, sino los personalizados de MySensor..

Lo terminaré allí hoy, pero si tienes problemas, puedes preguntar en los comentarios o en los foros de usuarios muy activos de MySensors.. ¿Estarán armando sus propios nodos sensores baratos? ¿Cómo va tu casa inteligente??

Explorar más sobre: ​​Arduino, Smart Sensor.