- 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.
DuinoBlog
martes, 9 de julio de 2013
Mas cambios
Volvemos a cambiar mas cosas:
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,
- >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:
- Temperatura ext.
- Litros restantes del deposito.
- Gestion de riego a demanda o segun valores de los higrometros.
- Electrovalvulas para separar dos zonas de riego, cada una con un higrometro.
- 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.
- Además vamos a utlizar una placa de rele y yo hacerlo nosotros como escribimos en entradas anteriores.
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>");
}
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">
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.
<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.
Cuando lo tengamos en las manos actualizaremos.
Suscribirse a:
Entradas (Atom)