Introduction: Crear Una Casa Domotica Con Arduinos (MySensors Y DomoticZ)

Material:

1-Arduino

Una placa arduino es un circuito impreso que integra un microcontrolador, es decir un mini ordenador para automatizar tareas. Además, el software es de código abierto, es decir, que todo el mundo lo puede modificar y es por eso que se puedan crear infinidad de cosas con estos microcontroladores.

Para poder programarlos es necesaria una aplicación de escritorio llamada Interfaz de entorno de desarrollo Arduino. Todos los códigos para programar los arduinos en este proyecto están alojados en la página web mysensors.

Para este proyecto usare una versión clónica del arduino nano de 3.3V, y en vez de costar 10 euros solo cuesta 1.5 euros, lo único malo de esta versión es que las patas del arduino vienen aparte y las tienes que soldar tú mismo, pero no es nada difícil.

Estas placas tienen un puerto de entrada de energía igual que algunos teléfonos móviles, por lo tanto, es muy fácil adquirir uno de estos.

2-Ordenador

Para controlar todos los sensores se usará un ordenador portátil antiguo que no se la daba ningún uso en casa porque tenía la pantalla averiada, pero en este proyecto, como no se le dará uso a la pantalla del ordenador, se podrá usar igualmente.

3- Sensores

Los sensores que se han comprado son un sensor de temperatura y humedad, un sensor de puerta abierta, un timbre y un relé, para la comunicación se necesita un módulo de radio, y una webcam para el nodo del timbre.

También es necesario una placa de prototipo, estaño, cables, una caja para proteger los sensores y un adaptador a la corriente.

El dinero invertido en este proyecto ha sido 30,1 euros en total.

Todos los productos han sido adquiridos en la página web de compras aliexpress. El único problema de comprar en esta página es que los pedidos suelen tardar unos 40 días, por lo que los tuve que pedir con antelación. La causa de la tardanza es que son enviados directamente desde china, pero gracias a esto, los productos electrónicos son casi 4 veces más baratos.

4-Servidor

El portátil actuará como servidor para la casa domótica, este almacenará toda la multimedia, y correrá el programa domoticz, una aplicación que es utilizada en la domótica, y, además, es capaz de crear una interface web, que a la hora de controlar los sensores lo pone muy fácil.

El sistema operativo que se usara es Windows 10, debido a que es uno de los más utilizados en la actualidad, por lo que existen una gran cantidad de aplicaciones que son compatibles para este entorno.

Para poder convertir un ordenador en un servidor de una casa domótica se necesitan algunos programas, los que he usado se nombraran a continuación:

MySensors

Es una página web con una gran comunidad que aporta conocimiento sobre software y hardware de manera opensource que se centra en el DIY (hazlo tú mismo) de casas automatizadas y el internet de las cosas.

Domoticz

DomóticZ es un sistema de código abierto gratuito que permite supervisar y configurar varios dispositivos tales como luces, interruptores, la temperatura, la lluvia, el viento, los rayos UV y metros (electricidad, gas, agua).

El sistema está diseñado para funcionar en varios sistemas operativos con HTML5. De esta forma no tenemos que preocuparnos tener que crear una web aparte.

Step 1: Comunicación

Comunicación entre nodos, Gateway y ordenador

Para poder desarrollar una comunicación entre los sensores y el servidor hay que diferenciar entre los nodos y el Gateway.

Los nodos son los múltiples sensores que se comunican con el Gateway vía radio, y a la vez el Gateway se conecta al ordenador. De esta forma el ordenador obtiene los datos que reciben los sensores.

Protocolo

Y para poder entenderse entre los dispositivos se usa el siguiente protocolo de mensajería que provee la página web de mysensors:

node-id ; child-sensor_id ; message-type ; ack ; sub-type ; payload

Es decir, que cada mensaje que se manda o se recibe, tiene esta estructura. Donde cada una de las partes del mensaje tiene el siguiente significado:

node-id: Es el numero identificador que tiene cada nodo, y sirve para saber a quién va dirigido el mensaje, o quien lo ha enviado.

child-sensor_id: Traducido al español quiere decir hijo de sensor, lo que quiere decir es que, si el nodo tiene más de un sensor, como por ejemplo si el mismo nodo tiene dos lámparas para controlar, en este parámetro se define cuál de las dos lámparas del nodo.

message-type: Quiere decir que tipo de mensaje es el que se envía. Lo más común es el tipo conjunto, que es para actualizar el estado de un nodo (por ejemplo, encender la luz)

ack: Sirve para determinar si el mensaje es de un nodo hacia el ordenador (Incoming), por ejemplo, enviar la temperatura o en caso contrario del ordenador a un nodo (Outgoing) por ejemplo para apagar el relé.

sub-type: Tiene la función de hacer saber al ordenador que es el nodo al que se refiere, puede ser desde una puerta, hasta un sensor de gas.

payload: Esta parte es la más importante, ya que es donde el mensaje real reside.

Para poder programar todos los arduinos de la parte práctica es necesario descargar la aplicación oficial de arduino. Aparte, como la aplicación de arduino es opensource, en la web de mysensors (https://www.mysensors.org/download) existen unos addons con los que se pueden programar más códigos orientados a la domótica y se usaran en el trabajo.

Estos addons una vez descargados, se deben copiar a la carpeta donde está instalada la aplicación de arduino.

Step 2: Construir Gateway

Gateway

El Gateway es la puerta de enlace entre los nodos y el ordenador por comunicación serie mediante conexión USB al ordenador.

Este dispositivo cuenta con arduino nano 3.3 como ordenador, y un módulo de NRF24L01+ que se alimenta con la propia energía del arduino, para enviar y recibir información de los otros nodos a través de radio.

El código usado para crear este nodo es este:

/**
* The MySensors Arduino library handles the wireless radio link and protocol * between your home built sensors/actuators and HA controller of choice. * The sensors forms a self healing radio network with optional repeaters. Each * repeater and gateway builds a routing tables in EEPROM which keeps track of the * network topology allowing messages to be routed to nodes. * * Created by Henrik Ekblad * Copyright (C) 2013-2015 Sensnology AB * Full contributor list: https://github.com/mysensors/Arduino/graphs/contr... * * Documentation: https://github.com/mysensors/Arduino/graphs/contr... * Support Forum: https://github.com/mysensors/Arduino/graphs/contr... * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * ******************************* * * DESCRIPTION * The ArduinoGateway prints data received from sensors on the serial link. * The gateway accepts input on seral which will be sent out on radio network. * * The GW code is designed for Arduino Nano 328p / 16MHz * * Wire connections (OPTIONAL): * - Inclusion button should be connected between digital pin 3 and GND * - RX/TX/ERR leds need to be connected between +5V (anode) and digital pin 6/5/4 with resistor 270-330R in a series * * LEDs (OPTIONAL): * - To use the feature, uncomment any of the MY_DEFAULT_xx_LED_PINs * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly * - ERR (red) - fast blink on error during transmission error or recieve crc error * *
/ Enable debug prints to serial monitor
#define MY_DEBUG
// Enable and select radio type attached
#define MY_RADIO_NRF24
//#define MY_RADIO_RFM69
// Set LOW transmit power level as default, if you have an amplified NRF-module and
// power your radio separately with a good regulator you can turn up PA level.
#define MY_RF24_PA_LEVEL RF24_PA_LOW
// Enable serial gateway
#define MY_GATEWAY_SERIAL
// Define a lower baud rate for Arduino's running on 8 MHz (Arduino Pro Mini 3.3V & SenseBender)
#if F_CPU == 8000000L
#define MY_BAUD_RATE 38400
#endif
// Enable inclusion mode
#define MY_INCLUSION_MODE_FEATURE
// Enable Inclusion mode button on gateway
//#define MY_INCLUSION_BUTTON_FEATURE
// Inverses behavior of inclusion button (if using external pullup)
//#define MY_INCLUSION_BUTTON_EXTERNAL_PULLUP
// Set inclusion mode duration (in seconds)
#define MY_INCLUSION_MODE_DURATION 60
// Digital pin used for inclusion mode button
//#define MY_INCLUSION_MODE_BUTTON_PIN  3
// Set blinking period
#define MY_DEFAULT_LED_BLINK_PERIOD 300
// Inverses the behavior of leds
//#define MY_WITH_LEDS_BLINKING_INVERSE
// Flash leds on rx/tx/err
// Uncomment to override default HW configurations
//#define MY_DEFAULT_ERR_LED_PIN 4  // Error led pin
//#define MY_DEFAULT_RX_LED_PIN  6  // Receive led pin
//#define MY_DEFAULT_TX_LED_PIN  5  // the PCB, on board LED
#include 
void setup()
{
	// Setup locally attached sensors
}
void presentation()
{
	// Present locally attached sensors
}
void loop()
{
	// Send locally attached sensor data here
}

Para soldar todos los componentes se ha usado un soldador económico, estaño, y cables.

Para darle un toque más profesional al dispositivo se ha comprado una caja para los empalmes de cables de la luz que tiene un coste de un euro.

Una vez la placa esta con todo soldado y dentro de la caja, queda de la siguiente forma:

Gateway finalizado

Ahora lo único que falta es enlazar el Gateway con la aplicación domoticz para que haga de intermediario entre los nodos y el ordenador. Para ello me descargue el programa domoticz desde la web oficial totalmente gratuita.

https://domoticz.com/downloads/

La aplicación solo ocupa 13 MB así que se pude instalar en mi portátil antiguo sin ningún problema.

Una vez instalado el programa se configura entrando en cualquier navegador y escribiendo la dirección ip del ordenador donde está instalado el programa y el puerto para acceder a este.

Para poder añadir el Gateway a domoticz se debe especificar en qué puerto COM esta nuestro arduino, este caso es el puerto número tres y el baudrate, que es la velocidad de los mensajes, que en este caso es 115200. Una vez hecho esto ya nos aparecerá que tenemos el Gateway enlazado a la aplicación.

Step 3: Construir Sensores

Los sensores o nodos están compuestos por el arduino, el módulo de radio y el propio sensor. Y si un nodo tiene más de un sensor, por ejemplo, en vez de tener solo un relé tiene dos, se le llaman hijos a cada sensor, y se le asigna un número a cada uno.

Todos los nodos tienen el módulo de radio conectado de la misma forma que recomiendan en mysensors. Para poder verlo de una forma más clara he diseñado este esquema usando la web de CircutLab.

1. Sensor de temperatura

Sensor DHT-22

Este nodo envía cada minuto la temperatura y la humedad que recoge el sensor DHT-22, un sensor con una gran relación calidad precio, ya que solo tiene un +-2% de error.

Para crear este nodo se ha necesitado prácticamente el mismo material que para crear el Gateway, una placa de prototipo pcb, el arduino, el módulo de radio, cables y el sensor de temperatura y humedad. La única pega del sensor es que la hoja de especificaciones solo está en chino, así que es una dificultad añadida para entender los esquemas.

El código usado está en la página web mysenors, pero modificado para que en vez de enviar el código cada 10 minutos, lo envíe cada minuto, así saber a tiempo real la temperatura de la casa de una forma más precisa.

Una vez está el arduino soldado y programado, solo falta conectar el arduino a la corriente y enlazarlo con domoticz. Para enlazar el nodo con la aplicación de domoticz, hay que acceder desde la web, e ir al apartado donde guarde el Gateway, y darle al botón de actualizar, y en esta página deberán salir todos los nodos que haya encontrado.

Ya reconocido el nodo, hay que ir al apartado dispositivos, y configurarlo para que salga en la pantalla principal de domoticz.

2. Sensor de puerta abierta

Todos los demás materiales son los mismos que el nodo de temperatura.

Para realizar el nodo se ha soldado la radio, el sensor magnético y el arduino a la placa de pcb.

El código de mysensors utilizado para detectar ventanas abiertas se llama “BinarySwitchSensor.ino”

Igual que en el primer nodo, una vez soldado y programado solo falta conectarlo con domoticz.

Solo con refrescar la página de dispositivos ya saldrá el nodo “Security sensor” y para ponerlo en la página principal hay que hacer clic sobre la flecha.

Para comprobar que funciona, se separa el imán del sensor y en la web de domoticz cambia el estado del sensor.

3. Timbre

Este tipo de dispositivos suelen rondar los 100 euros, y es en el que más he trabajado.

Para ello usaremos un pulsador cualquiera, y de los dos cables que salen de este los conectaremos a un arduino por el puerto digital 3 uno y el otro cable al GND (Tierra).

Una vez soldado todo, se sube el programa desde la aplicación pertinente y en la web de domoticz ya sale el nodo listo para ser enlazado.

Como que el timbre solo envía una señal durante medio segundo, no da tiempo a la página web a actualizarla, ya que esta lo hace cada 10 segundos, a que se vea el cambio de estado, por lo que se ha configurado un sistema smpt para poder enviar un correo electrónico cada vez que alguien presione el timbre.

Para ello hay que ir a la configuración de eventos, y como este programa es muy visual, no es necesario el conocimiento de ningún leguaje de programación, solamente hay que unir bloques para poder ejecutar una tarea, en este caso hemos puesto que cuando el nodo del timbre este en estado 0, envíe un correo a mi cuenta personal con el sujeto timbre presionado, avisándome que han presionado el timbre.

4. Relé Actuador

Como en todos los nodos, se ha usado como material, la placa de pcb, el arduino clónico, la radio, y en este caso el relé.

El módulo de radio se conecta a la placa como los demás nodos, y el relé, uno de los cables al puerto digital tres, y otro al GND.

Conectado al relé está el cable amarillo que va directamente a la corriente de 220v. De esta forma el relé cierra o abre el circuito suministrando 220v a la base de enchufe pudiendo apagar o encender cualquier aparato que funcione a 220v.

Para enlazarlo con domoticz tenemos que entrar en la configuración del Gateway, y ya aparecerá el nodo en línea, por lo que solo habrá que configurarlo para que salga en la pantalla principal.

A continuación, se ha hecho una prueba desde el móvil para ver si funciona correctamente.

Invention Challenge 2017

Participated in the
Invention Challenge 2017

Explore Science Contest 2017

Participated in the
Explore Science Contest 2017