El sistema de riego inteligente tiene un amplio alcance para automatizar el sistema de riego completo. Aquí estamos construyendo un sistema de riego basado en IoT utilizando el módulo ESP8266 NodeMCU y el sensor DHT11. No solo irrigará automáticamente el agua en función del nivel de humedad en el suelo, sino que también enviará los Datos al Servidor ThingSpeak para realizar un seguimiento de las condiciones del terreno. El sistema consistirá en una bomba de agua que se utilizará para rociar agua en la tierra, dependiendo de las condiciones ambientales de la tierra, como la humedad, la temperatura y la humedad.

Antes de comenzar, es importante tener en cuenta que los diferentes cultivos requieren diferentes condiciones de humedad, temperatura y humedad del suelo. Entonces, en este tutorial estamos usando un cultivo que requerirá una humedad del suelo de aproximadamente 50-55%. Entonces, cuando el suelo pierde su humedad a menos del 50%, la bomba del motor se encenderá automáticamente para rociar el agua y continuará rociando el agua hasta que la humedad alcance el 55% y luego la bomba se apagará. Los datos del sensor se enviarán al servidor ThingSpeak en un intervalo de tiempo definido para que se pueda monitorear desde cualquier parte del mundo.

Componentes requeridos

  • NodeMCU ESP8266
  • Módulo sensor de humedad del suelo
  • Módulo de bomba de agua
  • Módulo de relé
  • DHT11
  • Cables de conexión

Programación ESP8266 NodeMCU para sistema de riego automático

Para programar el módulo ESP8266 NodeMCU, solo la biblioteca de sensores DHT11 se usa como biblioteca externa. El sensor de humedad proporciona una salida analógica que se puede leer a través del pin analógico ESP8266 NodeMCU A0. Dado que el NodeMCU no puede proporcionar un voltaje de salida superior a 3.3V desde su GPIO, entonces estamos utilizando un módulo de relé para impulsar la bomba de motor de 5V. Además, el sensor de humedad y el sensor DHT11 se alimentan de una fuente de alimentación externa de 5V.

Comience con la inclusión de la biblioteca necesaria.

#include <DHT.h> 
#include <ESP8266WiFi.h>

Como estamos usando el servidor ThingSpeak, la clave API es necesaria para poder comunicarnos con el servidor.

String apiKey = "X5AQ445IKMBYW31H 
const char * server =" api.thingspeak.com ";

El siguiente paso es escribir las credenciales de Wi-Fi, como SSID y contraseña.

const char * ssid = "CircuitDigest";     
const char * pass = "xxxxxxxxxxx";

Defina el pin del sensor DHT donde está conectado el DHT y elija el tipo de DHT.

#definir DHTPIN D3           
DHT dht (DHTPIN, DHT11);

La salida del sensor de humedad está conectada al Pin A0 de ESP8266 NodeMCU. Y el pin del motor está conectado a D0 de NodeMCU.

constante int humedadPin = A0; 
const int motorPin = D0;

Usaremos la función millis () para enviar los datos después de cada intervalo de tiempo definido aquí, son 10 segundos. El retraso () se evita ya que detiene el programa durante un retraso definido donde el microcontrolador no puede realizar otras tareas.

intervalo largo sin signo = 10000; 
unsigned long previousMillis = 0;

Configure el pin del motor como salida y apague el motor inicialmente. Inicie la lectura del sensor DHT11.

pinMode (motorPin, OUTPUT); 
digitalWrite (motorPin, LOW); // mantener el motor apagado inicialmente 
dht.begin ();

Intente conectar el Wi-Fi con el SSID y la Contraseña dados y espere a que se conecte el Wi-Fi y, si está conectado, continúe con los siguientes pasos.

WiFi.begin (ssid, pass); 
  while (WiFi.status ()! = WL_CONNECTED) 
  { 
    delay (500); 
    Serial.print ("."); 
  } 
  Serial.println (""); 
  Serial.println ("WiFi conectado"); 
}

Defina el tiempo actual de inicio del programa y guárdelo en una variable para compararlo con el tiempo transcurrido.

unsigned long currentMillis = millis ();

Lea los datos de temperatura y humedad y guárdelos en variables.

flotante h = dht.readHumidity (); 
float t = dht.readTemperature ();

Si el DHT está conectado y el ESP8266 NodeMCU puede leer las lecturas, continúe con el siguiente paso o regrese desde aquí para verificar nuevamente.

if (isnan (h) || isnan (t)) 
  { 
    Serial.println ("¡Error al leer del sensor DHT!"); 
    regreso; 
  }

Lea la lectura de humedad del sensor e imprima la lectura.

Porcentaje de humedad = (100.00 - ((analogRead (idityPin) / 1023.00) * 100.00)); 
  Serial.print ("La humedad del suelo es ="); 
  Serial.print (porcentaje de humedad); 
  Serial.println ("%");

Si la lectura de humedad está entre el rango de humedad del suelo requerido, mantenga la bomba apagada o si va más allá de la humedad requerida, encienda la bomba. 

if ( 
    porcentaje de 
humedad <50) { digitalWrite (motorPin, HIGH);   } 
   if ( 
    porcentaje de 
humedad> 50 && porcentaje de humedad <55) { digitalWrite (motorPin, HIGH);   } 
if ( 
    porcentaje de 
humedad> 56) { digitalWrite (motorPin, LOW);   }

Ahora, cada 10 segundos, llame a la función sendThingspeak () para enviar los datos de humedad, temperatura y humedad al servidor ThingSpeak.

 if ((unsigned long) (currentMillis - previousMillis)> = intervalo) { 
    sendThingspeak (); 
    previousMillis = millis (); 
    client.stop (); 
  }

En la función sendThingspeak () verificamos si el sistema está conectado al servidor y, en caso afirmativo, preparamos una cadena donde se escribe humedad, temperatura, lectura de humedad y esta cadena se enviará al servidor ThingSpeak junto con la clave API y la dirección del servidor.

if (client.connect (server, 80)) 
    { 
      String postStr = apiKey; 
      postStr + = "& field1 ="; 
      postStr + = Cadena (porcentaje de humedad); 
      postStr + = "& field2 ="; 
      postStr + = Cadena (t); 
      postStr + = "& field3 ="; 
      postStr + = Cadena (h);      
      postStr + = "\ r \ n \ r \ n";

Finalmente, los datos se envían al servidor ThingSpeak utilizando la función client.print () que contiene la clave API, la dirección del servidor y la cadena que se preparó en el paso anterior.

client.print ("POST / actualización HTTP / 1.1 \ n"); 
      client.print ("Host: api.thingspeak.com \ n"); 
      client.print ("Conexión: cerrar \ n"); 
      client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); 
      client.print ("Tipo de contenido: application / x-www-form-urlencoded \ n"); 
      client.print ("Content-Length:"); 
      client.print (postStr.length ()); 
      client.print ("\ n \ n"); 
      client.print (postStr);

Finalmente, así es como se ven los datos en ThingSpeak Dashboard

Este último paso finaliza el tutorial completo sobre el sistema de riego inteligente basado en IoT . Tenga en cuenta que es importante apagar el motor cuando la humedad del suelo haya alcanzado el nivel requerido después de rociar agua. Puede crear un sistema más inteligente que pueda contener diferentes controles para diferentes cultivos.

https://circuitdigest.com/

3 thoughts on “Sistema de riego inteligente basado en IoT con sensor de humedad del suelo y ESP8266 NodeMCU”

  1. Necesito ayuda urgente, al momento de conectar el circuito, solo se debe de conectar el node mcu a la computadora y debe de funcionar?, o se debe de pelar los cables de un cargador y conectarlo en la protoboard, gracias por su atención

Deja una respuesta

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