martes, 9 de julio de 2013

Mas cambios

Volvemos a cambiar mas cosas:

  • El nivel de agua en el deposito lo vamos a hacer mediante ultrasonido, marcando un nivel minimo de agua con la cual regaremos y si es inferior a ese se nos enviará un mail avisandonos del problema y regaria.
  • Los vamos a centralizar todo en un arduino UNO el cual gestionara todo lo referente al riego y mandara la informacion a un arduino MEGA que sera el encargado de trasmitir la informacion al servidor en internet y mostrar los valores en pantalla.
  • Va a estar encapsulado en una caja estanca con conectores rapidos y tambien estancos, con los cuales sacar la señal a la otra caja estanca donde van a estar las electrovalvulas para cada una de las zonas de riego.
 

jueves, 24 de enero de 2013

Nivel de liquidos e Higrometro

Para poder controlar cuando regar vamos a utlizar un higrometro para medir  la humedad de la tierra, en concreto este, 

con una simple lectura del pin analógico al que lo conectemos obtenemos ciertos valores con los que debemos trabajar,

  • >1020 el higrómetro metido en seco.
  • <100   el higrómetro en agua.

También vamos a añadir al proyecto un medido de nivel de líquidos,


Siguiendo el mismo procedimiento de antes pero esta vez leyendo el pin digital, tenemos:
  • Cuando el flotador esta arriba (hay agua), devuelve el valor 1.
  • Cuando está abajo (como en la imagen), devuelve 0.
Por lo tanto comprobando ambos valores si:




  • Higrómetro >1020, estaria la planta seca por lo que debemos regar, pero si el nivel de liquido es inferior al establecido, es decir, nivel = 0, no regamos ya que aparte de que no hay agua corremos el riesgo de quemar la bomba.

  • Higrómetro <100, estaria la planta regada, este valor lo debemos adaptar midiendo una vez empecemos a regar hasta ver que valor marca cuando consideremos que la planta este suficientemente regada.





int pinNivel=48;  //Indicamos el pin al que tenemos conectado el sensor de nivel de liquido 
int higro1 = A1;// pin del higrometro
int rele= 22;  // rele pin

int nivel;
int humedad1; 


void setup()
{       
  Serial.begin(9600) ;

  //Configuramos los pines correspondientes como entradas o salidas
  
  pinMode(pinNivel,INPUT);   
  pinMode(rele, OUTPUT); 
  pinMode(higro1, INPUT); 

 digitalWrite(pinNivel, HIGH);

}

void loop()
{
   humedad1 = analogRead(higro1);
  
   nivel = digitalRead(pinNivel);
   
  Serial.print(nivel);
  Serial.print("     ");
  Serial.println(humedad1);

 if((humedad1 >= 1000) && (nivel == 1)){
    digitalWrite(rele, HIGH); 
   
  }   
 else {
   
    digitalWrite(rele, LOW); 
 }
}


martes, 15 de enero de 2013

Cambios importantes

Se han cambiado bastantes cosas desde el inicio, intentare que no se me pase ninguna.

 

  • Antes la conexion con la bomba iba a ser con un enchufe doble de superficie y ahora vamos a hacerla directamente empalmando los cables y todo dentro de una caja estanca.
  • Solo ibamos a controlar el riego y la temperatura exterior... Ya vamos por:
  1. Temperatura ext.
  2. Litros restantes del deposito.
  3. Gestion de riego a demanda o segun valores de los higrometros.
  4. Electrovalvulas para separar dos zonas de riego, cada una con un higrometro.
  5. Calefaccion del piso, con un termometro em cada habitacion dando la opcion de cambiar el de referencia,el que tenga en cuenta la caldera para apagarse al llegar a cierta temperatura ya que en el salon hace más calor con el brasero que en el dormitorio.
  6. Además vamos a utlizar una placa de rele y yo hacerlo nosotros como escribimos en entradas anteriores.
Asi es el diseño actualde la web, obviamente los valores no son reales.

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.