lunes, 29 de octubre de 2012

Avances

Ya tenemos la conexión en ambos sentidos y recibimos el dato que le pedimos tanto en un lado como en otro.

Codigo de la pagina web


<html>

 <body>

<?php
if(isset($_GET['modTiempo'])){
?>
<form method=get name=LED action="URL">

  <input type=text name=cambiartiempo>
  <input type=submit value=submit>
</form>
<?php
}

 echo "temp: ".$_REQUEST['temp'];
?>

     <form method=get name=LED action="URL">
<input type=radio name=opcion value=LED>LED ON<br>
<input type=radio name=opcion value=TEMP>TEMPERATURA<br>
<input type=radio name=opcion value=TIEMPO>MOD. TIEMPO 
<input type=submit value=submit>
      </form>
 </body>

</html>


Extracto de codigo de arduino, gestiona las peticiones:

if(readString == ("GET /?opcion=TIEMPO HTTP/1.1") ) //MOD TIEMPO

                  
    sprintf(url, "URL");
   sprintf(meta, "<meta http-equiv='Refresh'     content='0;url=%s'>", url);
                    
                    
  client.println("HTTP/1.1 200 OK");
  client.println("<body><html>");
  client.println("Content-Type: text/html");
  client.println();
  client.println(meta);      
  client.println("</body></html>");
 }
 else if(readString.substring(6,19) == ("cambiartiempo") )
 {
  int Triego = readString.substring(20,22).toInt();
  modificarTiempo(Triego);
                    
  //redireccionar a la web
  client.println("HTTP/1.1 200 OK");
  client.println("<body><html>");
  client.println("Content-Type: text/html");
  client.println();
  client.println("<meta http-equiv='Refresh' content='0;url= URL'>");      
  client.println("</body></html>");
                    
 }
  else if(readString == ("GET /?opcion=LED HTTP/1.1") )
  {
  //led has to be turned ON
   digitalWrite(ledPin, HIGH);    // set the LED on
                     
   //redireccionar a la web
  client.println("HTTP/1.1 200 OK");
  client.println("<body><html>");
  client.println("Content-Type: text/html");
  client.println();
  client.println("<meta http-equiv='Refresh' content='0;url= URL'>");      
  client.println("</body></html>");
                    
 }
  else if(readString == ("GET /?opcion=TEMP HTTP/1.1") ) //PEDIR TEMPERATURA
 { 
 //CONSTRUIMOS LA URL PARA LA REDIRECCION
 sprintf(url, "URL?temp=%d", tempValor);
 sprintf(meta, "<meta http-equiv='Refresh' content='0;url=%s'>", url);
 //redireccionar a la web
  client.println("HTTP/1.1 200 OK");
  client.println("<body><html>");
  client.println("Content-Type: text/html");
  client.println();
  client.println("<meta http-equiv='Refresh' content='0;url= URL'>");      
  client.println("</body></html>");
                    
}
else{
   //led has to be turned OFF
   digitalWrite(ledPin, LOW);    // set the LED OFF
                     
   //redireccionar a la web
  client.println("HTTP/1.1 200 OK");
  client.println("<body><html>");
  client.println("Content-Type: text/html");
  client.println();
  client.println("<meta http-equiv='Refresh' content='0;url= URL'>");      
  client.println("</body></html>");
}
                    

viernes, 12 de octubre de 2012

Comunicación Arduino -> Web

Una vez que estamos dentro de arduino y una vez obtenidos los datos necesarios tenemos que enviarlos a la web para ser tratados, para esto tenemos varias opciones:

  • Un formulario en el que la propiedad action mande a la web.
  • Otra opción es utilizar la etiqueta <meta http-equiv="Refresh" content="5;url=xxxxxxxxxx">
Cualquiera de estas dos opciones hay que ponerlas dentro de client.println(""); para que se ejecuten como etiquetas html.

Comunicación Web -> Arduino

Este es el formulario en html que esta en el servidor, las XXX corresponden a la ip publica seguida del puerto que previamente hemos redireccionado en nuestro router hacia la ip interna asignada a arduino.


<html>
<body>

<form method=get name=LED action="http://XX.X.XX.XXX:YYYY">
<input type=checkbox name=L value=1>LED<br>
<input type=submit value=submit>
</form>
</body>
</html>

Y este el código de arduino:


if(readString == ("GET /?L=1 HTTP/1.1") )
{
//led has to be turned ON
digitalWrite(ledPin, HIGH); // set the LED on

LEDON = true;
}

Simplemente comprueba lo que tiene la variable L.



 

jueves, 13 de septiembre de 2012

Cambios en el proyecto

Vamos a añadir un modulo nuevo, es un reloj en tiempo real, puesto que era casi imposible controlar la hora ya que cada vez que se reinicie se pone a las 0:00 y esto puede suponer un descontrol total del proyecto.

 

Cuando lo tengamos en las manos actualizaremos.

Continuando con la última entrada

Como planteamos en la entrada anterior, en un enchufe doble de superficie hemos puesto un termómetro para saber la temperatura exterior y un led que nos indique cuando esta funcionando el rele. El enchufe de la derecha es el controlado por arduino y el otro un enchufe normal.

Detalle del interior de los enchufes. En la parte de arriba tenemos el led y abajo el termómetro.

 

Detalle del termómetro.

Led encendido.

 

Ya cerrado con las conexiones terminadas.
 

Para evitar que con la lluvia entre agua, sellamos todo con cola caliente, tanto las uniones como las soldaduras y conectores.

 

sábado, 8 de septiembre de 2012

Termómetro y led exterior

Aprobechando que el conector del telefono tiene 4 cables y el rele solo utiliza 3, vamos a añadir un termometro, utilizaremos el lm35, aprobechando la corriente de los cables del rele.

Además conectamos a los pines del rele un led que nos indique cuando está en funcionamiento, y asi poder descartar posibles fallos de la bomba.

Suponiendo que tenemos conectado el lm35 al analogico 0. El siguiente codigo nos convierte las lecturas del lm35 a grados centigrados.

Temp=(5*analogRead(A0)*100/1023.0);





Para imprimir este dato utilizaremos la lcd de la siguiente forma,

lcd.print("Temperatura actual: ");


lcd.print(Temp);

lcd.print(" C.");

Los que nos daria como resultado: Temperatura actual: 30 C.

lunes, 3 de septiembre de 2012

Conexión bomba-arduino

Para conectar la bomba es necesario utilizar un relé, de 5v y salida libre, cuya función principal es hacer de interruptor del circuito de 220v a la señal de la parte de 5v, en este caso dicha señal la manda Arduino. En el siguiente esquema podemos ver el circuito del relé.

 

 

El rele está formado por 6 pines, los dos de arriba los "normalmente cerrados", es decir normalmente apagado lo que conectemos, los pines de abajo los normalmente abiertos y los de enmedio conectados mediante una bobina, son los que le conectaremos el arduino.

 

 

 

Para el circuito de conexión con arduino utilizaremos el ejemplo de la web oficial, http://www.arduino.cc/es_old/Tutoriales/Rele , en el cual vemos el siguiente esquema de conexión,


 

Como la idea es que se quede todo totalmente estanco, utilizaremos enchufes en superficie en concreto dos, uno que actue como enchufe normal y otro controlado desde arduino al cual le añadiremos un led de alta intensidad que se encienda cada vez que se active el rele. Como en los demás casos, para la conexion utilizaremos clavijas telefonicas.

 

 

Para probarlo vamos a modificar el codigo del ejemplo:

Código fuente

 int relayPin = 8;                 // PIN al que va conectado el relé
 void setup(){
 pinMode(relayPin, OUTPUT);
 }
 void loop() {
 digitalWrite(relayPin, HIGH);   // ENCENDIDO 
 delay(1000); 
 digitalWrite(relayPin, LOW);    // APAGADO 
 delay(1000);
    }
Este apaga y enciende el aparato que tengamos enchufado.