A legtöbb gazdálkodó a termőföld nagy részét használja, és nagyon nehéz elérni és nyomon követni a nagy földek minden sarkát. Valamikor előfordulhat egyenetlen vízpermetezés. Ez a rossz minőségű növényeket eredményezi, ami további pénzügyi veszteségekhez vezet. Ebben a forgatókönyvben a legújabb IoT technológiát alkalmazó intelligens öntözőrendszer hasznos és megkönnyíti a gazdálkodást.
Az intelligens öntözőrendszer széles körrel rendelkezik a teljes öntözőrendszer automatizálására. Itt IoT alapú öntözőrendszert építünk az ESP8266 NodeMCU modul és a DHT11 érzékelő segítségével. Nemcsak automatikusan öntözi a vizet a talaj nedvességszintje alapján, hanem az adatokat elküldi a ThingSpeak szervernek is, hogy nyomon kövesse a talaj állapotát. A rendszer egy vízszivattyúból áll, amelyet a föld vízzel való szórására használnak, a föld környezeti állapotától, például nedvességtől, hőmérséklettől és páratartalomtól függően.
Korábban hasonló automatikus öntözőrendszert építettünk, amely riasztásokat küld mobilon, de nem az IoT felhőjén. Ezen kívül az esőjelző és a talajnedvesség érzékelő áramkör is hasznos lehet az intelligens öntözőrendszer kiépítésében.
Indulás előtt fontos megjegyezni, hogy a különböző növények eltérő talajnedvességet, hőmérsékletet és páratartalmat igényelnek. Tehát ebben az oktatóanyagban olyan növényt használunk, amelynek talajnedvessége körülbelül 50-55% lesz. Tehát, amikor a talaj nedvességtartalma kevesebb, mint 50%, akkor a motorszivattyú automatikusan bekapcsol, hogy megszórja a vizet, és tovább szórja a vizet, amíg a nedvességtartalom 55% -ra nem emelkedik, és ezt követően a szivattyút kikapcsolják. Az érzékelő adatait meghatározott időközönként elküldjük a ThingSpeak szervernek, hogy azokat a világ bármely pontjáról figyelemmel kísérhessük.
Szükséges alkatrészek
- NodeMCU ESP8266
- Talajnedvesség-érzékelő modul
- Vízszivattyú modul
- Relé modul
- DHT11
- Vezetékek csatlakoztatása
Megvásárolhatja a projekthez szükséges összes alkatrészt.
Kördiagramm
Az IoT intelligens öntözőrendszer kapcsolási rajza az alábbiakban látható:
ESP8266 NodeMCU programozása automatikus öntözőrendszerhez
Az ESP8266 NodeMCU modul programozásához csak a DHT11 érzékelő könyvtárat kell használni külső könyvtárként. A nedvességérzékelő analóg kimenetet ad, amely az ESP8266 NodeMCU A0 analóg tűn keresztül olvasható le. Mivel a NodeMCU nem képes 3,3 V-nál nagyobb kimeneti feszültséget adni a GPIO-ból, ezért relés modult használunk az 5 V-os motorszivattyú meghajtására. A nedvességérzékelőt és a DHT11 érzékelőt külső 5V-os tápfeszültségről is táplálják.
A teljes kód egy működő videóval a leírás végén található, itt elmagyarázzuk a programot, hogy megértsük a projekt munkafolyamatát.
Kezdje a szükséges könyvtár beillesztésével.
#include
Mivel a ThingSpeak szervert használjuk, az API kulcsra van szükség a szerverrel való kommunikációhoz. Ha meg szeretné tudni, hogyan szerezhetünk API kulcsot a ThingSpeak-től, látogasson el a ThingSpeak élő hőmérséklet és páratartalom monitorozásáról szóló korábbi cikkünkbe.
Karakterlánc apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
A következő lépés a Wi-Fi hitelesítő adatok megírása, például SSID és Jelszó.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Határozza meg a DHT érzékelő csapját, ahová a DHT csatlakozik, és válassza ki a DHT típust.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
A nedvességérzékelő kimenete az ESP8266 NodeMCU A0 érintkezőjéhez csatlakozik. És a motor csapja a NodeMCU D0-jához van csatlakoztatva.
const int nedvességPin = A0; const int motorPin = D0;
Millis () függvényt fogunk használni az adatok elküldéséhez minden meghatározott időintervallum után, ez 10 másodperc. A késleltetés () elkerülhető, mivel egy meghatározott késleltetéssel leállítja a programot, ahol a mikrovezérlő nem tud más feladatokat végrehajtani. Tudjon meg többet a késés () és a millis () közötti különbségről itt.
előjel nélküli hosszú intervallum = 10000; aláíratlan hosszú előzőMillis = 0;
Állítsa a motor csapját kimenetnek, és kapcsolja ki a motort. Indítsa el a DHT11 érzékelő leolvasását.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // tartsa a motort kikapcsolva dht.begin ();
Próbálja meg összekapcsolni a Wi-Fi-t megadott SSID-vel és jelszóval, és várja meg, amíg a Wi-Fi csatlakozik, majd ha csatlakozik, akkor ugorjon a következő lépésekre.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { késleltetés (500); Soros.nyomtatás ("."); } Soros.println (""); Serial.println ("WiFi csatlakoztatva"); }
Adja meg a program indításának aktuális idejét, és mentse el egy változóba, hogy összehasonlítsa az eltelt idővel.
előjel nélküli hosszú áramMillis = millis ();
Olvassa el a hőmérséklet és a páratartalom adatait, és mentse azokat változókba.
úszó h = dht.readHumidity (); úszó t = dht.readTemperature ();
Ha a DHT csatlakoztatva van, és az ESP8266 NodeMCU képes olvasni az olvasmányokat, akkor folytassa a következő lépéssel, vagy térjen vissza innen, hogy újra ellenőrizze.
if (isnan (h) - isnan (t)) { Serial.println ("Nem sikerült olvasni a DHT érzékelőből!"); Visszatérés; }
Olvassa le az érzékelő nedvességtartalmát és nyomtassa ki.
nedvesség százalékarány = (100,00 - ((analóg Olvassa el (nedvességtartalom) / 1023,00) * 100,00)); Soros.nyomtatás ("Talajnedvesség ="); Soros.nyomtatás (nedvességProcentázs); Soros.println ("%");
Ha a nedvességérték a kívánt talajnedvességtartomány között van, tartsa kikapcsolt állapotban a szivattyút, vagy ha meghaladja a szükséges nedvességtartamot, kapcsolja be a szivattyút.
if (nedvességi százalék <50) { digitalWrite (motorPin, HIGH); } if (nedvesség százalékos értéke > 50 és& nedvesség százalékos arány <55) { digitalWrite (motorPin, HIGH); } if (nedvességi százalék > 56) { digitalWrite (motorPin, LOW); }
Most minden 10 másodperc után hívja meg a sendThingspeak () függvényt, hogy elküldje a nedvesség, a hőmérséklet és a páratartalom adatait a ThingSpeak szerverre.
if ((hosszú aláíratlan) (currentMillis - előzőMillis)> = intervallum) { sendThingspeak (); előzőMillis = millisz (); client.stop (); }
A sendThingspeak () függvényben ellenőrizzük, hogy a rendszer csatlakozik-e a szerverhez, és ha igen, akkor készítünk egy karakterláncot, ahol nedvesség, hőmérséklet, páratartalom értékeket írunk le, és ezt a karakterláncot elküldjük a ThingSpeak szerverre az API kulccsal és a szerver címével együtt.
if (kliens.csatlakozás (szerver, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (nedvesség százalék); postStr + = "& field2 ="; postStr + = karakterlánc (t); postStr + = "& field3 ="; postStr + = karakterlánc (h); postStr + = "\ r \ n \ r \ n";
Végül az adatokat elküldjük a ThingSpeak szerverre a client.print () függvény segítségével, amely tartalmazza az API kulcsot, a kiszolgáló címét és az előző lépésben előkészített karakterláncot.
client.print ("POST / frissítés HTTP / 1.1 \ n"); client.print ("Gazdagép: api.thingspeak.com \ n"); client.print ("Kapcsolat: bezár \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded \ n"); client.print ("Tartalom-hossz:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
Végül így néznek ki az adatok a ThingSpeak Dashboardon
Ez az utolsó lépés befejezi az IoT alapú intelligens öntözőrendszer teljes oktatóanyagát. Ne feledje, hogy fontos a motor kikapcsolása, ha a talajnedvesség elérte a szükséges szintet a víz megszórása után. Készíthet egy intelligensebb rendszert, amely különböző kontrollokat tartalmazhat a különböző növények számára.
Ha bármilyen probléma merül fel a projekt során, akkor tegye meg észrevételeit, vagy keresse fel fórumainkat a relevánsabb kérdések és válaszaikért.
A projekt teljes programját és bemutató videóját alább találja meg.