{"id":458,"date":"2011-02-16T10:42:18","date_gmt":"2011-02-16T09:42:18","guid":{"rendered":"http:\/\/pinguino.walii.es\/?p=458"},"modified":"2011-02-16T11:00:10","modified_gmt":"2011-02-16T10:00:10","slug":"iglu-control","status":"publish","type":"post","link":"https:\/\/pinguino.walii.es\/?p=458","title":{"rendered":"IGLU CONTROL"},"content":{"rendered":"

En principio quer\u00eda explicar el nombre\u2026 porque se me ocurri\u00f3 exactamente haciendo eso, buscando un nombre\u2026 ya que este proyecto se inicia como un control dom\u00f3tico utilizando PING\u00dcINO para comandar todos los artefactos y censar temperatura y humedad de todos los puntos de la casa. Entonces aunando PING\u00dcINO y CASA, se me ocurri\u00f3 el nombre de PROYECTO IGLU CONTROL.<\/p>\n

Me he basado en la mezcla de varias tecnolog\u00edas, como suelo hacer siempre:<\/p>\n

    \n
  1. Cliente grafico (un ordenador o tel\u00e9fono inteligente con un browser) y conexi\u00f3n a Internet.<\/li>\n
  2. Un router de borde con Linux \u00abOPENWRT\u00bb y un t\u00fanel seguro (OPENVPN\/PPTP) para recibir la conexi\u00f3n y dejar entrar en mi red privada desde cualquier parte del mundo.<\/li>\n
  3. Un servidor Linux, para centralizar toda la informaci\u00f3n recibida de los PINGUINOS, procesarla y presentarla en pantalla, a la vez tambi\u00e9n es el encargado de enviar las ordenes a cada una de los PINGUINOS (control de dom\u00f3tico de electrodom\u00e9sticos)<\/li>\n
  4. Varios m\u00f3dulos XBEE, para la comunicaci\u00f3n entre el servidor y los PINGUINOS<\/li>\n
  5. Algunos routers con Linux \u00abOPENWRT\u00bb y puertos USB para la monitorizaci\u00f3n de la actividad mediante c\u00e1maras WEB.<\/li>\n
  6. Y muchos PINGUINOS con controles de potencia, rel\u00e9s el\u00e9ctricos y sensores de temperatura, iluminaci\u00f3n y humedad.<\/li>\n<\/ol>\n

    NOTA: el punto \u00ab2\u00bb se puede obviar si solo queremos conectarnos desde nuestra misma red.<\/strong><\/p>\n

    <\/strong><\/p>\n

    \"\"\"\"\"\"
    \n
    \n<\/strong><\/p>\n

    COMENZAMOS EL PROYECTO:<\/p>\n

    Utilizando un cliente grafico (Un tel\u00e9fono inteligente o un ordenador con WIFI) nos conectamos a nuestro router de borde, este no hace mucho m\u00e1s que recibir la conexi\u00f3n, una vez conectado, el cliente abre una sesi\u00f3n con un servidor WEB, que es el encargado de centralizar toda la informaci\u00f3n enviada por los PINGUINOS que se sit\u00faan en puntos estrat\u00e9gicos de mi casa, tambi\u00e9n se encarga de enviar a cada uno las \u00f3rdenes dictadas por cada cliente conectado al servidor.<\/p>\n

    \"\"<\/p>\n

    *Imagen del control via un browser en WINDOWS.<\/p>\n

    \"\"<\/p>\n

    En este punto nos aparece en el cliente una pantalla de bienvenida que nos ofrece las opciones:<\/p>\n

    \n\n\n<\/col>\n<\/col>\n<\/colgroup>\n\n\n\n\n\n\n\n
    \n
      \n
    • Control de iluminaci\u00f3n <\/strong> <\/strong><\/li>\n<\/ul>\n

      Mediante la utilizaci\u00f3n de RELES y transistores de potencia, por ejemplo TIC 226, se pueden controlar los electrodom\u00e9sticos y la iluminaci\u00f3n de toda la casa. (se recomienda separar el\u00e9ctricamente el microcontrolador de la corriente alterna, utilizando optoacopladores)<\/td>\n

    \n

    \"\"<\/p>\n<\/td>\n<\/tr>\n

    \n
      \n
    • Control de temperaturas <\/strong> <\/strong><\/li>\n<\/ul>\n

      Mediante la utilizaci\u00f3n de sensores LM35, puedo monitorizar la temperatura en la casa, la caldera de agua caliente y el acuario.<\/td>\n

    \n

    \"\"<\/p>\n<\/td>\n<\/tr>\n

    \n
      \n
    • Monitorizaci\u00f3n de c\u00e1maras <\/strong> <\/strong><\/li>\n<\/ul>\n

      El sistema se compone tambi\u00e9n de c\u00e1maras para monitorizar cada punto en donde poseo un router con puerto USB o un servidor LINUX. En total activas siempre tengo un m\u00ednimo de 4 c\u00e1maras.<\/td>\n

    \n

    \"\"\"\"<\/p>\n<\/td>\n<\/tr>\n

    \n
      \n
    • Control de cortinas <\/strong> <\/strong><\/li>\n<\/ul>\n

      Subir y bajar las cortinas, utilizando un motor el\u00e9ctrico (algunas cortinas lo traen), y sensores infrarrojos para detectar la altura de la cortina.<\/p>\n

      Se puede medir la incidencia solar en la habitaci\u00f3n y la temperatura y regular la altura de las cortinas.<\/td>\n

    \n

    \"\"<\/p>\n<\/td>\n<\/tr>\n

    \n
      \n
    • \n
      Controles predeterminados<\/strong><\/p>\n

      <\/strong><\/p>\n<\/div>\n<\/li>\n<\/ul>\n

      Casos de emergencia, activa la alarma y desconecta servicios*.<\/p>\n

      Vacaciones, desconecta servicios.<\/p>\n

      Cerraduras, bloquea puertas y ventanas.<\/p>\n

      *Algunos de estos controles no los tengo implementado, m\u00e1s que nada porque vivo de alquiler y para realizar estas modificaciones necesito hacer reformas en la vivienda\u2026 lo dejare para m\u00e1s adelante. (Cerraduras)<\/p>\n

      *SERVICIOS: se refiere a los servicios de usos generales; agua, luz y gas. (con una simple electrov\u00e1lvula se controla el suministro)<\/td>\n

    \n

    \"\"<\/p>\n<\/td>\n<\/tr>\n

    \n
      \n
    • Control del acuario <\/strong> <\/strong><\/li>\n<\/ul>\n

      Control de iluminaci\u00f3n (horas y potencia)<\/p>\n

      Regulaci\u00f3n de cantidad y frecuencia de la Alimentaci\u00f3n (alimentador electr\u00f3nico, conectado a PING\u00dcINO)<\/p>\n

      Temperatura, mediante un rele, conectado a PING\u00dcINO y alimentado el calefactor el\u00e9ctrico.(al mismo tiempo censando la temperatura con un LM35 impermeabilizado.)<\/td>\n

    \n

    En cuanto tenga la captura lo posteo, se me paso por alto guarda esta imagen<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n

    \n

    Adem\u00e1s he incluido alg\u00fan detalle personal, por presumir un poco de equipamiento.<\/p>\n

    \n\n\n<\/col>\n<\/col>\n<\/colgroup>\n\n\n\n
    \n
      \n
    • Mediante \u00abMRTG\u00bb <\/strong> <\/strong><\/li>\n<\/ul>\n

      Monitorizaci\u00f3n de estado de la red<\/p>\n

      Velocidades de transferencias de cada puerto del router de borde<\/p>\n

      Temperaturas de los CPU de todos los involucrados (Servidor Linux, FONERAS y router de borde)<\/td>\n

    \n

    \"\"\"\"<\/p>\n<\/td>\n<\/tr>\n

    \n
      \n
    • Control del TDT <\/strong> <\/strong><\/li>\n<\/ul>\n

      Voy a presumir un poquito \u00abnomas\u00bb (ya que poseo un GIGASET con Linux modificado), se pueden:<\/p>\n

      Programar grabaciones<\/p>\n

      Ver transmisiones broadcast de televisi\u00f3n en la red<\/p>\n

      Visualizar las grabaciones realizadas a trav\u00e9s de la red y muchas cosas mas<\/p>\n

      AUN ME QUEDA PENDIENTE CUSTOMIZAR EL CSS PARA COMPATIBILIZARLO AL IPHONE<\/td>\n

    <\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n

    Una vez aqu\u00ed solo tenemos que controlar, las luces, temperatura, censar la humedad, alg\u00fan que otro electrodom\u00e9sticos, cortinas, el acuario, seleccionar las configuraciones predeterminadas para la iluminaci\u00f3n y las luces, como por ejemplo la configuraci\u00f3n CINE, la cual apaga las luces enciende el proyector y baja la pantalla de proyecci\u00f3n. Inclusive podr\u00edamos controlar la frecuencia de comida de los peces del acuario como su temperatura y configuraci\u00f3n diaria de iluminaci\u00f3n. Tambi\u00e9n tenemos las opciones de monitorizar el consumo de CPU, las descargar y el trafico en general de la red. Y adicionalmente verificar que canal se est\u00e1 visionando en el televisor y programar cualquier grabaci\u00f3n, todo desde fuera de casa, y pudiendo utilizar cualquier dispositivo que posea navegador y conexi\u00f3n a internet.<\/strong><\/p>\n

    <\/strong><\/p>\n

    PROYECTO:<\/strong><\/span><\/p>\n

    <\/strong><\/p>\n

    B\u00e1sicamente utilizo UNIX SHELL, PHP, LUA y JavaScript, no es que sea un bocho (GURU) en todos estos lenguajes, pero en internet hay mucho tutorial y manual que ayuda mucho.<\/p>\n

    La informaci\u00f3n de los PING\u00dcINO las recibo por XBEE, y cada uno informa cada minuto su identificaci\u00f3n, la informaci\u00f3n de todos sus sensores y las puertas activas.<\/p>\n

    Por ejemplo puedo recibir este mensaje: habitaci\u00f3n,1,temp,20,hum,60,luz,12,puertas,00000100<\/strong><\/span>.<\/p>\n

    Nota: los mensajes de sensores se entienden, por eso explico el \u00faltimo dato (00000100) indica que posee la puerta 6 activa, pudiendo referirse a una luz en especial. Para estos casos he resuelto una disposici\u00f3n especial para cada control. Las primeras 3 puertas controlan los electrodom\u00e9sticos o luces del lado norte de la habitaci\u00f3n, los siguiente del lado central y los \u00faltimos tres del sur de la habitaci\u00f3n. Indicando este mensaje que una luz o electrodom\u00e9stico del suroeste de la habitaci\u00f3n, se encuentra activo.<\/p>\n

    Para el caso de corte de luz, guardo esta info en el servidor, para ser enviada al PING\u00dcINO y restablecer el estado anterior de este controlador.<\/em><\/strong><\/p>\n

    <\/em><\/strong><\/p>\n

    SCRIPT DE EJECUCION DE COMANDOS VIA SERIE<\/strong><\/span><\/p>\n

    <\/strong><\/p>\n

    Esto son algunos de los scripts usados. Los cuales he copiado de mi propio proyecto RGB PING\u00dcINO http:\/\/pinguino.walii.es\/?p=18<\/a><\/p>\n

    Con un poco de imaginaci\u00f3n y esmero se pueden hacer maravillas.<\/p>\n

    Por ejemplo este es un script en LUA que env\u00eda un car\u00e1cter \u00abR\u00bb por puerto serie.<\/strong><\/p>\n

    <\/strong><\/p>\n

    [sourcecode language=\u00bbpy\u00bb]
    \n—# \/\/para rojo env\u00eda por puerto serie el car\u00e1cter "r"
    \n—#! \/usr\/bin\/lua
    \ncaracter="echo r > \/dev\/tts\/1";
    \nos.execute(caracter);<\/p>\n

    [\/sourcecode]<\/p>\n

    Y esta la pagina web que posee el bot\u00f3n para ejecutar el script:<\/strong><\/p>\n

    <\/strong><\/p>\n

    [sourcecode language=\u00bbpy\u00bb]
    \n<html>
    \n<head>
    \n<title>control de RGB via web walii.es<\/title>
    \n<\/head>
    \n<body>
    \n<h2>Control remoto RGB via web (<a href="http:\/\/blog.walii.es\/" target="_new">blog de Walii.es<\/a>)<\/h2>
    \n<p>
    \n<b>Presionando el boton activamos la salida para el color ROJO <\/b>
    \n<\/p>
    \n<table border="0" cellpadding="0">
    \n<tr>
    \n<td valign="top" width="50%">
    \n<p>
    \n<b>Este es solo para un color, necesita un poco de imaginaci\u00f3n y dise\u00f1o web para hacer el resto<\/b>
    \n<ul>
    \n<li><a href="\/cgi-bin\/rojo.lua" target="_new">ROJO<\/a><\/li>
    \n<\/ul>
    \n<\/body>
    \n<\/html><\/p>\n

    [\/sourcecode]<\/p>\n

    Con esto se supone que ustedes son capaces de hacer la web que quieran\u2026 pero para comenzar es m\u00e1s que suficiente, recuerden que el tipo de orden es la misma para PINGUINOS conectados v\u00eda serie directo que a trav\u00e9s de XBEE.<\/em><\/strong><\/p>\n

    <\/em><\/strong><\/p>\n

    CIRCUITOS:<\/strong><\/span><\/p>\n

    <\/strong><\/p>\n

    No voy a poner todos los circuitos y diagramas de cada punto de control, solo indicare en detalle uno, e incluir\u00e9 los diferentes controles.<\/p>\n

    CONTROL ILUMINACION<\/p>\n

    \"\"<\/p>\n

    CONTROL DE CORTINAS<\/p>\n

    \"\"<\/p>\n

    CONTROL DE TEMPERATURA (Hogar)<\/p>\n

    El tema del control de temperatura, lo resolv\u00ed m\u00e1s f\u00e1cilmente, controlando toda la temperatura de la casa, como tengo una caldera electr\u00f3nica, y utilizando un poco de ingenier\u00eda inversa, pude encontrar el control electr\u00f3nico por PWM que regula la temperatura. Y enviando info desde un PING\u00dcINO, puedo controlar la temperatura general. (mas adelante y con algunos aditamentos ver\u00e9 si puedo diferencia las temperaturas por zonas).<\/p>\n

    Utilizo el puerto 16 del PIC, ser\u00edan el 11 y 12 del ping\u00fcino 18f4550, los cuales son PWM.<\/p>\n

    \"\"<\/p>\n

    CONTROL TEMPERATURA ACUARIO<\/p>\n

    Para esto utilizo el mismo circuito que de iluminaci\u00f3n, combinado con un sensor de temperatura, ya que el termostato es puramente el\u00e9ctrico.<\/p>\n

    SENSORES DE TEMPERATURA, ILUMINACION Y HUMEDAD<\/p>\n

    \"\"\"\"\"\"<\/p>\n

    PROGRAMA PING\u00dcINO:<\/strong><\/span><\/p>\n

    <\/strong><\/p>\n

    El programa b\u00e1sico de los ping\u00fcinos es algo general, realizando todos m\u00e1s o menos la misma tarea.<\/p>\n

    [sourcecode language=\u00bbpy\u00bb]
    \n\/*
    \n*
    \n* IGLU CONTROL PROJECT
    \n*
    \n* Example to home remote control
    \n* With PINGUINO PIC
    \n* And received all the control information
    \n* From a XBEE and WIFI
    \n*\/<\/p>\n

    int key;
    \nint volts=5; \/\/alimentaci\u00f3n del micro, o tension de referencia si tendriamos.
    \nint name=1; \/\/nombre del pinguino
    \nint samples[10];
    \nint tempc=0;
    \nint luzc=0;
    \nint humedadc=0;
    \nint i,x,port0,port1,port2,port3,port4,port5,port6,port7;
    \nfloat val1;<\/p>\n

    void setup()
    \n{
    \nfor ( i=0 ; i <8; i++){
    \npinMode(i,OUTPUT);
    \ndigitalWrite(i,LOW);
    \n}
    \nSerial.begin(9600);
    \n}<\/p>\n

    void loop ()
    \n{
    \n\/\/controlamos temperatura, luz y humedad
    \n\/\/Temperatura
    \nfor (i=0;i<=9;i++){
    \nval1=analogRead(13);
    \nsamples[i]=(volts*val1*100)\/1024.0;
    \ntempc=tempc+samples[i];
    \n}
    \n\/\/Dividimos por la misma cantidad de lecturas
    \ntempc=tempc\/10.0;<\/p>\n

    \/\/Humedad
    \nfor (i=0;i<=9;i++){
    \nval1=analogRead(14);
    \nsamples[i]=val1\/10.0;
    \nhumedadc=humedadc+samples[i];
    \n}
    \n\/\/Obtenemos el promedio de valores
    \nhumedadc=humedadc\/10.0;<\/p>\n

    \/\/Iluminacion
    \nfor (i=0;i<=9;i++){
    \nval1=analogRead(15);
    \nsamples[i]=val1\/10.0;
    \nluzc= luzc+samples[i];
    \n}
    \n\/\/Obtenemos el promedio de valores
    \nluzc=luzc\/10.0;<\/p>\n

    \/\/Ahora vamos a escuchar el puerto serie
    \nif (Serial.available()>0){
    \nkey=Serial.read();\/\/leemos la entrada del serie
    \nif (key==’a’) digitalWrite(0,digitalRead(0)^1); \/\/Cambia el estado del Puerto 0 por su valor inverso
    \nif (key==’b’) digitalWrite(1,digitalRead(1)^1); \/\/Cambia el estado del Puerto 1 por su valor inverso
    \nif (key==’c’) digitalWrite(2,digitalRead(2)^1); \/\/Cambia el estado del Puerto 2 por su valor inverso
    \nif (key==’d’) digitalWrite(3,digitalRead(3)^1); \/\/Cambia el estado del Puerto 3 por su valor inverso
    \nif (key==’e’) digitalWrite(4,digitalRead(4)^1); \/\/Cambia el estado del Puerto 4 por su valor inverso
    \nif (key==’f’) digitalWrite(5,digitalRead(5)^1); \/\/Cambia el estado del Puerto 5 por su valor inverso
    \nif (key==’g’) digitalWrite(6,digitalRead(6)^1); \/\/Cambia el estado del Puerto 6 por su valor inverso
    \nif (key==’h’) digitalWrite(7,digitalRead(7)^1); \/\/Cambia el estado del Puerto 7 por su valor inverso
    \nport0=digitalRead(0);
    \nport1=digitalRead(1);
    \nport2=digitalRead(2);
    \nport3=digitalRead(3);
    \nport4=digitalRead(4);
    \nport5=digitalRead(5);
    \nport6=digitalRead(6);
    \nport7=digitalRead(7);
    \nSerial.print("received… OK!!!"); \/\/debug la respuesta y recepci\u00f3n del mensaje
    \nSerial.print("\\n\\r");
    \nSerial.print("habitacion,",name,", temp,",tempc,", hum,",humedadc,", luz,",luzc,", puertas,",port0,port1,port2,port3,port4,port5,port6,port7);
    \nSerial.print("\\n\\r");
    \nSerial.flush();\/\/clear the serial buffer }
    \n}
    \n}<\/p>\n

    [\/sourcecode]<\/p>\n

    ROUTERs OPENWRT y SERVIDOR LINUX UBUNTU<\/strong><\/span><\/p>\n

    <\/strong><\/p>\n

    B\u00e1sicamente estos tienen varios tipos de Scripts y programas para realizar las tareas correspondientes:<\/p>\n