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.

 

lunes, 27 de agosto de 2012

Primeras pruebas con lcd

Ya lo tenemos conectado, ahora toca probar codigo, como el proyecto va enfocado al control por tiempo, vamos a probar la libreria time.h, (http://arduino.cc/playground/Code/Time), para empezar vamos a utilizar las siguientes funciones:

hour(); // la hora desde la puesta a 0 (0-23)
minute(); // minutos desde la puesta a 0 (0-59)
second(); // segundos desde la puesta a 0 (0-59)

Con un if() podemos controlar cuando queremos que pase algo,

if( hora()= 9){
Lo que queramos que suceda
}

También tenemos otra libreria TimeAlarms.h pero la dejaremos para más adelante.

Una vez que tengamos el codigo, solo nos falta utilizar la funcion de la libreria LiquidCrystal.h,
enlace.

De esta libreria empezaremos por lo básico:

clear()
print()
setCursor()


// incluimos las librerías.
#include <LiquidCrystal.h>
#include <Time.h>


// inicializamos la lcd en los pins utilizados
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int led = 13;

void setup() {
// configuramos el tamaño de la pantalla
lcd.begin(16, 2);




pinMode(led, OUTPUT);



}

void loop() {

// situamos el cursor

lcd.setCursor(0, 1);


lcd.print("h ");
lcd.print(hour());
lcd.print(" m ");
lcd.print(minute());
lcd.print(" s ");
lcd.print(second());

if (hour()==00 && minute()==1 && second()== 7){
digitalWrite(led, HIGH);
}


}




Con este código en la pantalla de la lcd se mostraría h X m Y s Z y además en el minuto 1 y segundo 7 se encendería un led (el cual no se apaga en el programa).






 

Conexion lcd

El primer paso que vamos a dar es conectar la lcd para poder ir viendo los resultados de una forma más rápida, como ya hemos visto antes mi intención es que todo se muestre y se maneje por internet, pero de momento ( y mientras llega el modulo del rj45) los sacaremos en la lcd.Para la conexión utilizaremos la información de la web oficial, enlaceUna vez hecho todo el proceso y comprobado con el código del ejemplo que todo está correcto lo meteremos en la caja estanca y cambiaremos los cables por las fichas de conexión del teléfono.

Teniendo en cuenta que si ponemos la hembra conectada a la lcd si algún día necesitamos alargar la distancia entre Arduino y la lcd solamente cambiamos el cable del teléfono.

 

domingo, 26 de agosto de 2012

Descripcion del proyecto

Vamos a tratar de gestionar el riego por goteo con arduino, entre otras funciones que sobre la marcha vayan surgiendo, vamos a tener en cuenta:

  • Frecuencia de riego.
  • Activar o desactivarlo bajo demanda, en un futuro por internet, aunque de momento las modificaciones se haran en el codigo.
  • Visualizar la temperatura.
  • Y como el riego es con deposito, avisar y no poner en funcionamiento la bomba si no hay agua o el nivel es insuficiente.
  • Mostrar distinta informacion en la pantalla lcd.
Materiales:

  • Arduino uno.
  • Lcd.
  • Arduino Ethernet.
  • Cajas estancas para el acabado.
  • Bomba de riego.
  • Cables, led, rele, y demás componentes.
  • Clavijas hembra y machos de telefono para las conexiones y así tener mas flexibilidad respecto a la distancia, ya que bastaría con poner un cable más largo entre las distintas partes que forman el sistema.