- Componente necesare
- Diagrama circuitului
- Programarea ESP8266 NodeMCU pentru sistemul automat de irigare
Majoritatea fermierilor folosesc porțiuni mari de teren agricol și devine foarte dificil să se ajungă și să se urmărească fiecare colț al terenurilor mari. Uneori există posibilitatea stropirii inegale de apă. Acest lucru duce la recolte de calitate proastă, ceea ce duce la pierderi financiare. În acest scenariu, sistemul de irigare inteligentă care folosește cea mai recentă tehnologie IoT este de ajutor și duce la ușurarea agriculturii.
Sistemul inteligent de irigare are o gamă largă de posibilități pentru automatizarea sistemului complet de irigare. Aici construim un sistem de irigare bazat pe IoT utilizând modulul ESP8266 NodeMCU și senzorul DHT11. Nu numai că va iriga automat apa pe baza nivelului de umiditate din sol, ci va trimite și datele către serverul ThingSpeak pentru a urmări starea terenului. Sistemul va consta într-o pompă de apă care va fi utilizată pentru a stropi apă pe teren, în funcție de starea mediului înconjurător, cum ar fi Umiditatea, Temperatura și Umiditatea.
Am construit anterior un sistem similar de irigare automată a plantelor care trimite alerte pe mobil, dar nu pe cloud IoT. În afară de aceasta, circuitul detectorului de alarmă de ploaie și de umiditate a solului poate fi de asemenea util în construirea unui sistem de irigare inteligentă.
Înainte de a începe, este important să rețineți că diferitele culturi necesită condiții diferite de umiditate, temperatură și umiditate a solului. Deci, în acest tutorial folosim o astfel de cultură care va necesita o umiditate a solului de aproximativ 50-55%. Deci, atunci când solul își pierde umiditatea la mai puțin de 50%, atunci pompa motorului se va porni automat pentru a stropi apa și va continua să stropească apa până când umezeala ajunge la 55% și după aceea pompa va fi oprită. Datele senzorului vor fi trimise către ThingSpeak Server într-un interval de timp definit, astfel încât să poată fi monitorizate de oriunde din lume.
Componente necesare
- NodeMCU ESP8266
- Modulul senzorului de umiditate a solului
- Modulul pompei de apă
- Modul releu
- DHT11
- Conectarea firelor
Puteți cumpăra toate componentele necesare pentru acest proiect.
Diagrama circuitului
Schema de circuit pentru acest sistem inteligent de irigare IoT este prezentată mai jos:
Programarea ESP8266 NodeMCU pentru sistemul automat de irigare
Pentru programarea modulului ESP8266 NodeMCU, doar biblioteca de senzori DHT11 este utilizată ca bibliotecă externă. Senzorul de umiditate oferă ieșire analogică care poate fi citită prin pinul analogic A0 ESP8266 NodeMCU. Deoarece NodeMCU nu poate oferi o tensiune de ieșire mai mare de 3,3V de la GPIO, așa că folosim un modul de releu pentru a acționa pompa cu motor de 5V. De asemenea, senzorul de umiditate și senzorul DHT11 sunt alimentate de la o sursă de alimentare externă de 5V.
Codul complet cu un videoclip de lucru este dat la sfârșitul acestui tutorial, aici explicăm programul pentru a înțelege fluxul de lucru al proiectului.
Începeți cu includerea bibliotecii necesare.
#include
Deoarece utilizăm serverul ThingSpeak, cheia API este necesară pentru a comunica cu serverul. Pentru a afla cum putem obține cheia API de la ThingSpeak, puteți vizita articolul anterior despre monitorizarea temperaturii și a umidității în direct pe ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Următorul pas este să scrieți acreditările Wi-Fi, cum ar fi SSID și Parolă.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Definiți pinul senzorului DHT unde este conectat DHT și alegeți tipul DHT.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
Ieșirea senzorului de umiditate este conectată la pinul A0 al ESP8266 NodeMCU. Și pinul motorului este conectat la D0 al NodeMCU.
const int moistPin = A0; const int motorPin = D0;
Vom folosi funcția millis () pentru a trimite datele după fiecare interval de timp definit aici, acesta este de 10 secunde. Întârziere () este evitată, deoarece se oprește programul pentru o întârziere definită în cazul în care microcontroler nu pot face alte sarcini. Aflați mai multe despre diferența dintre delay () și millis () aici.
interval lung nesemnat = 10000; unsigned long previousMillis = 0;
Setați pinul motorului ca ieșire și opriți motorul inițial. Porniți citirea senzorului DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // țineți motorul oprit inițial dht.begin ();
Încercați să conectați Wi-Fi cu SSID și parolă date și așteptați să fie conectat Wi-Fi și, dacă este conectat, treceți la pașii următori.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { întârziere (500); Serial.print ("."); } Serial.println (""); Serial.println („WiFi conectat”); }
Definiți ora curentă de pornire a programului și salvați-l într-o variabilă pentru a-l compara cu timpul scurs.
curent lung nesemnat Millis = millis ();
Citiți datele despre temperatură și umiditate și salvați-le în variabile.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Dacă DHT este conectat și ESP8266 NodeMCU este capabil să citească citirile, treceți la pasul următor sau reveniți de aici pentru a verifica din nou.
if (isnan (h) - isnan (t)) { Serial.println ("Nu s-a citit de la senzorul DHT!"); întoarcere; }
Citiți citirea umidității de la senzor și imprimați citirea.
umiditatePercentaj = (100,00 - ((analogRead (umiditatePin) / 1023,00) * 100,00)); Serial.print ("Umiditatea solului este ="); Serial.print (umiditatePercentaj); Serial.println ("%");
Dacă citirea umidității se află între intervalul necesar de umiditate a solului, țineți pompa oprită sau dacă depășește umiditatea necesară, porniți pompa.
if (umiditatePercentaj <50) { digitalWrite (motorPin, HIGH); } if (umiditatePercentaj> 50 && umiditatePercentaj <55) { digitalWrite (motorPin, HIGH); } if (umiditatePercentaj> 56) { digitalWrite (motorPin, LOW); }
Acum, la fiecare 10 secunde, apelați funcția sendThingspeak () pentru a trimite datele de umiditate, temperatură și umiditate către serverul ThingSpeak.
if ((nesemnat lung) (currentMillis - previousMillis)> = interval) { sendThingspeak (); previousMillis = millis (); client.stop (); }
În funcția sendThingspeak () verificăm dacă sistemul este conectat la server și dacă da, atunci pregătim un șir în care este scris umezeala, temperatura, citirea umidității și acest șir va fi trimis către serverul ThingSpeak împreună cu cheia API și adresa serverului.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (umiditatePercentaj); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
În cele din urmă, datele sunt trimise către serverul ThingSpeak utilizând funcția client.print () care conține cheia API, adresa serverului și șirul pregătit în pasul anterior.
client.print ("POST / actualizare HTTP / 1.1 \ n"); client.print ("Gazdă: api.thingspeak.com \ n"); client.print ("Conexiune: închidere \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded \ n"); client.print ("Lungime conținut:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
În cele din urmă, așa arată datele pe tabloul de bord ThingSpeak
Acest ultim pas finalizează tutorialul complet pe sistemul de irigare inteligent bazat pe IoT. Rețineți că este important să opriți motorul atunci când umezeala solului a atins nivelul necesar după stropirea cu apă. Puteți crea un sistem mai inteligent care poate conține un control diferit pentru diferite culturi.
Dacă vă confruntați cu probleme în timp ce faceți acest proiect, atunci comentați mai jos sau accesați forumurile noastre pentru întrebări mai relevante și răspunsurile acestora.
Găsiți mai jos programul complet și videoclipul demonstrativ pentru acest proiect.