Luces de casa con Arduino

Hace algún tiempo colgué en youtube un video de como controlar el alumbrado de 220V con una placa arduino y un iPhone, y ya que mas de una persona me ha preguntado .. voy a hacer un tutorial para que todos podáis probar si estáis interesados.

En primer lugar, vamos a necesitar: Una placa Arduino. Un Mac o Pc con Processing Un Regulador electrónico para luces de 220V y un poco de ganas de enredar… Vamoa a comenzar con el montaje de la placa Arduino y los componentes que vamos a usar. Voy a realizar el esquema, para una sola salida, en el caso que voy a mostrar, están programadas 11 salidas, pero el esquema es solo de una de ellas, las demás serían exactamente iguales pero en diferente salida del Arduino.

Captura de pantalla 2012-03-17 a la(s) 10.39.00

Una Vez que tenemos nuestro esquema de conexiones, programaremos la placa arduino con el siguiente código.

// Principio código Arduino

int message = 0;
int salida_salon11 = 2;
int salida_dormitorio11 = 3;
int salida_dormitorio21 = 4;
int salida_dormitorio31 = 5;
int salida_terraza1 = 6;
int salida_pasillo1 =7;
int salida_pasillo2 =8;
int salida_aseo1 =9;
int salida_aseo2 =10;
int salida_cocina1 =11;
int salida_tendedero1 =12;

void setup()
{
  Serial.begin(9600);  //set serial to 9600 baud rate
  pinMode (salida_salon11,OUTPUT);
  pinMode (salida_dormitorio11,OUTPUT);
  pinMode (salida_dormitorio21,OUTPUT);
  pinMode (salida_dormitorio31,OUTPUT);
  pinMode (salida_terraza1,OUTPUT);
  pinMode (salida_pasillo1,OUTPUT);
  pinMode (salida_pasillo2,OUTPUT);
  pinMode (salida_aseo1,OUTPUT);
  pinMode (salida_aseo2,OUTPUT);
  pinMode (salida_cocina1,OUTPUT);
  pinMode (salida_tendedero1,OUTPUT);

}

void loop()
{
if (Serial.available() > 0)
  {
     message = Serial.read();    //  Put the serial input into the message

//***********  Codigo de los pulsadores  ****************

             if (message == '1')
       {
         digitalWrite (salida_salon11,HIGH);
       }
         else
      {
         digitalWrite (salida_salon11,LOW);
      }

              if (message == '2')
       {
         digitalWrite (salida_dormitorio11,HIGH);
       }
       else
       {
         digitalWrite (salida_dormitorio11,LOW);
       }

              if (message == '3')
       {
        digitalWrite (salida_dormitorio21,HIGH);
       }
       else
       {
        digitalWrite (salida_dormitorio21,LOW);
       }

              if (message == '4')
       {
        digitalWrite (salida_dormitorio31,HIGH);
       }
       else
       {
        digitalWrite (salida_dormitorio31,LOW);
       }

              if (message == '5')
       {
        digitalWrite (salida_terraza1,HIGH);
       }
       else
       {
        digitalWrite (salida_terraza1,LOW);
       }

              if (message == '6')
       {
        digitalWrite (salida_pasillo1,HIGH);
       }
       else
       {
        digitalWrite (salida_pasillo1,LOW);
       }

              if (message == '7')
       {
        digitalWrite (salida_pasillo2,HIGH);
       }
       else
       {
        digitalWrite (salida_pasillo2,LOW);
       }

              if (message == '8')
       {
        digitalWrite (salida_aseo1,HIGH);
       }
       else
       {
        digitalWrite (salida_aseo1,LOW);
       }

              if (message == '9')
       {
        digitalWrite (salida_aseo2,HIGH);
       }
       else
       {
        digitalWrite (salida_aseo2,LOW);
       }

              if (message == 'A')
       {
        digitalWrite (salida_cocina1,HIGH);
       }
         else
       {
        digitalWrite (salida_cocina1,LOW);
       }

              if (message == 'S')
       {
        digitalWrite (salida_tendedero1,HIGH);
       }
       else
       {
        digitalWrite (salida_tendedero1,LOW);
       }

   }
}

// Fin código Arduino

Ahora vamos a programar el código para processing...

//inicio código de processing
import oscP5.*;
import netP5.*;
import processing.serial.*;
OscP5 oscP5;
Serial arduinoPort;       

float dato;
int salon11;
int dormitorio11;
int dormitorio21;
int dormitorio31;
int terraza1;
int pasillo1;
int pasillo2;
int aseo1;
int aseo2;
int cocina1;
int tendedero1;

String salida= "";

void setup()
{
  oscP5 = new OscP5(this,8000);
  arduinoPort = new Serial(this, Serial.list()[0], 9600);
}

void oscEvent(OscMessage theOscMessage)
{
   String addr = theOscMessage.addrPattern();
   float  val  = theOscMessage.get(0).floatValue(); 

 if(addr.equals("/1/salon11"))
 {
   //dato = val; 
   salon11 = int (val);
   if (salon11==1)
    {
      arduinoPort.write("1");
    }
   else
    {
      arduinoPort.write("0");
    }
  }

 if(addr.equals("/1/dormitorio11"))
 {
   //dato = val; 
   dormitorio11 = int (val);
   if (dormitorio11==1)
    {
      arduinoPort.write("2");
    }
    else
    {
      arduinoPort.write("0");
    }
 }

if(addr.equals("/1/dormitorio21"))
 {
  //dato = val; 
  dormitorio21 = int (val);
     if (dormitorio21==1)
    {
      arduinoPort.write("3");
    }
    else
    {
      arduinoPort.write("0");
    }
 }   

if(addr.equals("/1/dormitorio31"))
{
  //dato = val; 
  dormitorio31 = int (val);
     if (dormitorio31==1)
    {
      arduinoPort.write("4");
    }
    else
    {
      arduinoPort.write("0");
    }
 } 

if(addr.equals("/1/terraza1"))
{
  //dato = val; 
  terraza1 = int (val);
     if (terraza1==1)
    {
      arduinoPort.write("5");
    }
    else
    {
      arduinoPort.write("0");
    }
 } 

if(addr.equals("/1/pasillo1"))
{
  //dato = val; 
  pasillo1 = int (val);
     if (pasillo1==1)
    {
      arduinoPort.write("6");
    }
    else
    {
      arduinoPort.write("0");
    }
}

if(addr.equals("/1/pasillo2"))
{
  //dato = val; 
  pasillo2 = int (val);
     if (pasillo2==1)
    {
      arduinoPort.write("7");
    }
    else
    {
      arduinoPort.write("0");
    }
} 

if(addr.equals("/1/aseo1"))
{
 // dato = val; 
  aseo1 = int (val);
     if (aseo1==1)
    {
      arduinoPort.write("8");
    }
    else
    {
      arduinoPort.write("0");
    }
}   

if(addr.equals("/1/aseo2"))
{
  //dato = val; 
  aseo2 = int (val);
     if (aseo2==1)
    {
      arduinoPort.write("9");
    }
    else
    {
      arduinoPort.write("0");
    }
}

if(addr.equals("/1/cocina1"))
{
  //dato = val; 
  cocina1 = int (val);
     if (cocina1==1)
    {
      arduinoPort.write("A");
    }
    else
    {
      arduinoPort.write("0");
    }
}

if(addr.equals("/1/tendedero1"))
{
  //dato = val; 
  tendedero1 = int (val);
     if (tendedero1==1)
    {
      arduinoPort.write("S");
    }
    else
    {
      arduinoPort.write("0");
    }
}

}

void draw()
{

}
//Fin código de processing

Ya tenemos todo nuestro código, así que solo nos queda tener instalado en nuestro iphone TouchOSC y una vez instalado

descargaremos desde aqui, el layout para el iphone, y aquí el del ipad, correspondiente a este proyecto.
(están incluidos todos los archivos necesarios)
Y para los que no habéis visto el resultado , aquí dejo el video...
Anuncios

17 Respuestas a “Luces de casa con Arduino

  1. Tienes razón, el archivo se perdió con el cambio de servidor… Lo intentaré recuperar de alguna de las copias de seguridad …
    En cuanto esté disponible , lo postearé aquí en un comentario.
    Gracias por avisar.

  2. Hola muy buenas.
    eso mismo es lo que quiero montar yo en casa, que regulador has usado? es de compra o te lo has hecho tu?
    con que te comunicas con la tablet a la arduino?
    perdon por tanta pregunta es que soy nuevo en arduino,

    • Muy buenas , el regulador de luz es un regulador comercial que se usa en vivienda , sólo que he sustituido el pulsador manual por un mini rele conectado a la placa arduino…
      La comunicación entre la placa arduino y el iPad, esta realizada usando processing instalado en un Mac y la app touchosc… Usando una placa ethernet con chip enc28j60
      Pero si quieres un mejor control, y sin usar ningún servidor, te recomiendo usar una shield ethernet w5100 y el software netio controller da más juego.

      • ante todo gracias por la ayuda.
        un par de preguntitas.
        hay alguna manera de saber en el ipad el estado de la luz, para no tener que ir a comprobarlo, asi en una mirada sabes si tienes todas las luces de casa apagadas o te dejas alguna encendida.
        y en ese programita puedes controlar las persianas y saber si estan abiertas o cerradas o a mitad.
        gracias por todo

  3. Hola,

    Me ha gustado mucho tu proyecto, felicitaciones!, pero tengo una consulta.. en el código de arduino, las condiciones “else” se cumplirán todas no?, es decir, en el instante que se reciba un “if (message == ‘1’)” si es cierto se activará “digitalWrite (salida_salon11,HIGH);” pero también todas las condiciones “else” de los siguientes “if” no??

    Saludos,
    Antoni.

  4. Estoy empezando a manejarme con Arduino y tu proyecto me ha parecido Genial ¡¡
    Pero a mi me faltan algunas cosas para probarlo:
    1º Un diagrama de bloques de funcionamiento, a ver si es así:
    – el pc con el processing se comunica con el arduino
    – el arduino con los reles
    – el iphone con el pc o no? ¿como?
    2º El código Arduino lo cargo en la placa desde el pc oK
    3º El código processing lo cargo el el Pc con el processing, ¿Y las librerías?
    4º Instalo el TouchOSC en el ipad desde la apstore. ¿como le cargo el layout?

    Perdona si mis preguntas son muy elementale pero, estoy empezando y quizás soy demasiado ambicioso al intentar comprender de principio mas alla de encender un leed (me valdría una orientación de web para “buscarme la vida”)

    Gracias por compartir

    • PERDON, Perdon …¡
      Acabo de leer “Control de iluminación con arduino y un iPad” y creo que lo empiezo a comprender:
      El pc y el IPAD estan unidos por la wifi y el pc y el arduino por la serie.
      Me falta la bibliteca del ios para processing o el ospc5 viene con la del touchosc??
      También saber como se carga el lauyot
      Gracias

      Pd. Muy interesante lo de RICINO

    • Gracias LiSergio
      Tengo un microarduino y voy a ver si puedo controlar las seis del otro ejemplo…
      Respecto a la página que me dices delsistema domótico, paso a paso ..
      Para que te hagas una idea de lo “..” que soy ( y por si le sirve a alguien), me he pasado un par de días intentando leer en procesing la señal de un potenciómetro y no salía. Polímetro, led, cables etc y cuando ya pensaba que el arduino me lo habían vendido mal, resulta que estaba utilizando una de esas palcas de 17 cm donde las líneas del perímetro estan partidas. Puente en el medio y solucionado pero manda hhhhh.

      Un saludo y muchas gracias

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s