Domótica

Una de las aplicaciones más deseadas por la gente en el mundillo de la electrónica es la domótica. Controlar las luces, persianas, el aire acondicionado (los suertudos que tengáis)… desde tu propio móvil es hoy en día una realidad.

Utilizando una ethernet shield y un relé, podemos construir un portal de control de una casa, en la que pode controlar diferentes variables, podríamos por ejemplo controlar el enchufe de la TV, y reducir el consumo fantasma debido al Standby.

[code lang=”arduino”]
/*
* Servidor web Arduino
* para controlar un rele desde LAN
* utilizando una Ethernet Shield
* basada en el W5100
* Codigo original en;
* http://pastebin.com/J93LxsRq
*/

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // mac
byte ip[] = { 192, 168, 1, 177 }; // ip lan
byte gateway[] = { 192.168, 1, 1 }; // router
byte subnet[] = { 255, 255, 255, 0 }; //mascara de subred
EthernetServer server(80);

String readString;

//////////////////////

void setup(){
pinMode(2, OUTPUT); //Pin para control del servo
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
Serial.println("server LED test 1.0"); // debuging
}

void loop(){
// Conexion con cliente
EthernetClient client = server.available();
if (client) {
while (client.connected()) {
if (client.available()) {
char c = client.read();
//HTTP request char a char
if (readString.length() < 100) {
//buffer
readString += c;
//Serial.print(c); //debuging
}
//fin HTTP request
if (c == ‘\n’) {
//Serial.println(readString); //debuging
client.println("HTTP/1.1 200 OK"); //new page
client.println("Content-Type: text/html");
client.println();
client.println("<!doctype html public \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">");
client.println("<html>");
client.println(" <head>");
client.println(" <meta name=’apple-mobile-web-app-capable’ content=’yes’ />");
client.println(" <meta name=’apple-mobile-web-app-status-bar-style’ content=’black-translucent’ />");
client.println(" <title>DomoDuino</title>");
client.println(" <style type=\"text/css\" >");
client.println(" body {");
client.println(" margin:50px 0px;");
client.println(" padding:0px;");
client.println(" text-align:center;");
client.println(" }");
client.println(" h1 {");
client.println(" text-align: center;");
client.println(" font-family:\"Trebuchet MS\",Arial, Helvetica, sans-serif;");
client.println(" }");
client.println(" a {");
client.println(" text-decoration:none;");
client.println(" width:75px;");
client.println(" height:50px;");
client.println(" border-color:black;");
client.println(" border-top:2px solid;");
client.println(" border-bottom:2px solid;");
client.println(" border-right:2px solid;");
client.println(" border-left:2px solid;");
client.println(" border-radius:10px 10px 10px;");
client.println(" -o-border-radius:10px 10px 10px;");
client.println(" -webkit-border-radius:10px 10px 10px;");
client.println(" font-family:\"Trebuchet MS\",Arial, Helvetica, sans-serif;");
client.println(" -moz-border-radius:10px 10px 10px;");
client.println(" background-color:#525252;");
client.println(" padding:8px;");
client.println(" text-align:center;");
client.println(" }");
client.println(" a:link {color:white;} /* unvisited link */");
client.println(" a:visited {color:white;} /* visited link */");
client.println(" a:hover {color:white;} /* mouse over link */");
client.println(" a:active {color:white;} /* selected link */");
client.println(" </style>");
client.println(" </head>");
client.println(" <body>");
client.println(" <h1>Home Automation</h1>");
client.println(" <hr />");
client.println(" <br />");
client.println(" <a href=\"/?lighton\">Turn On Light</a><a href=\"/?lightoff\">Turn Off Light</a>");
client.println(" </body>");
client.println("</html>");
delay(1);
//stopping client
client.stop();
/* control arduino pin*/
if(readString.indexOf("?lighton") >0){// on
digitalWrite(2, HIGH);
Serial.println("Led On");
}
else{
if(readString.indexOf("?lightoff") >0){// off
digitalWrite(2 , LOW);
Serial.println("Led Off");
}
}
//Limpiar buffer
readString="";
}
}
}
}
}
[/code]

Con este código, podemos conectar un relé al pin 2 de nuestro arduino y encender un flexo, como hicimos en la Inforgames.

Este código está sacado de http://chriscosma.co.cc/, el enlace es a pastebin, su web no está operativa.

Domoduino atacado por una mantis
Arduino con ethernet shield controlando un flexo con un relé. La mantis se unió a la fiesta, posando como una reina xD

En breve, pondré el esquema de control del relé.

7 opiniones en “Domótica”

  1. Buenas Pepe.

    Primero ke me encanta tu blog.
    Me encantaria que le dieras un vistazo a este proyecto de domotica con arduino ke he desarrollado.
    Se maneja con ardroid y utiliza un arduino mega para programar horarios ambientes…..

    Puedes verlo en el siguiente enlace.. Espero que te guste.
    Domotica Arduino

  2. Gracias Robert.
    Llevas un pedazo de proyecto a cuestas, es brutal! Suerte con él.
    En cuanto pueda, le echo un vistazo, porque tiene muy buena pinta. ¡Ánimo con él!

    1. Me alegro que te guste….por cierto voy a sacar una actualización la cual permitirá manejar todos los dispositivos que utilicen mando a distancia desde tu telefono android.

      Me tenias que ver “to” perro tirao en el sofa y diciéndole al telefono que me ponga tal canal … mas vago no puede ser uno. :-))

      Un saludo.

  3. Hola pepeChorva, disculpa soy nuevo en esto, aun me fallan muchas cosas, pero me gusta, espero y puedas ayudarme. Quisiera controlar un relay usando arduino+ethernet shield para un proyecto de la escuela, pero no solo con los típicos botones de ON/OFF sino agregar otros mas (botones) que activen mi relay durante un periodo de tiempo establecido, por ejemplo: que un boton diga: ON_1_hora y otro botón diga ON_2_horas, etc. y que después de ese lapso de tiempo se apague…Te agradecería mucho si pudieses ayudarme con eso. Saludos!

    Pd. he logrado controlar mi relay pero solo con dos botones (ON/OFF), y por mas que intento no logro agregar los demás.

  4. Hola César, para tener activo un relé durante una hora o más deberías usar interrupciones por timers (internas).
    Ese punto no lo tengo explicado, pero puedes encontrar ejemplos por la web.

    Tendrías el botón de ON_1_hora, en el cual, haces el encendido del relé y activas el timer para que haga OFF del relé pasado el tiempo. De esta forma, te despreocupas del relé y el arduino puede estar en otras tareas (estar pendiente de otros botones).

Comentarios cerrados.