- Componentes requeridos
- Diagrama de circuito
- Programación de ESP8266 NodeMCU para sistema de riego automático
La mayoría de los agricultores utilizan grandes porciones de tierras agrícolas y resulta muy difícil llegar y rastrear cada rincón de las grandes tierras. En algún momento existe la posibilidad de salpicaduras de agua desiguales. Esto da como resultado cosechas de mala calidad, lo que conduce a pérdidas económicas. En este escenario, el sistema de riego inteligente que utiliza la última tecnología de IoT es útil y facilita la agricultura.
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 usando el módulo ESP8266 NodeMCU y el sensor DHT11. No solo irriga automáticamente el agua en función del nivel de humedad del suelo, sino que también envía los datos al servidor ThingSpeak para realizar un seguimiento del estado de la tierra. 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, tales como humedad, temperatura y humedad.
Anteriormente, creamos un sistema de riego automático de plantas similar que envía alertas en dispositivos móviles pero no en la nube de IoT. Aparte de esto, la alarma de lluvia y el circuito detector de humedad del suelo también pueden ser útiles para construir un sistema de riego inteligente.
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 de motor se encenderá automáticamente para rociar el agua y continuará rociando el agua hasta que la humedad suba al 55% y luego la bomba se apagará. Los datos del sensor se enviarán a ThingSpeak Server en un intervalo de tiempo definido para que pueda ser monitoreado 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
- Conexión de cables
Puede comprar todos los componentes necesarios para este proyecto.
Diagrama de circuito
El diagrama de circuito para este sistema de riego inteligente IoT se muestra a continuación:
Programación de ESP8266 NodeMCU para sistema de riego automático
Para programar el módulo ESP8266 NodeMCU, solo se utiliza la biblioteca de sensores DHT11 como biblioteca externa. El sensor de humedad proporciona una salida analógica que se puede leer a través del pin analógico A0 del ESP8266 NodeMCU. Dado que el NodeMCU no puede dar un voltaje de salida superior a 3,3 V de su GPIO, estamos usando un módulo de relé para impulsar la bomba de motor de 5 V. Además, el sensor de humedad y el sensor DHT11 se alimentan desde una fuente de alimentación externa de 5V.
El código completo con un video de trabajo se da al final de este tutorial, aquí estamos explicando el programa para comprender el flujo de trabajo del proyecto.
Empiece por incluir la biblioteca necesaria.
#incluir
Dado que estamos usando ThingSpeak Server, la clave API es necesaria para comunicarnos con el servidor. Para saber cómo podemos obtener la clave API de ThingSpeak, puede visitar el artículo anterior sobre Monitoreo de temperatura y humedad en vivo en ThingSpeak.
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.
const 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. Se evita el delay () ya que detiene el programa durante un retraso definido donde el microcontrolador no puede realizar otras tareas. Obtenga más información sobre la diferencia entre delay () y millis () aquí.
intervalo largo sin firmar = 10000; unsigned long previousMillis = 0;
Establezca el pin del motor como salida y apague el motor inicialmente. Inicie la lectura del sensor DHT11.
pinMode (motorPin, SALIDA); digitalWrite (motorPin, LOW); // mantener el motor apagado inicialmente dht.begin ();
Intente conectar 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, pase); while (WiFi.status ()! = WL_CONNECTED) { retraso (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.
currentMillis largo sin firmar = millis ();
Lea los datos de temperatura y humedad y guárdelos en variables.
flotar h = dht.readHumidity (); flotar t = dht.readTemperature ();
Si 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 ("¡No se pudo leer el sensor DHT!"); regreso; }
Lea la lectura de humedad del sensor e imprima la lectura.
Porcentaje de humedad = (100,00 - ((lectura analógica (pin de humedad) / 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 supera la humedad requerida, encienda la bomba.
si ( porcentaje de humedad <50) { digitalWrite (motorPin, HIGH); } si ( porcentaje de humedad> 50 && porcentaje de humedad <55) { digitalWrite (motorPin, HIGH); } si ( porcentaje de humedad> 56) { digitalWrite (motorPin, LOW); }
Ahora, después de 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 (); anteriorMillis = millis (); client.stop (); }
En la función sendThingspeak () verificamos si el sistema está conectado al servidor y si es así, preparamos una cadena donde se escribe la lectura de humedad, temperatura, humedad y esta cadena se enviará al servidor ThingSpeak junto con la clave API y la dirección del servidor.
if (client.connect (servidor, 80)) { String postStr = apiKey; postStr + = "& campo1 ="; postStr + = Cadena (porcentaje de humedad); postStr + = "& campo2 ="; 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: aplicación / 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 del rociado de agua. Puede crear un sistema más inteligente que pueda contener diferentes controles para diferentes cultivos.
Si tiene algún problema mientras realiza este proyecto, comente a continuación o diríjase a nuestros foros para obtener preguntas más relevantes y sus respuestas.
Encuentre el programa completo y el video de demostración para este proyecto a continuación.