De meeste boeren gebruiken grote stukken landbouwgrond en het wordt erg moeilijk om elke hoek van een groot land te bereiken en te volgen. Soms is er een mogelijkheid van ongelijke watersproeiers. Dit resulteert in gewassen van slechte kwaliteit wat verder leidt tot financiële verliezen. In dit scenario is het slimme irrigatiesysteem met behulp van de nieuwste IoT-technologie nuttig en leidt het tot gebruiksgemak.
Het Smart Irrigation System heeft een breed toepassingsgebied om het complete irrigatiesysteem te automatiseren. Hier bouwen we een op IoT gebaseerd irrigatiesysteem met behulp van de ESP8266 NodeMCU-module en de DHT11-sensor. Het zal niet alleen automatisch het water irrigeren op basis van het vochtgehalte in de grond, maar ook de gegevens naar ThingSpeak Server sturen om de toestand van het land bij te houden. Het systeem zal bestaan uit een waterpomp die zal worden gebruikt om water op het land te sprenkelen, afhankelijk van de omgevingsomstandigheden op het land, zoals vocht, temperatuur en vochtigheid.
We hebben eerder een soortgelijk automatisch plantirrigatiesysteem gebouwd dat waarschuwingen op mobiele apparaten verzendt, maar niet op de IoT-cloud. Afgezien hiervan kunnen het regenalarm en het bodemvochtdetectorcircuit ook nuttig zijn bij het bouwen van een slim irrigatiesysteem.
Voordat u begint, is het belangrijk op te merken dat de verschillende gewassen verschillende bodemvochtigheid, temperatuur en vochtigheid vereisen. In deze tutorial gebruiken we dus zo'n gewas dat een bodemvochtigheid van ongeveer 50-55% nodig heeft. Dus wanneer de grond zijn vocht verliest tot minder dan 50%, zal de motorpomp automatisch inschakelen om het water te sprenkelen en zal het water blijven sproeien tot het vocht tot 55% is gestegen en daarna zal de pomp worden uitgeschakeld. De sensorgegevens worden binnen een bepaald tijdsinterval naar ThingSpeak Server gestuurd, zodat ze overal ter wereld kunnen worden gecontroleerd.
Componenten vereist
- NodeMCU ESP8266
- Bodemvochtigheidssensormodule
- Waterpompmodule
- Relaismodule
- DHT11
- Verbindingsdraden
U kunt alle componenten kopen die nodig zijn voor dit project.
Schakelschema
Het schakelschema voor dit IoT Smart Irrigation System wordt hieronder gegeven:
Programmering ESP8266 NodeMCU voor automatisch irrigatiesysteem
Voor het programmeren van de ESP8266 NodeMCU-module wordt alleen de DHT11-sensorbibliotheek als externe bibliotheek gebruikt. De vochtsensor geeft een analoge output die kan worden uitgelezen via de ESP8266 NodeMCU analoge pin A0. Omdat de NodeMCU geen uitgangsspanning kan leveren die hoger is dan 3.3V vanaf zijn GPIO, gebruiken we een relaismodule om de 5V-motorpomp aan te drijven. Ook de vochtsensor en de DHT11-sensor worden gevoed door een externe 5V-voeding.
De volledige code met een werkende video wordt aan het einde van deze tutorial gegeven, hier leggen we het programma uit om de werkstroom van het project te begrijpen.
Begin met het opnemen van de benodigde bibliotheek.
# omvatten
Omdat we de ThingSpeak Server gebruiken, is de API Key nodig om met de server te communiceren. Om te weten hoe we de API Key van ThingSpeak kunnen krijgen, kunt u het vorige artikel over Live temperatuur- en vochtigheidsbewaking op ThingSpeak bezoeken.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
De volgende stap is het schrijven van de Wi-Fi-inloggegevens, zoals SSID en wachtwoord.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Definieer de DHT-sensorpin waarop de DHT is aangesloten en kies het DHT-type.
# definiëren DHTPIN D3 DHT dht (DHTPIN, DHT11);
De uitgang van de vochtsensor is verbonden met pin A0 van ESP8266 NodeMCU. En de motorpin is verbonden met D0 van NodeMCU.
const int vochtigheidPin = A0; const int motorPin = D0;
We zullen de millis () -functie gebruiken om de gegevens na elk gedefinieerd tijdsinterval te verzenden, hier is het 10 seconden. De delay () wordt vermeden omdat het het programma stopt voor een bepaalde vertraging waar de microcontroller geen andere taken kan uitvoeren. Lees hier meer over het verschil tussen delay () en millis ().
lang interval zonder teken = 10000; unsigned long previousMillis = 0;
Stel de motorpin in als uitgang en schakel de motor in eerste instantie uit. Start het lezen van de DHT11-sensor.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // houd de motor aanvankelijk uit dht.begin ();
Probeer wifi te verbinden met de opgegeven SSID en wachtwoord en wacht tot de wifi is verbonden en ga, indien verbonden, naar de volgende stappen.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { vertraging (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi verbonden"); }
Definieer de huidige starttijd van het programma en sla deze op in een variabele om deze te vergelijken met de verstreken tijd.
unsigned lange currentMillis = millis ();
Lees temperatuur- en vochtigheidsgegevens en sla ze op in variabelen.
zweven h = dht.readHumidity (); zweven t = dht.readTemperature ();
Als DHT is aangesloten en de ESP8266 NodeMCU de meetwaarden kan lezen, gaat u verder met de volgende stap of keert u vanaf hier terug om het opnieuw te controleren.
if (isnan (h) - isnan (t)) { Serial.println ("Lezen van DHT-sensor mislukt!"); terugkeren; }
Lees de vochtigheidswaarde van de sensor af en druk de meting af.
vochtigheidPercentage = (100,00 - ((analogRead (vochtigheidPin) / 1023,00) * 100,00)); Serial.print ("Bodemvocht is ="); Serial.print (vochtigheidspercentage); Serial.println ("%");
Als de vochtigheidswaarde tussen het vereiste bodemvochtigheidsbereik ligt, zet u de pomp uit of als deze verder gaat dan het vereiste vocht, zet u de pomp AAN.
if ( moistPercentage <50) { digitalWrite (motorPin, HIGH); } if (vochtigheidPercentage> 50 && vochtigheidPercentage <55) { digitalWrite (motorPin, HIGH); } if (vochtigheidPercentage> 56) { digitalWrite (motorPin, LOW); }
Nu na elke 10 seconden bellen met de sendThingspeak () functie om het vocht, temperatuur en vochtigheid gegevens naar ThingSpeak server.
if ((unsigned long) (currentMillis - previousMillis)> = interval) { sendThingspeak (); previousMillis = millis (); client.stop (); }
In de functie sendThingspeak () controleren we of het systeem is verbonden met de server en zo ja, dan bereiden we een string voor waarin de vochtigheid, temperatuur, vochtigheid wordt geschreven en deze string wordt samen met de API-sleutel en het serveradres naar de ThingSpeak-server gestuurd.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (vochtigheidPercentage); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
Ten slotte worden de gegevens naar de ThingSpeak-server gestuurd met behulp van de functie client.print () die de API-sleutel, het serveradres en de string bevat die in de vorige stap is voorbereid.
client.print ("POST / update HTTP / 1.1 \ n"); client.print ("Host: api.thingspeak.com \ n"); client.print ("Verbinding: sluiten \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Content-Type: application / x-www-form-urlencoded \ n"); client.print ("Inhoud-lengte:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
Eindelijk is dit hoe de gegevens eruit zien op ThingSpeak Dashboard
Met deze laatste stap is de volledige tutorial over het op IoT gebaseerde slimme irrigatiesysteem voltooid. Merk op dat het belangrijk is om de motor uit te schakelen wanneer het bodemvocht het vereiste niveau heeft bereikt na het besprenkelen met water. U kunt een slimmer systeem maken dat verschillende controle kan bevatten voor verschillende gewassen.
Als je problemen ondervindt tijdens het doen van dit project, reageer dan hieronder of ga naar onze forums voor meer relevante vragen en hun antwoorden.
Vind hieronder het volledige programma en de demonstratievideo voor dit project.