Dauguma ūkininkų naudoja dideles žemės ūkio naudmenų dalis, todėl labai sunku pasiekti ir stebėti kiekvieną didelių žemių kampą. Kai kada yra netolygių vandens purškalų galimybė. Dėl šios priežasties prastos kokybės pasėliai dar labiau patiria finansinių nuostolių. Šiuo atveju išmaniojo drėkinimo sistema, naudojanti naujausią interneto technologiją, yra naudinga ir palengvina ūkininkavimą.
"Smart laistymo sistema turi plačią taikymo sritį automatizuoti visą laistymo sistema. Čia mes kuriame daiktų interneto pagrindu veikiančią drėkinimo sistemą, naudodami „ESP8266 NodeMCU“ modulį ir „DHT11“ jutiklį. Tai ne tik automatiškai laistys vandenį pagal drėgmės lygį dirvožemyje, bet ir išsiųs duomenis į „ThingSpeak“ serverį, kad galėtų stebėti žemės būklę. Sistemą sudarys vandens siurblys, kuris bus naudojamas vandeniui purkšti žemėje, atsižvelgiant į žemės aplinkos sąlygas, tokias kaip drėgmė, temperatūra ir drėgmė.
Anksčiau mes sukūrėme panašią automatinę augalų drėkinimo sistemą, kuri siunčia įspėjimus mobiliajame telefone, bet ne IoT debesyje. Be to, lietaus signalizacija ir dirvožemio drėgmės detektoriaus grandinė taip pat gali būti naudinga kuriant išmaniojo drėkinimo sistemą.
Prieš pradedant, svarbu atkreipti dėmesį į tai, kad skirtingiems pasėliams reikalinga skirtinga dirvožemio drėgmė, temperatūra ir drėgmės būklė. Taigi šioje pamokoje naudojame tokią kultūrą, kuriai dirvožemio drėgmė bus apie 50–55%. Taigi, kai dirvožemis praranda drėgmę iki mažiau nei 50%, variklio siurblys įsijungs automatiškai, kad pabarstytų vandens, ir jis toliau purškia vandenį, kol drėgmė pakils iki 55%, o po to siurblys bus išjungtas. Jutiklio duomenys bus siunčiami į „ThingSpeak“ serverį nustatytu laiko tarpu, kad juos būtų galima stebėti iš bet kurios pasaulio vietos.
Būtini komponentai
- MazgasMCU ESP8266
- Dirvožemio drėgmės jutiklio modulis
- Vandens siurblio modulis
- Relės modulis
- DHT11
- Laidų sujungimas
Galite nusipirkti visus komponentus, reikalingus šiam projektui.
Grandinės schema
Šios IoT išmaniosios drėkinimo sistemos schema pateikta žemiau:
ESP8266 NodeMCU programavimas automatinei drėkinimo sistemai
Programuojant ESP8266 „NodeMCU“ modulį, kaip išorinė biblioteka naudojama tik DHT11 jutiklių biblioteka. Drėgmės jutiklis suteikia analoginę išvestį, kurią galima nuskaityti per ESP8266 „NodeMCU“ analoginį kaištį A0. Kadangi „NodeMCU“ iš savo GPIO negali suteikti didesnės nei 3,3 V išėjimo įtampos, 5 V variklio siurbliui valdyti naudojame relės modulį. Taip pat drėgmės jutiklis ir DHT11 jutiklis maitinami iš išorinio 5 V maitinimo šaltinio.
Pilnas kodas su darbiniu vaizdo įrašu pateikiamas šios pamokos pabaigoje, čia mes paaiškiname programą, kad suprastume projekto darbo eigą.
Pradėkite nuo būtinos bibliotekos įtraukimo.
# įtraukti
Kadangi mes naudojame „ThingSpeak“ serverį, API raktas yra būtinas norint bendrauti su serveriu. Norėdami sužinoti, kaip mes galime gauti API raktą iš „ThingSpeak“, galite perskaityti ankstesnį straipsnį apie „ThingSpeak“ tiesioginės temperatūros ir drėgmės stebėjimą.
Eilutė apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Kitas žingsnis - parašyti „Wi-Fi“ kredencialus, tokius kaip SSID ir Slaptažodis.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Apibrėžkite DHT jutiklio kaištį, kuriame prijungtas DHT, ir pasirinkite DHT tipą.
#apibrėžti DHTPIN D3 DHT dht (DHTPIN, DHT11);
Drėgmės jutiklio išėjimas yra prijungtas prie ESP8266 „NodeMCU“ kaiščio A0. Variklio kaištis yra prijungtas prie „NodeMCU“ D0.
const int drėgmėPin = A0; const int motorPin = D0;
Mes naudosime milis () funkciją duomenims siųsti po kiekvieno nustatyto laiko intervalo, čia 10 sekundžių. Vėlavimą () būtų vengiama, nes jis sustos programą nustatytu laiku, jeigu mikrovaldiklis negali daryti kitas užduotis. Sužinokite daugiau apie vėlavimo () ir milisų () skirtumą čia.
nepasirašytas ilgas intervalas = 10000; nepasirašytas ilgas ankstesnisMillis = 0;
Nustatykite variklio kaištį kaip išėjimą ir iš pradžių išjunkite variklį. Pradėkite DHT11 jutiklio rodmenis.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // išjungti variklį iš pradžių dht.begin ();
Pabandykite prijungti „Wi-Fi“ su nurodytu SSID ir slaptažodžiu ir palaukite, kol bus prijungtas „Wi-Fi“, ir, jei prijungtas, eikite į kitus veiksmus.
„WiFi.begin“ (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { delsa (500); Serijinis spaudinys ("."); } Serial.println (""); Serial.println („Wi-Fi prijungtas“); }
Apibrėžkite dabartinį programos paleidimo laiką ir išsaugokite jį kintamajame, kad palygintumėte jį su praėjusiu laiku.
nepasirašyta ilga srovėMillis = milis ();
Perskaitykite temperatūros ir drėgmės duomenis ir išsaugokite juos kintamuosiuose.
plūdė h = dht.readHumidity (); plūdė t = dht.readTemperature ();
Jei prijungtas DHT ir ESP8266 „NodeMCU“ gali nuskaityti rodmenis, pereikite prie kito žingsnio arba grįžkite iš čia ir patikrinkite dar kartą.
if (isnan (h) - isnan (t)) { Serial.println ("Nepavyko perskaityti iš DHT jutiklio!"); grįžti; }
Skaitykite jutiklio drėgmės rodmenis ir atspausdinkite rodmenis.
drėgmės procentas = (100,00 - ((analogRead (drėgmės smeigtukas) / 1023,00) * 100,00)); Serial.print ("Dirvožemio drėgmė yra ="); Serijinis spaudinys (drėgmės procentas); Serial.println ("%");
Jei drėgmės rodmuo yra tarp reikalingo dirvožemio drėgmės diapazono, palaikykite siurblį išjungtą arba, jei jis viršija reikiamą drėgmę, tada įjunkite siurblį.
if (drėgmės procentas <50) { digitalWrite (motorPin, HIGH); } if (drėgmės procentas > 50 ir & drėgmės procentas <55) { digitalWrite (motorPin, HIGH); } if (drėgmės procentas > 56) { digitalWrite (motorPin, LOW); }
Dabar kas 10 sekundžių iškvieskite funkciją sendThingspeak (), kad išsiųstumėte drėgmės, temperatūros ir drėgmės duomenis į „ThingSpeak“ serverį.
if ((nepasirašytas ilgas) (currentMillis - previousMillis)> = intervalas) { sendThingspeak (); ankstesnisMillis = milis (); klientas.stop (); }
Į sendThingspeak () funkcija, mes patikrinsime, ar sistema yra prijungta prie serverio ir jei taip, tai mes ruošiame eilutę, kur, temperatūra, drėgmė svarstymas raštišką drėgmės ir ši eilutė bus išsiųsti ThingSpeak serverį kartu su API raktą ir serverio adresą.
if (klientas. prisijungti (serveris, 80)) { String postStr = apiKey; postStr + = "& laukas1 ="; postStr + = eilutė (drėgmės procentas); postStr + = "& laukas2 ="; postStr + = eilutė (t); postStr + = "& laukas3 ="; postStr + = eilutė (h); postStr + = "\ r \ n \ r \ n";
Galiausiai duomenys siunčiami į „ThingSpeak“ serverį naudojant klientą.print () funkciją, kurioje yra API raktas, serverio adresas ir eilutė, kuri parengta ankstesniame etape.
client.print ("POST / atnaujinti HTTP / 1.1 \ n"); klientas.printas ("Priimančioji: api.thingspeak.com \ n"); klientas.print ("Ryšys: uždaryti \ n"); klientas.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); klientas.print ("Content-Type: application / x-www-form-urlencoded \ n"); klientas.print („Content-Length:“); client.print (postStr.length ()); klientas.printas ("\ n \ n"); client.print (postStr);
Galiausiai taip duomenys atrodo „ThingSpeak“ informacijos suvestinėje
Šiuo paskutiniu žingsniu baigiama visa „ IoT“ pagrįstos išmaniosios drėkinimo sistemos pamoka. Atkreipkite dėmesį, kad variklį svarbu išjungti, kai purškiant vandenį dirvožemio drėgmė pasiekia reikiamą lygį. Galite sukurti išmanesnę sistemą, kurioje būtų galima skirtingai valdyti įvairius pasėlius.
Jei vykdydami šį projektą susiduriate su kokiomis nors problemomis, komentuokite toliau arba susisiekite su mūsų forumais, kur rasite aktualesnių klausimų ir jų atsakymų.
Rasti visą programą ir demonstracinės Video šiam projektui žemiau.