La plupart des agriculteurs utilisent de grandes portions de terres agricoles et il devient très difficile d'atteindre et de suivre chaque coin de grandes terres. Parfois, il y a une possibilité d'arrosage irrégulier. Cela entraîne des récoltes de mauvaise qualité, ce qui entraîne en outre des pertes financières. Dans ce scénario, le système d'irrigation intelligent utilisant la dernière technologie IoT est utile et facilite la culture.
Le système d'irrigation intelligent a une large portée pour automatiser le système d'irrigation complet. Ici, nous construisons un système d'irrigation basé sur l'IoT à l' aide du module ESP8266 NodeMCU et du capteur DHT11. Il irriguera non seulement automatiquement l'eau en fonction du niveau d'humidité du sol, mais enverra également les données au serveur ThingSpeak pour suivre l'état du terrain. Le système comprendra une pompe à eau qui sera utilisée pour arroser le sol en fonction des conditions environnementales du terrain telles que l'humidité, la température et l'humidité.
Nous construisions auparavant un système d'irrigation automatique similaire qui envoie des alertes sur mobile mais pas sur le cloud IoT. En dehors de cela, l'alarme de pluie et le circuit du détecteur d'humidité du sol peuvent également être utiles dans la construction d'un système d'irrigation intelligent.
Avant de commencer, il est important de noter que les différentes cultures nécessitent des conditions d'humidité, de température et d'humidité du sol différentes. Donc, dans ce tutoriel, nous utilisons une telle culture qui nécessitera une humidité du sol d'environ 50 à 55%. Ainsi, lorsque le sol perd son humidité à moins de 50%, la pompe à moteur s'allume automatiquement pour arroser l'eau et continue à arroser jusqu'à ce que l'humidité atteigne 55% et après cela, la pompe s'éteint. Les données du capteur seront envoyées au serveur ThingSpeak dans un intervalle de temps défini afin de pouvoir être surveillées de n'importe où dans le monde.
Composants requis
- NodeMCU ESP8266
- Module de capteur d'humidité du sol
- Module de pompe à eau
- Module de relais
- DHT11
- Connexion des fils
Vous pouvez acheter tous les composants nécessaires à ce projet.
Schéma
Le schéma de circuit de ce système d'irrigation intelligent IoT est donné ci-dessous:
Programmation ESP8266 NodeMCU pour système d'irrigation automatique
Pour la programmation du module ESP8266 NodeMCU, seule la bibliothèque de capteurs DHT11 est utilisée comme bibliothèque externe. Le capteur d'humidité fournit une sortie analogique qui peut être lue via la broche analogique A0 de l'ESP8266 NodeMCU. Étant donné que le NodeMCU ne peut pas fournir une tension de sortie supérieure à 3,3 V à partir de son GPIO, nous utilisons un module de relais pour piloter la pompe à moteur 5 V. De plus, le capteur d'humidité et le capteur DHT11 sont alimentés par une alimentation externe 5V.
Le code complet avec une vidéo de travail est donné à la fin de ce tutoriel, ici nous expliquons le programme pour comprendre le flux de travail du projet.
Commencez par inclure la bibliothèque nécessaire.
#comprendre
Puisque nous utilisons le serveur ThingSpeak, la clé API est nécessaire pour communiquer avec le serveur. Pour savoir comment nous pouvons obtenir la clé API de ThingSpeak, vous pouvez consulter l'article précédent sur la surveillance de la température et de l'humidité en direct sur ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
L'étape suivante consiste à écrire les informations d'identification Wi-Fi telles que le SSID et le mot de passe.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Définissez la broche du capteur DHT où le DHT est connecté et choisissez le type DHT.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
La sortie du capteur d'humidité est connectée à la broche A0 de l'ESP8266 NodeMCU. Et la broche du moteur est connectée à D0 de NodeMCU.
const int humiditéPin = A0; const int motorPin = D0;
Nous utiliserons la fonction millis () pour envoyer les données après chaque intervalle de temps défini ici, c'est 10 secondes. Le délai () est évité car il arrête le programme pendant un délai défini où le microcontrôleur ne peut pas effectuer d'autres tâches. En savoir plus sur la différence entre delay () et millis () ici.
intervalle long non signé = 10000; unsigned long previousMillis = 0;
Réglez la broche du moteur comme sortie et éteignez le moteur au départ. Démarrez la lecture du capteur DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // garde le moteur éteint au départ dht.begin ();
Essayez de vous connecter au Wi-Fi avec un SSID et un mot de passe donnés et attendez que le Wi-Fi soit connecté et, s'il est connecté, passez aux étapes suivantes.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { délai (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi connecté"); }
Définissez l'heure actuelle de démarrage du programme et enregistrez-la dans une variable pour la comparer avec le temps écoulé.
non signé long currentMillis = millis ();
Lisez les données de température et d'humidité et enregistrez-les dans des variables.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Si DHT est connecté et que l'ESP8266 NodeMCU est capable de lire les lectures, passez à l'étape suivante ou revenez à partir d'ici pour vérifier à nouveau.
if (isnan (h) - isnan (t)) { Serial.println ("Impossible de lire depuis le capteur DHT!"); revenir; }
Lisez la lecture d'humidité du capteur et imprimez la lecture.
Pourcentage d'humidité = (100,00 - ((analogRead (wetPin) / 1023,00) * 100,00)); Serial.print ("L'humidité du sol est ="); Serial.print (wetPercentage); Serial.println ("%");
Si la lecture d'humidité se situe entre la plage d'humidité du sol requise, gardez la pompe hors tension ou si elle dépasse l'humidité requise, mettez la pompe en marche.
if ( pourcentage d' humidité <50) { digitalWrite (motorPin, HIGH); } if ( Pourcentage d' humidité> 50 && Pourcentage d'humidité <55) { DigitalWrite (motorPin, HIGH); } if ( wetPercentage > 56) { digitalWrite (motorPin, LOW); }
Maintenant, toutes les 10 secondes, appelez la fonction sendThingspeak () pour envoyer les données d'humidité, de température et d'humidité au serveur ThingSpeak.
if ((unsigned long) (currentMillis - previousMillis)> = intervalle) { sendThingspeak (); previousMillis = millis (); client.stop (); }
Dans la fonction sendThingspeak () , nous vérifions si le système est connecté au serveur et si oui, nous préparons une chaîne dans laquelle l'humidité, la température et la lecture d'humidité sont écrites et cette chaîne sera envoyée au serveur ThingSpeak avec la clé API et l'adresse du serveur.
if (client.connect (serveur, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = Chaîne (wetPercentage); postStr + = "& champ2 ="; postStr + = Chaîne (t); postStr + = "& field3 ="; postStr + = Chaîne (h); postStr + = "\ r \ n \ r \ n";
Enfin, les données sont envoyées au serveur ThingSpeak à l' aide de la fonction client.print () qui contient la clé API, l'adresse du serveur et la chaîne préparée à l'étape précédente.
client.print ("POST / mise à jour HTTP / 1.1 \ n"); client.print ("Hôte: api.thingspeak.com \ n"); client.print ("Connexion: fermer \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded \ n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
Enfin, voici à quoi ressemblent les données sur le tableau de bord ThingSpeak
Cette dernière étape termine le didacticiel complet sur le système d'irrigation intelligent basé sur l' IoT. Notez qu'il est important d'arrêter le moteur lorsque l'humidité du sol a atteint le niveau requis après arrosage. Vous pouvez créer un système plus intelligent qui peut contenir différents contrôles pour différentes cultures.
Si vous rencontrez des problèmes lors de ce projet, commentez ci-dessous ou accédez à nos forums pour des questions plus pertinentes et leurs réponses.
Retrouvez le programme complet et la vidéo de démonstration de ce projet ci-dessous.