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:

  • No products found., aunque valdrían otras.
  • Protoboard o PCB si quieres soldarlo y hacerlo permanente.
  • Sensor de temperatura y humedad No products found.
  • 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í):

Descargar el código de codigo-riego-autoriego-auto para tu jardín


#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
void 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


36 comentarios, deja el tuyo

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.

  1.   ROGER FERNANDO ASTO BONIFACIO dijo

    POR QUE ME SALE exit status 1
    #include expects «FILENAME» or ESO AL CARGAR

    1.    Isaac dijo

      Hola,
      Ese error se da por algún problema de sintaxis del código. Lo he repasado y tenía un error. Ahora ya debería estar bien.
      Un saludo!

  2.   noe fuentes dijo

    hola buenas tardes tambien tengo el mismo problema:
    proyecto:3:10: error: #include expects «FILENAME» or

    #include &lt;SimpleDHT.h&gt;

    ^

    proyecto:4:10: error: #include expects «FILENAME» or

    #include &lt;SPI.h&gt;

    ^

    exit status 1
    #include expects «FILENAME» or

  3.   kevin dijo

    Hola, disculpe me puede ayudar con un error que se presenta en el codigo

  4.   samanta dijo

    De igual forma se me presenta un error en el código podria ayudarme con ese problema porfavor

    1.    Isaac dijo

      Hola,
      Por favor, deja información sobre el error que tienes para que pueda ayudar. Si no sé el contenido del error, es complicado que te pueda ayudar o localizar dónde está el problema…
      Un saludo

  5.   samantha vega Amores dijo

    hola me aparese este error como puedo solucionarlo

    error: SimpleDHT.h: No such file or directory

    #include

    ^~~~~~~~~~~~~

    compilation terminated.

    exit status 1
    SimpleDHT.h: No such file or directory

    1.    Isaac dijo

      Hola Samantha,
      Ese error es porque Arduino IDE no parece detectar la biblioteca SimpleDHT.h. ¿La tienes instalada correctamente? En caso de que la tengas, intenta usar una versión más actual de Arduino IDE si es más antigua…
      Puedes ver más información aquí:
      https://www.arduino.cc/en/Guide/Libraries
      Y obtener la biblioteca de aquí:
      https://github.com/adafruit/DHT-sensor-library
      Un saludo!

  6.   Pepe dijo

    Primero gracias por el post que es muy interesante y muy valido, pero he leído esto :

    «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…»

    He escuchado esto muchas veces, pero me gustaría que alguien me explicara claramente en que las perjudica …. Llevo criando plantas más de 20 años y cuando hace mucho calor no hay nada que agradezcan mas que un buen riego y a poder ser con aspersor mojando las hojas.

    Esto es un mito que lo único que hace es hacer sufrir a las plantas… Cuando tu tienes calor y sed, ¿esperas a la noche para beber ?… piénsalo

    gracias por el post !!!

    1.    Isaac dijo

      Hola Pepe,
      Gracias por tu aporte. Yo vivo en el campo y en ocasiones, cuando el calor es muy intenso, regar las plantas en horas de calor puede acabar con ellas. Lo he comprobado yo mismo (además, no es lo mismo dependiendo de la zona geográfica donde te encuentres, en mi tierra hace muchísimo calor). Puede ser por varias causas:
      1-Porque las gotas de agua sobre las hojas actúan como un vídrio, quemándolas con la luz del sol como lo haría una lupa.
      2-Las plantas tienen estomas que se cierran para no deshidratarse cuando hace mucho sol. Si las riegas se abren y puede hacer que se deshidraten.
      3-Si están en una maceta de plástico, el efecto podría ser aún peor.
      Un saludo!

  7.   Andres caro dijo

    HOLA!!
    Me gusto mucho el proyecto elaborado, tengo mi propia huerta y estoy probando este proyecto como experiencia personal, sin obtener un beneficio lucrativo, solo queria preguntarte si me ayudarías en el código, ya que me da error, tengo la librería del DHT pero alverificarlo me arroja un error al final del codigo: {Serial.println(“Riego detenido”);} y me dice que es: stray ‘\342’ in program.
    tengo muy poco conosimiento de la materia y he investigado y no he podido solucionarlo.
    agradeceria si me ayudaras. Gracias 😀

    1.    Isaac dijo

      Hola,
      El código está correcto? Es decir, no tiene errores de escritura?
      Por otro lado, puedes consultar más sobre ese error aquí:
      https://forum.arduino.cc/index.php?topic=386225.0
      Un saludo

  8.   Jose Arredondo dijo

    Hola Muy buenas tardes, disculpa no se si haya manera de contactarte es que me esta dando muchos errores con este codigo en el arduino

    1.    Isaac dijo

      Hola a todos,
      He limpiado el código y lo he vuelto a escribir, a ver si había algún error por algún motivo en el código que se muestra en la web. Para que se pueda descargar, el nuevo código lo he dejado en un enlace de descarga justo antes del código que aparece en la web. Si pincháis allí lo podéis descargar en formato texto. Espero que ya no de problemas.
      Un saludo!

  9.   Chaqui dijo

    De que manera puedo añadir el modulo wifi? y seria posible controlarlo haciendo una aplicacion?

  10.   Chaqui dijo

    Como es la alimentacion tambien :c?

    1.    Luis Alberto Alvarado dijo

      Hola Chaqui! estoy intentando hacer lo mismo que tu, me podrias ayudar si es qu ya terminaste tu codigo????

  11.   Nerea dijo

    Una pregunta que componente seria el que esta entre la placa Arduino y el sensor DHT11?
    Muchas Gracias!!

    1.    Isaac dijo

      Hola Nerea,
      ¿Te refieres al diodo y la resistencia? Fíjate que en el apartado anterior al esquema viene una lista de todos los componentes…
      Un saludo!

  12.   Jannet dijo

    Hola tiene video de como quedo su sistema de riego.?

  13.   alejandro Barros dijo

    disculpe solo funciona para arduino uno o tambien para arduino mega

  14.   Emmanuel dijo

    Hola buen día, disculpa quería hacer una pregunta de porque a la hora de abrir el monitor de Arduino ide, me aparece Lectura del sensor dht11 fallida??
    Todo el programa compilo bien y cargo bien, el detalle es cuando abro el monitor y le aparece esa leyenda.
    Que es lo que puede ser?

  15.   DANIEL ALFREDO RIVAS MEDINA dijo

    HOLA AMIGO GRAN TRABAJO PERO ME DA ERROR EN ESTA PARTE No such file or directory

    #include
    ¿QUE SERA? AGRADECERIA TU AYUDA

  16.   Isabell dijo

    HOLA, ESTO ES PUBLICO, PERO DA IGUAL, REALMENTE QUIERO AGRADECER A LA PERSONA O PERSONAS QUE PARTICIPARON EN EL DESARROLLO DE ESTE PROYECTO, QUIZÁS PARA MUCHOS SEA UNA TONTERÍA, PERO ME HABEÍS SALVADO LA VIDA, ASÍ QUE OS AGRADEZCO MUCHO, ESTOY EN UN COLEGIO AL CUAL NO QUIERO PERTENECER Y LA VERDAD NO SIENTO HABER APRENDIDO, GRACIAS POR VUESTRA PAGINA, OS DESEO LO MEJOR.

  17.   Ayelen dijo

    De que manera puedo añadir el modulo wifi? y seria posible controlarlo haciendo una aplicacion?

  18.   Brian dijo

    #include «DHT.h»
    DHT dht(2, DHT11);
    int valorLDR;
    int pinLDR = A5;
    int MOTOR = 8;
    //——————————————————————————————————————————————-
    void setup()
    {
    Serial.begin(9600);
    valorLDR = 0;
    Serial.begin(9600);
    Serial.println(«PRUEBA DEL SISTEMA DE RIEGO»);
    dht.begin();
    pinMode (MOTOR,OUTPUT);
    Serial.println(«Valor del sensor de humedad»);
    }
    //——————————————————————————————————————————————-
    void loop()
    {
    Serial.println(«=======================================================================»);
    int humidity = analogRead(A0);
    Serial.print(«Lectura:»);
    Serial.println(humidity);
    if(humidity >= 0 & humidity >= 1000){
    Serial.println(«Sensor en suelo seco»);
    } else if(humidity > 500 & humidity <= 1000){
    Serial.println("Sensor en suelo húmedo");
    }else if(humidity <= 500){
    Serial.println("Sensor en agua");
    }
    valorLDR = analogRead(pinLDR);
    Serial.print("LUZ (");
    Serial.print(valorLDR);
    Serial.println(")");
    delay(2000);
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if (isnan(h) || isnan(t)) {
    Serial.println("Falla al leer el sensor DHT11!");
    return;
    }
    Serial.print("Humedad: ");
    Serial.print(h);
    Serial.print(" % ");
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");
    if( h <= 50 && valorLDR < 70 && t = 1000) {
    digitalWrite(MOTOR,HIGH);
    Serial.println(«Debe regar»);
    }
    else{
    digitalWrite(MOTOR,LOW);
    Serial.println(«NO debe regar»);
    }
    delay(1000);
    }

    yo solo use el
    -DTH de temperatura y humedad en el pin 2
    -el LDR fotorresistencia en el pin A5
    -motor en el pin 8
    -sensor para humedad en la tierra en el pin A0
    este es mi codigo espero y les funcione

    -sensor de humedad para la tierra

  19.   José L. dijo

    Buenos dias, estoy presentando problemas con el codigo me sale esto y estoy usando el software más nuevo:

    sketch_nov12c:1:10: fatal error: SimpleDHT.h: No such file or directory

    #include

    ^~~~~~~~~~~~~

    compilation terminated.

    exit status 1

    SimpleDHT.h: No such file or directory

    Me gustaria que me ayudara a como resolver esto por favor, como soy nuevo en esto no se como funciona muy bien. gracias.

  20.   Juan dijo

    Hola , podrías dejar una mejor imagen de como se conecta el circuito ?no se llega apreciar bien , ¿Con que voltaje de alimentación se alimenta ? Gracias

  21.   Brian dijo

    #include «DHT.h»
    DHT dht(2, DHT11);
    int valorLDR;
    int pinLDR = A5;
    int MOTOR = 8;
    //——————————————————————————————————————————————-
    void setup()
    {
    Serial.begin(9600);
    valorLDR = 0;
    Serial.begin(9600);
    Serial.println(«PRUEBA DEL SISTEMA DE RIEGO»);
    dht.begin();
    pinMode (MOTOR,OUTPUT);
    Serial.println(«Valor del sensor de humedad»);
    }
    //——————————————————————————————————————————————-
    void loop()
    {
    Serial.println(«=======================================================================»);
    //—————————————————————————————–
    //———–Sensor de humedad, tierra—————————————————–
    int humidity = analogRead(A0);
    Serial.print(«Lectura:»);
    Serial.println(humidity);
    if(humidity >= 0 & humidity >= 1000){
    Serial.println(«Sensor en suelo seco»);
    } else if(humidity > 500 & humidity <= 1000){
    Serial.println("Sensor en suelo húmedo");
    }else if(humidity <= 500){
    Serial.println("Sensor en agua");
    }
    //—————————————————————————————–
    //—————Foto resistencia———————————————————-
    valorLDR = analogRead(pinLDR);
    Serial.print("LUZ (");
    Serial.print(valorLDR);
    Serial.println(")");
    delay(2000);
    //—————————————————————————————–
    //—————Sensor DTH11 temperatura y humedad en el aire—————————–
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    if (isnan(h) || isnan(t)) {
    Serial.println("Falla al leer el sensor DHT11!");
    return;
    }
    Serial.print("Humedad: ");
    Serial.print(h);
    Serial.print(" % ");
    Serial.print("Temperatura: ");
    Serial.print(t);
    Serial.println(" *C");
    //—————————————————————————————–
    //————Condicion para regar o no regar———————————————-
    //(HumedadAire)(Fotorresistencia)(Temperatura)(HumedadTierra)
    if( h <= 50 && valorLDR < 70 && t = 1000) {
    digitalWrite(MOTOR,HIGH);
    Serial.println(«Debe regar»);
    }
    else{
    digitalWrite(MOTOR,LOW);
    Serial.println(«NO debe regar»);
    }
    delay(1000);
    }

    //en cuanto los pines solo chequen que el de la bomba sea un pin pwm y
    //el de la fotorresistencia LDR sea analogico y tambien el de humedad de tierra igual un pin
    // analogico ya los del dth11 del sensor de temperatura y humedad de aire que sea
    //pines digitales igual pueden basarse en el codigo original de esta pagina
    //para conectar los pines
    //funciona con 5v

  22.   Erick dijo

    Me sale un error en esta parte del código »bucle vacío () {» podría ayudarme

  23.   Andrés P. dijo

    hola, me podrías decir que librerías o como se llamas para instalarlas ya que al pegar el codigo me marca que que necesito la libreria del DTH

  24.   Andrés Guzman dijo

    Hola me parece muy bueno el sistema. Intente recrearlo pero a la hora de incluir el código y la librería correspondiente me aparece lo siguiente.

    In file included from C:\Users\User\Documents\Arduino\PRUEBA_1\PRUEBA_1.ino:5:0:
    C:\Program Files (x86)\Arduino\libraries\DHT-sensor-library-master/DHT_U.h:36:10: fatal error: Adafruit_Sensor.h: No such file or directory
    #include
    ^~~~~~~~~~~~~~~~~~~
    compilation terminated.
    exit status 1
    Error compilando para la tarjeta Arduino Uno.

    No estoy seguro si hace falta alguna otra libreria si alguien me puede ayudar por favor.

  25.   PEPE GONZALES dijo

    Muy buen proyecto no obstante tras verificar el código compilarlo y subirlo lo único que me aparece en el monitor serie es «lectura de DHT11 fallida» no pasa de ese punto

  26.   Rous dijo

    Hola un tengo varios problemas pudiesen x favor ayudarme y si alguien tiene un video o encontro un video detallado q pueda poder ver

  27.   Sebastián dijo

    Tengo una duda, dónde se pone la corriente y a qué tipo de corriente se puede usar.

  28.   Adrian dijo

    ¿Puede agregar un esquema de mayor resolución? algunas conexiones no son claramente visibles