De flesta av bönderna använder stora delar jordbruksmark och det blir mycket svårt att nå och spåra varje hörn av stora markar. Någon gång finns det en möjlighet till ojämna vattensprutor. Detta resulterar i grödor av dålig kvalitet vilket ytterligare leder till ekonomiska förluster. I det här scenariot är det smarta bevattningssystemet med den senaste IoT-tekniken till hjälp och leder till att jordbruket blir lättare.
Den smarta bevattningssystem har stort utrymme att automatisera hela bevattningssystem. Här bygger vi ett IoT-baserat bevattningssystem med ESP8266 NodeMCU-modul och DHT11-sensor. Det bevattnar inte bara vattnet automatiskt baserat på fuktnivån i jorden utan skickar också data till ThingSpeak Server för att hålla reda på landets tillstånd. Systemet kommer att bestå av en vattenpump som kommer att användas för att strö vatten på marken beroende på landets miljöförhållanden såsom fukt, temperatur och luftfuktighet.
Vi har tidigare skapat liknande system för automatisk bevattning av växter som skickar varningar på mobilen men inte på IoT-molnet. Bortsett från detta kan regnlarm och markfuktardetektorkrets också vara till hjälp för att bygga Smart Irrigation-system.
Innan du börjar är det viktigt att notera att de olika grödorna kräver olika markfuktighet, temperatur och fuktighet. Så i denna handledning använder vi en sådan gröda som kräver en markfuktighet på cirka 50-55%. Så när marken tappar fukten till mindre än 50% kommer motorpumpen att sättas på automatiskt för att stänka vattnet och det fortsätter att strö vattnet tills fukten går upp till 55% och därefter stängs pumpen av. Sensordata skickas till ThingSpeak Server inom ett definierat tidsintervall så att de kan övervakas var som helst i världen.
Komponenter krävs
- NodeMCU ESP8266
- Jordfuktighetssensormodul
- Vattenpumpsmodul
- Relämodul
- DHT11
- Anslutande ledningar
Du kan köpa alla komponenter som krävs för detta projekt.
Kretsschema
Kretsschema för detta IoT Smart Irrigation System ges nedan:
Programmering ESP8266 NodeMCU för automatiskt bevattningssystem
För programmering av modulen ESP8266 NodeMCU används endast sensorbiblioteket DHT11 som externt bibliotek. Fuktsensorn ger en analog utgång som kan läsas genom ESP8266 NodeMCU analoga stift A0. Eftersom NodeMCU inte kan ge utspänning som är större än 3,3 V från GPIO så använder vi en relämodul för att driva 5V-motorpumpen. Även fuktgivaren och DHT11-sensorn drivs från extern 5V-strömförsörjning.
Komplett kod med en fungerande video ges i slutet av denna handledning, här förklarar vi programmet för att förstå projektets arbetsflöde.
Börja med att inkludera nödvändigt bibliotek.
#omfatta
Eftersom vi använder ThingSpeak-servern är API-nyckeln nödvändig för att kommunicera med servern. För att veta hur vi kan få API-nyckel från ThingSpeak, kan du besöka tidigare artikel om övervakning av levande temperatur och fuktighet på ThingSpeak.
Sträng apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Nästa steg är att skriva Wi-Fi-referenser som SSID och lösenord.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Definiera DHT-sensorstiftet där DHT är ansluten och välj DHT-typ.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
Fuktgivarens utgång är ansluten till stift A0 i ESP8266 NodeMCU. Och motorstiftet är anslutet till D0 i NodeMCU.
const int moistPin = A0; const int motorPin = D0;
Vi använder millis () -funktionen för att skicka data efter varje definierat tidsintervall här är det 10 sekunder. Den fördröjning () undviks eftersom det stoppar programmet under en definierad fördröjning där mikro inte kan göra andra uppgifter. Läs mer om skillnaden mellan fördröjning () och millis () här.
osignerat långt intervall = 10000; osignerad lång föregående Millis = 0;
Ställ in motorstiftet som utgång och stäng av motorn initialt. Starta avläsningen av DHT11-sensorn.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // håll av motorn från början dht.begin ();
Försök att ansluta Wi-Fi med angivet SSID och lösenord och vänta på att Wi-Fi ska anslutas och gå till nästa steg om du är ansluten.
WiFi.begin (ssid, pass); medan (WiFi.status ()! = WL_CONNECTED) { fördröjning (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi-ansluten"); }
Definiera den aktuella tiden för start av programmet och spara det i en variabel för att jämföra den med förfluten tid.
osignerad långströmMillis = millis ();
Läs temperatur- och fuktighetsdata och spara dem i variabler.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Om DHT är ansluten och ESP8266 NodeMCU kan läsa avläsningarna fortsätt till nästa steg eller återvänd härifrån för att kontrollera igen.
om (isnan (h) - isnan (t)) { Serial.println ("Det gick inte att läsa från DHT-sensorn!"); lämna tillbaka; }
Läs fuktavläsningen från sensorn och skriv ut avläsningen.
moistPercentage = (100,00 - ((analogRead (moistPin) / 1023,00) * 100,00)); Serial.print ("Soil Moisture is ="); Serial.print (fuktprocent); Serial.println ("%");
Om fuktavläsningen ligger mellan det erforderliga markfuktighetsområdet ska du hålla pumpen avstängd eller om den överskrider den nödvändiga fukten, slå sedan på pumpen.
if (moistPercentage <50) { digitalWrite (motorPin, HIGH); } om (fuktPercentage> 50 && fuktPercentage <55) { digitalWrite (motorPin, HIGH); } if (moistPercentage> 56) { digitalWrite (motorPin, LOW); }
Nu var 10: e sekund ringer du upp sendThingspeak () -funktionen för att skicka fukt-, temperatur- och fuktighetsdata till ThingSpeak-servern.
om ((osignerad lång) (currentMillis - previousMillis)> = intervall) { sendThingspeak (); previousMillis = millis (); client.stop (); }
I funktionen SendThingspeak () kontrollerar vi om systemet är anslutet till servern och om ja, förbereder vi en sträng där fukt, temperatur, fuktavläsning skrivs och denna sträng skickas till ThingSpeak-servern tillsammans med API-nyckel och serveradress.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = Sträng (fuktprocent); postStr + = "& field2 ="; postStr + = Sträng (t); postStr + = "& field3 ="; postStr + = Sträng (h); postStr + = "\ r \ n \ r \ n";
Slutligen skickas data till ThingSpeak-servern med funktionen client.print () som innehåller API-nyckel, serveradress och strängen som förbereddes i föregående steg.
client.print ("POST / uppdatera HTTP / 1.1 \ n"); client.print ("Värd: api.thingspeak.com \ n"); client.print ("Anslutning: stäng \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded \ n"); client.print ("Innehållslängd:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
Slutligen ser detta ut på ThingSpeak Dashboard
Det här sista steget avslutar den fullständiga handledningen om IoT-baserat Smart Irrigation System. Observera att det är viktigt att stänga av motorn när markfuktigheten har nått den önskade nivån efter vattensprutning. Du kan skapa ett smartare system som kan innehålla olika kontroller för olika grödor.
Om du stöter på några problem när du gör detta projekt kan du kommentera nedan eller kontakta våra forum för mer relevanta frågor och deras svar.
Hitta hela programmet och demonstrationsvideon för detta projekt nedan.