Issuu on Google+

Krishnakumar Sivaraman - 123RF.com

HARDWARE • Arduino

Encendiendo las luces de nuestra casa

CENTRO DE CONTROL Podemos manejar casi cualquier dispositivo eléctrico/electrónico de nuestro hogar, sin necesidad de estar allí para activarlo. POR LUIS MARTÍN

A

sí que vamos a comenzar a domotizar nuestra casa en serio, pero de la manera más sencilla y a la vez más vistosa que podamos implementar. Como seres humanos, somos vagos por naturaleza y lo que buscamos es siempre llegar a una meta con el menor esfuerzo posible. Es algo innato y más en los que nos dedicamos a estas ramas de la electrónica e informática. Sólo hay que ver, por ejemplo, ese gran invento que ha revolucionado la manera de ver y sentir en esta sociedad, el mando a distancia. Quién no recuerda el como a la orden de tu padre, te sentías orgulloso de ser el “elegido” de levantarte a cambiar el canal de la televisión y suerte si no te tocaba sintonizar la imagen por la ruleta… Pero ahora esto ha cambiado, cuanto menos te cueste en dinero y en esfuerzo, mejor. Y por ello vamos a aprender en este artículo cómo controlar los dispositivos eléctricos de nuestro hogar, ya sea vía Internet o bien, utilizando comunicación inalámbrica Xbee, ambas formas utilizadas ya en anteriores artículos. Nos centraremos únicamente en el control de las luces, ya que es el caso

58

Número 86

más conocido, pero se puede aplicar a cualquier tipo de dispositivo de características similares (del que queramos controlar su encendido y apagado): control de la calefacción o aire acondicionado, control paterno de la televisión/ordenador, etc.

El relé Para poder controlar las luces de nuestra casa, debemos saber que este tipo de aparatos eléctricos están conectados y se alimentan por medio de la red eléctrica (el típico enchufe de nuestro hogar). Igual esto ya lo sabéis y os parece un comentario innecesario, pero con 230 voltios de corriente alterna nunca está de más: nunca manipuléis ningún dispositivo conectado a la corriente, trabajar siempre y cercioraros de que está desconectado. Para poder trabajar con la red y en vista de que tiene unas características distintas a los típicos circuitos de 5 voltios que utilizamos con Arduino, debemos presentar un nuevo componente electrónico: el relé. El relé es un dispositivo electromecánico. Esto quiere decir que es como un

WWW.LINUX- MAGAZINE.ES

interruptor típico de nuestra casa pero controlado de manera eléctrica, gracias a la ayuda de un electroimán. Es un dispositivo muy útil, ya que nos permite, con una tensión baja (5 voltios), controlar tensiones y potencias mucho mayores. Podemos encontrar numerosos tipos de relés o módulos que trabajan con ellos y son compatibles con Arduino en la página web de Cooking Hacks. Pero para este proyecto únicamente presentaremos dos de ellos por su sencillez y utilidad. El módulo con el que principalmente vamos a trabajar es el Relay Module (Arduino Compatible) (Figura 1) [1]: una pequeña placa que nos permite controlar un equipo eléctrico actuando sobre

Figura 1: Relay module (Arduino Compatible).


Arduino • HARDWARE

Figura 3: Esquema conexión relé.

Figura 2: Relay Shield.

su línea de alimentación. Al ser modular, se conecta de manera sencilla a Arduino y se puede controlar con una simple salida digital. Si tuviéramos que controlar numerosos dispositivos podríamos recurrir al Relay Shield (Figura 2) [2]. Se trata de un módulo, muy similar al anterior, que incluye cuatro relés para aplicaciones de control en baja y alta tensión. Especialmente diseñado para aplicaciones de robótica, control industrial o domótica. Podéis encontrar también un tutorial

en Arduteka [3], con un ejemplo en el que se utiliza el relé con otras tensiones de alimentación, desconectando un Arduino en función de la temperatura.

Diseño del Hardware Como nos hemos decidido a trabajar únicamente para estos ejemplos con un sólo relé, vamos a explicar cómo debemos conectarlos tanto en el lado de baja tensión, como en el de la red. De manera similar podemos conectar varios relés en el Relay Shield.

Comenzaremos explicando la parte común para cualquiera de los ejemplos, que es la conexión del dispositivo eléctrico a la red. Debemos tratar la parte de alta tensión como un simple interruptor, de manera de que si lo colocamos en un cable, cuando no apliquemos tensión, el cable estará cortado, pero si aplicamos tensión en el relé, el cable conducirá la electricidad. (Figura 3) En el módulo con el relé podemos encontrar dos conectores, uno de ellos

Listado 1: Control de luces vía Twitter 001 //Añadimos la librerías que vayamos a utilizar 002 #include <SPI.h> 003 #include <Ethernet.h> 004 005 // Variables estáticas 006 int rele = 7; // Declaramos la variable pin del relé 007 008 // Variables dinámicas 009 int estadoLuz = 0; // Variable para estado del relé 010 011 // Definimos la MAC y la IP del servidor 012 // Identificador del módulo Ethernet: 013 byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x20, 0x71 }; 014 // Dirección IP asignada al Arduino Ethernet Shield: 015 IPAddress ip(192,168,1,203); 016 017 // Inicializa el modo de trabajo 018 EthernetClient client; 019 020 // Delay entre peticiones 021 const unsigned long requestIn-

terval = 10000; 022 023 // Twitter URL 024 char serverName[] = “api.twitter.com”; 025 026 boolean requested; 027 unsigned long lastAttemptTime = 0; 028 029 //Cadenas para almacenar texto 030 String currentLine = “”; 031 String tweet = “”; 032 String encenderLuz = “>ENCENDER LUZ by LuisMartin”; 033 String apagarLuz = “>APAGAR LUZ by LuisMartin”; 034 035 boolean readingTweet = false; 036 037 void setup() { 038 // Reservar espacio para las cadenas 039 currentLine.reserve(256); 040 tweet.reserve(150); 041 042 // Inicializa el pin del relé como salida:

WWW.LINUX- MAGAZINE.ES

043 pinMode(rele, OUTPUT); 044 045 // Inicializa el puerto serie: 046 Serial.begin(9600); 047 48 // Conexión DHCP: 049 Serial.println(“Obteniendo dirección IP mediante DHCP”); 050 if (!Ethernet.begin(mac)) { 051 // Si falla la conexión: 052 Serial.println(“Fallo al obtener dirección IP mediante DHCP, intentando de manera manual”); 053 Ethernet.begin(mac, ip); 054 } 055 Serial.print(“My address:”); 056 Serial.println(Ethernet.local IP()); 057 // Conexión a Twitter: 0058 connectToServer(); 059 } 060 061 void loop() 062 { 063 if (client.connected()) { 064 if (client.available()) {

Número 86

59


HARDWARE • Arduino

Figura 4: Conexión relé.

blanco con un conector especial, que servirá para enviar la señal de control del relé, y otro verde atornillable, que es el que vamos a utilizar para trabajar con la corriente alterna. En el conector verde encontraremos cuatro posibles conexiones con distintos nombres: 1. COM: la entrada positiva del cable.

2. N/A: no conectado / no se utiliza. 3. NC: normalmente cerrado, lo que significa que cuando el relé no recibe señal de encendido, está el interruptor cerrado, por lo tanto hay conexión eléctrica y la lámpara está encendida. 4. NO: normalmente abierto (open), lo que significa que cuando el relé no recibe señal de encendido, está el interruptor abierto, por lo tanto no hay conexión eléctrica y la lámpara está apagada. Para el caso general, como podemos ver en la Figura 3, utilizaremos COM con la señal que viene de la red y NO al dispositivo eléctrico (de manera que si no

Figura 5: Circuito control de luces inalámbrico .

aplicamos señal de control, la lámpara estará apagada). Por otro lado está el conector blanco, en el que encontramos la señal de control, la alimentación (5voltios) y la masa (GND). Conectaremos entonces alimentación y masa en sus respectivos pines de Arduino y la señal de control en una salida digital libre (ver Figura 4).

Listado 1: Control de luces vía Twitter (Cont.) 065

// Lectura de los datos recibidos 066 char inChar = client.read(); 067 currentLine += inChar; 068 069 // Comprobar si recibimos una nueva línea 070 if (inChar == ‘\n’) { 071 currentLine = “”; 072 } 073 // Comprobar la aparición de “<text>” como inicio de tweet 074 if ( currentLine.endsWith(“<text>” )) { 075 // Limpiar cadena de tweet, ya que comienza 076 readingTweet = true; 077 tweet = “”; 078 } 079 // Recepción del tweet: 080 if (readingTweet) { 081 if (inChar != ‘<’) { 082 tweet += inChar; 083 } 084 else { 085 // Comprobar la aparición de “<” como final de tweet 086 readingTweet = false;

60

Número 86

087 088

Serial.println (“---------------“); 089 Serial.println(tweet); 090 091 // Comparo el tweet con la variable de encendido 092 if (tweet == encenderLuz) { 093 estadoLuz = HIGH ; 094 digitalWrite(rele,estadoLuz) ; 095 } 096 // Comparo el tweet con la variable de apagado 097 if (tweet == apagarLuz) { 098 estadoLuz = LOW ; 099 digitalWrite(rele,estadoLuz) ; 100 } 101 102 // Cerrar la conexión 103 client.stop(); 104 105 } 106 } 107 } 108 } 109 else if (millis() - lastAt-

WWW.LINUX- MAGAZINE.ES

temptTime > requestInterval) { // Si han pasado dos minutos desde la última conexión, reconectar 111 connectToServer(); 112 } 113 } 114 115 void connectToServer() { 116 // Conexión al servidor 117 Serial.println(“Conectando al servidor...”); 118 if (client.connect(serverName, 80)) { 119 Serial.println(“Haciendo solicitud HTTP...”); 120 // Solicitud HTTP GET a Twitter 121 client.println(“GET /1/statuses/user_timeline.xml?scree n_name=LuisMartinNuez&count=1 HTTP/1.1”); 122 client.println(“HOST: api.twitter.com”); 123 client.println(); 124 } 125 lastAttemptTime = millis(); 126 }

110


Arduino • HARDWARE

Figura 6: Circuito control de luces Ethernet.

Los ejemplos que vamos a trabajar son muy similares a otros que ya hemos visto en anteriores artículos, la única diferencia es que en esos casos actuábamos sobre un LED y en este caso, sobre el relé. Debemos utilizar pines I/O de Arduino que no estén ocupados por los otros módulos que vamos a utilizar. El primer ejemplo es prácticamente idéntico al de control de un LED por medio de un pulsador de manera inalámbrica que vimos en el artículo “Hogar en Red” [4], con la única diferencia de que, en este caso, lo que controlaremos será el estado de la luz de nuestro hogar, desde otra habitación y sin tener que levantarnos (ver Figura 5), Para el segundo ejemplo, necesitaremos modificar de manera similar el circuito del ejemplo que vimos en el artículo citado en el párrafo anterior en el que interactuábamos con Twitter. (Figura 6). Vistos estos dos sencillos ejemplos, pasaremos a la parte del código, que tampoco es complicada.

Programación Es tan sencilla en este caso la parte de programación que, para el primer ejemplo de control de la luz vía inalámbrica, únicamente debemos utilizar el mismo código que utilizamos para controlar el

Figura 8: “Tweets” de control de las luces.

LED, cambiando si es necesario la salida digital asignada al LED por la nueva del relé. De esta manera tan sencilla podemos activar distintos dispositivos de nuestra casa, sin tener que movernos del sitio, pulsando un botón. El segundo ejemplo, sí que supone un poco más de trabajo. Partiremos del ejemplo que ya hicimos, en el que leíamos un tweet realizado por una cuenta de Twitter [5]. En este caso, en función del mensaje twitteado, realizaremos la acción de encender las luces o apagarlas. Para empezar aumentaremos el retardo que existe entre cada vez que enviamos una petición de lectura a Twitter, para así tener un control casi inmediato de las luces. // Delay entre peticiones const unsigned long U requestInterval = 10000;

Para saber si el tweet realizado se corresponde con la orden que enciende o apaga las luces, almacenaremos las “palabras clave” que indican estas acciones. Debemos definir al principio del código también las variables nuevas con las que vamos a trabajar (ver Figura 7). 01 // Variables estáticas 02 int rele = 7; // Declaramos la variable 03 // pin del relé 04 05 // Variables dinámicas 06 int estadoLuz = 0; // Variable para 07 // estado del relé 08 09 // Palabras clave 10 String encenderLuz = “>ENCENDER LUZ by LuisMartin”; 11 String apagarLuz = “>APAGAR LUZ by LuisMartin”;

Y cuando en el código hemos leído el mensaje, introducimos una comparación entre el tweet y las “palabras clave” para saber si coinciden, y si es así, realizar las acciones pertinentes, en este caso encender o apagar la luz (ver Figura 8). 01 // Comparo el tweet con la 02 //variable de encendido 03 if (tweet == encenderLuz) {

WWW.LINUX- MAGAZINE.ES

Figura 7: Lectura Twitter monitor serie.

04 estadoLuz = HIGH ; 05 digitalWrite(rele, estadoLuz); 06 } 07 // Comparo el tweet con la 08 // variable de apagado 09 if (tweet == apagarLuz) { 10 estadoLuz = LOW ; 11 digitalWrite(rele, estadoLuz);

De esta manera, podremos elegir desde internet cuándo encender las luces. Por ejemplo, de nuestro salón, para hacer creer a los vecinos que estamos en casa sin realmente estar.

Casa domótica: siguientes pasos Podéis usar distintos sensores para controlar dispositivos eléctricos, sin que tengan que estar activados por nosotros. Por ejemplo, por medio de un sensor de luz, como con el que ya hemos trabajado (LDR), podemos activar las luces de tu cuarto cuando esté anocheciendo. En el siguiente artículo, nos centraremos en otra parte de la casa, el jardín. Si queréis controlar el buen estado de las plantas de vuestra terraza o balcón, no os lo podéis perder. ■

RECURSOS [1] Relay Module (Arduino Compatible): http://www.cooking-hacks.com/ index.php/relay-module-arduinocompatible.html [2] Relay Shield: http://www.cooking-hacks.com/ index.php/relay-shield.html [3] Arduteka Tutorial: http://www.arduteka.com/2011/12/ tutorial-arduino-0007-desconexion-p or-temperatura-con-display-mcp970 0/ [4] Casa en Red, de Luis Martín, Linux Magazine número 85, pg. 58. [5] Twitter de control: https://twitter.com/LuisMartinNuez

Número 86

61


058-061_Arduino_LM86