- Komponenter, der kræves
- Kredsløbsdiagram
- Programmering ESP8266 NodeMCU til automatisk vandingssystem
De fleste af landmændene bruger store dele af landbrugsjord, og det bliver meget vanskeligt at nå og spore hvert hjørne af store lande. Engang er der mulighed for ujævne vandbestænkninger. Dette resulterer i afgrøder af dårlig kvalitet, hvilket yderligere fører til økonomiske tab. I dette scenario er Smart Irrigation System, der bruger nyeste IoT-teknologi, nyttigt og fører til let landbrug.
Den Smart vandingsanlæg har vide muligheder for at automatisere komplette vandingsanlæg. Her bygger vi et IoT-baseret vandingssystem ved hjælp af ESP8266 NodeMCU-modul og DHT11-sensor. Det overfører ikke kun automatisk vandet baseret på fugtighedsniveauet i jorden, men sender også dataene til ThingSpeak Server for at holde styr på landets tilstand. Systemet vil bestå af en vandpumpe, som vil blive brugt til at drysse vand på landet afhængigt af landets miljømæssige tilstand, såsom fugt, temperatur og fugtighed.
Vi har tidligere bygget lignende automatiske anlæg til kunstvanding, der sender alarmer på mobil, men ikke på IoT-sky. Bortset fra dette kan regnalarm og jordfugtighedsdetektor kredsløb også være nyttige til opbygning af Smart Irrigation-system.
Før start er det vigtigt at bemærke, at de forskellige afgrøder kræver forskellig jordfugtighed, temperatur og fugtighed. Så i denne vejledning bruger vi en sådan afgrøde, der kræver en jordfugtighed på ca. 50-55%. Så når jorden mister sin fugtighed til mindre end 50%, tænder motorpumpen automatisk for at drysse vandet, og den fortsætter med at drysse vandet, indtil fugtigheden går op til 55%, og derefter slukkes pumpen. Sensordataene sendes til ThingSpeak Server i et defineret tidsinterval, så de kan overvåges overalt i verden.
Komponenter, der kræves
- NodeMCU ESP8266
- Modul til jordfugtighedssensor
- Vandpumpemodul
- Relæmodul
- DHT11
- Tilslutning af ledninger
Du kan købe alle de nødvendige komponenter til dette projekt.
Kredsløbsdiagram
Kredsløbsdiagram for dette IoT Smart Irrigation System er angivet nedenfor:
Programmering ESP8266 NodeMCU til automatisk vandingssystem
Til programmering af ESP8266 NodeMCU-modulet bruges kun DHT11-sensorbiblioteket som eksternt bibliotek. Fugtføleren giver analog udgang, som kan læses gennem ESP8266 NodeMCU analog pin A0. Da NodeMCU ikke kan give udgangsspænding større end 3,3 V fra sin GPIO, så bruger vi et relæmodul til at drive 5V-motorpumpen. Også fugtføleren og DHT11-sensoren får strøm fra ekstern 5V strømforsyning.
Komplet kode med en arbejdsvideo er givet i slutningen af denne tutorial, her forklarer vi programmet for at forstå projektets arbejdsgang.
Start med at inkludere det nødvendige bibliotek.
#omfatte
Da vi bruger ThingSpeak-serveren, er API-nøglen nødvendig for at kommunikere med serveren. For at vide, hvordan vi kan få API-nøgle fra ThingSpeak, kan du besøge forrige artikel om overvågning af live temperatur og fugtighed på ThingSpeak.
Streng apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Det næste trin er at skrive Wi-Fi-legitimationsoplysninger som SSID og adgangskode.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Definer DHT-sensorstift, hvor DHT er tilsluttet, og vælg DHT-typen.
#definer DHTPIN D3 DHT dht (DHTPIN, DHT11);
Fugtighedssensorudgangen er forbundet til pin A0 i ESP8266 NodeMCU. Og motorstiften er forbundet til D0 i NodeMCU.
const int moistPin = A0; const int motorPin = D0;
Vi bruger millis () -funktionen til at sende dataene efter hvert defineret tidsinterval her er det 10 sekunder. Den forsinkelse () undgås, da det stopper programmet for en defineret forsinkelse hvor mikrocontroller ikke kan udføre andre opgaver. Lær mere om forskellen mellem forsinkelse () og millis () her.
usigneret langt interval = 10000; usigneret lang forrige Millis = 0;
Indstil motorstift som output, og sluk for motoren i starten. Start aflæsningen af DHT11-sensoren.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // hold motoren fra start dht.begin ();
Prøv at oprette forbindelse til Wi-Fi med det givne SSID og adgangskode, og vent på, at Wi-Fi'et er tilsluttet, og hvis det er tilsluttet, skal du gå til næste trin.
WiFi.begin (ssid, pass); mens (WiFi.status ()! = WL_CONNECTED) { forsinkelse (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi-tilsluttet"); }
Definer det aktuelle tidspunkt for start af programmet, og gem det i en variabel for at sammenligne det med den forløbne tid.
usigneret langstrømMillis = millis ();
Læs temperatur- og fugtighedsdata, og gem dem i variabler.
flyde h = dht.readHumidity (); flyde t = dht.readTemperature ();
Hvis DHT er tilsluttet, og ESP8266 NodeMCU er i stand til at læse aflæsningerne, skal du fortsætte til næste trin eller vende tilbage herfra for at kontrollere igen.
hvis (isnan (h) - isnan (t)) { Serial.println ("Kunne ikke læse fra DHT-sensor!"); Vend tilbage; }
Læs fugtaflæsningen fra sensoren, og udskriv læsningen.
moistPercentage = (100,00 - ((analogRead (moistPin) / 1023,00) * 100,00)); Serial.print ("Soil Moisture is ="); Serial.print (moistPercentage); Serial.println ("%");
Hvis fugtighedsaflæsningen er imellem det krævede jordfugtighedsområde, skal du holde pumpen slukket, eller hvis den går ud over den krævede fugtighed, skal du tænde pumpen.
hvis ( fugtPercentage <50) { digitalWrite (motorPin, HIGH); } hvis ( fugtPercentage > 50 && fugtPercentage <55) { digitalWrite (motorPin, HIGH); } hvis ( fugtPercentage > 56) { digitalWrite (motorPin, LOW); }
Efter hvert 10. sekund skal du ringe til sendThingspeak () -funktionen for at sende fugt-, temperatur- og fugtighedsdata til ThingSpeak-serveren.
hvis ((usigneret lang) (currentMillis - previousMillis)> = interval) { sendThingspeak (); previousMillis = millis (); client.stop (); }
I sendThingspeak () -funktionen kontrollerer vi, om systemet er tilsluttet serveren, og hvis ja, forbereder vi en streng, hvor fugt, temperatur, fugtighedsaflæsning skrives, og denne streng sendes til ThingSpeak-server sammen med API-nøgle og serveradresse.
hvis (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& felt1 ="; postStr + = String (fugtPercentage); postStr + = "& felt2 ="; postStr + = streng (t); postStr + = "& felt3 ="; postStr + = streng (h); postStr + = "\ r \ n \ r \ n";
Endelig sendes dataene til ThingSpeak-serveren ved hjælp af client.print () -funktionen, der indeholder API-nøgle, serveradresse og den streng, der er forberedt i forrige trin.
client.print ("POST / opdater HTTP / 1.1 \ n"); client.print ("Vært: api.thingspeak.com \ n"); client.print ("Forbindelse: luk \ 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);
Endelig er dette, hvordan dataene ser ud på ThingSpeak Dashboard
Dette sidste trin afslutter den komplette tutorial om IoT-baseret Smart Irrigation System. Bemærk, at det er vigtigt at slukke for motoren, når jordens fugtighed har nået det krævede niveau efter vandstænkning. Du kan lave et mere smart system, der kan indeholde forskellig kontrol for forskellige afgrøder.
Hvis du står over for problemer, mens du laver dette projekt, skal du kommentere nedenfor eller kontakte vores fora for mere relevante spørgsmål og deres svar.
Find det komplette program og demonstrationsvideo til dette projekt nedenfor.