Sistema de riego automático con Arduino para tus plantas, huerto o jardín

Regadera regando plantas

El verano es una época en la que muchos suelen irse de vacaciones fuera y las plantas suponen un problema, ya que no se pueden regar esos días en los que no te encuentras en casa. Además, en las tiendas de jardinería suelen vender una especie de gel que permite hidratar y nutrir a la planta durante un mes aproximadamente. Pero con el calor que hace o si te vas por más de un mes, entonces necesitarás un sistema algo mejor para que cuando vuelvas sigan vivas y vigorosas.

Para que eso sea posible, la solución que existe es comprar un sistema de riego automático que puedas programar o si eres un maker y te gusta el DIY, puedes hacerlo tú mismo con Arduino. Los materiales que necesitas, a parte de la placa de Arduino, son fáciles de encontrar y bastante baratos, así que no suponen un gasto demasiado grande. Además, para algunos elementos como el tanque de agua, etc., podrías usar materiales reciclados…

Si navegas un poco por la red encontrarás diversos proyectos de este tipo, pero quizás el más interesante sea Jarduino. En ese me inspiraré para este proyecto, ya que considero que otros sistemas de riego que solo usan sensores de humedad y nada más no son tan completos.

¿Qué necesitas?

Los materiales necesarios para tu sistema de riego automático son:

  • Placa Arduino UNO, aunque valdrían otras.
  • Protoboard o PCB si quieres soldarlo y hacerlo permanente.
  • Sensor de temperatura y humedad DHT11
  • Cables
  • Sensor YL-69 de humedad en tierra con higlómetro para clavar en tu/s maceta/s o tierra.
  • Minibomba de agua sumergible de 3V y caudal aproximado de 120 l/h.
  • Diodo 1N4007
  • Transistor bipolar PN2222
  • 3 Resistencias: 1x 220 ohms, 1x 1k, 1x fotoresistencia LDR
  • Tanque de agua, que puede ser un bidón o una botella de 5 o más litros, etc.
  • Tubo para conectar a la minibomba y llevar hasta la/s planta/s

Como ideas alternativas, te diría que podrías también usar un sonoff o un módulo WiFi para activarlo por Internet desde donde te encuentres, o mejorarlo agregando también al grifo una válvula automática para programar el llenado del tanque de agua cuando se vaya vaciando, etc.

Como montar el sistema de riego automático

Esquema del montaje en Fritzing

El montaje es bastante sencillo. Puedes usar el esquema anterior para hacer todas las conexiones. Deberás posicionar tu sistema en un lugar cercano a la ventana o donde se encuentre la planta que quieres regar y clavar las dos puntas del sensor de humedad en la tierra de la planta, cerca del tallo.

El sistema de riego automático con Arduino regará siempre que detecte una serie de condiciones ambientales. Por ejemplo, cuando detecta poca luz u oscuridad, la temperatura del aire es una concreta que configuraremos en el sketch de Arduino IDE, y la humead en el suelo es baja. En ese momento activaría el motor para regar la planta.

Es recomendable regar las plantas de noche, en el momento de menor calor, ya que hacerlo durante los días intensos de calor podría perjudicar más que beneficiar…

Recuerda que deberás introducir la mini bomba bajo el agua en el tanque que hayas destinado para el riego, y que debería tener una capacidad suficiente como para aguantar los días que no estés. Puedes hacer pruebas previas para saber cuánto dura y debes dejar un poco más de agua por si se evapora con el intenso calor…

Ni que decir tiene que el tubo lo debes fijar a la planta para que no se mueva con el viento o pueda caer fuera el agua y sea desperdiciada. Y creo que tampoco sería necesario recordar que tienes que mantener un suministro de corriente a la placa Arduino para que funcione…

Programación

Ahora es cuando debes escribir el código necesario en Arduino IDE para poder programar el microcontrolador que gestione el hardware que has usado. Aquí es el momento de adaptar los valores de temperatura, humedad y luz adecuados para regar en tu zona, ya que puede variar según donde te encuentres. Pero el ejemplo que puedes usar como base es (he dejado comentarios donde podrías modificar los valores, el resto puedes dejarlo así):


#include <SimpleDHT.h>
#include <SPI.h>
#define humidity_sensor_pin A0
#define ldr_pin A5
//Bibliotecas para los módulos sensores usados necesarias
//Y definición de variables para los sensores de humedad y LDR en los pines A0 y A5

int pinDHT11 = 2;
SimpleDHT11 dht11;
int ldr_value = 0;
int water_pump_pin = 3;
int water_pump_speed = 255;
//Aquí puedes dar valores desde 0 a 255 para la velocidad a la que trabajará la minibomba
//Haz pruebas previas del caudal y configura la. Yo he //elegido 255 pero ustedes pueden elegir la que estimen conveniente. A más velocidad, mayor //bombeo de agua
v
oid setup() {
  Serial.begin(9600);
}
void loop() {
// Mide la temperatura y humedad relativa y muestra resultado
  Serial.println(“*******************************”);
  Serial.println(“Muestra DHT11…”);
  
  byte temperature = 0;
  byte humidity_in_air = 0;
  byte data[40] = {0};
  if (dht11.read(pinDHT11, &temperature, &humidity_in_air, data)) {
    Serial.print(“Lectura del sensor DHT11 fallida”);
    return;
  }
  
  Serial.print(“Muestra RAW Bits: “);
  for (int i = 0; i < 40; i++) { Serial.print((int)data[i]); if (i > 0 && ((i + 1) % 4) == 0) {
      Serial.print(‘ ‘);
    }
  }
  Serial.println(“”);
  
  Serial.print(“Muestra OK: “);
  Serial.print(“Temperatura: “);Serial.print((int)temperature); Serial.print(” *C, “);
  Serial.print(“Humedad relativa en aire: “);Serial.print((int)humidity_in_air); Serial.println(” %”);
  
  int ground_humidity_value = map(analogRead(humidity_sensor_pin), 0, 1023, 100, 0);
  Serial.print(“Humedad en suelo: “);
  Serial.print(ground_humidity_value);
  Serial.println(“%”);

  int ldr_value = map(analogRead(ldr_pin), 1023, 0, 100, 0);
  Serial.print(“Luz: “);
  Serial.print(ldr_value);
  Serial.println(“%”);
   Serial.println(“*******************************”);

//**************************************************************
// Condiciones de riego 
// Si la humedad en el suelo es igual o inferior al 60%, si la luminosidad es inferior al 30%,
// Si la temperatura es inferior al 35%, entonces el sistema de riego riega. 
// En caso de que no se  cumpla alguno o ninguno de los 3 requisitos anteriores,
// el sistema de riego no riega
//**************************************************************
//Aquí puedes variar los parámetros que necesites de 60, 35 y 30, e incluso usar otros operandos <>=...
 if( ground_humidity_value <= 60 && ldr_value<30 && temperature<35) {
 digitalWrite(water_pump_pin, HIGH);
 Serial.println(“Irrigación”);
 analogWrite(water_pump_pin, water_pump_speed);

 }
 else{
 digitalWrite(water_pump_pin, LOW);
 Serial.println(“Riego detenido”);

 }
 delay (2000); 
// Ejecuta el código cada 2000 milisegundos, es decir, 2 segundos. Puedes variar la frecuencia de muestreo
}

Más información – Curso de programación Arduino (PDF gratis)

Fuentes

Más información – Jarduino

Sé el primero en comentar

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.