- Componenti richiesti
- Schema elettrico
- Programmazione ESP8266 NodeMCU per sistema di irrigazione automatico
La maggior parte degli agricoltori utilizza grandi porzioni di terreno agricolo e diventa molto difficile raggiungere e seguire ogni angolo di grandi terre. A volte c'è la possibilità di spruzzi d'acqua irregolari. Ciò si traduce in raccolti di cattiva qualità che portano a ulteriori perdite finanziarie. In questo scenario il sistema di irrigazione intelligente che utilizza la più recente tecnologia IoT è utile e facilita l'agricoltura.
Il sistema di irrigazione intelligente ha un ampio campo di applicazione per automatizzare l'intero sistema di irrigazione. Qui stiamo costruendo un sistema di irrigazione basato sull'IoT utilizzando il modulo NodeMCU ESP8266 e il sensore DHT11. Non solo irrigerà automaticamente l'acqua in base al livello di umidità nel suolo, ma invierà anche i dati a ThingSpeak Server per tenere traccia delle condizioni del terreno. Il sistema sarà costituito da una pompa dell'acqua che verrà utilizzata per spruzzare acqua sul terreno a seconda delle condizioni ambientali del terreno come umidità, temperatura e umidità.
In precedenza abbiamo costruito un simile sistema di irrigazione automatica delle piante che invia avvisi su dispositivi mobili ma non su cloud IoT. Oltre a questo, anche l'allarme pioggia e il circuito di rilevamento dell'umidità del suolo possono essere utili nella costruzione di un sistema di irrigazione intelligente.
Prima di iniziare, è importante notare che le diverse colture richiedono diverse condizioni di umidità del suolo, temperatura e umidità. Quindi in questo tutorial stiamo usando un tale raccolto che richiederà un'umidità del suolo di circa il 50-55%. Quindi, quando il terreno perde la sua umidità a meno del 50%, la motopompa si accenderà automaticamente per spruzzare l'acqua e continuerà a spruzzare l'acqua fino a quando l'umidità non sale al 55%, dopodiché la pompa verrà spenta. I dati del sensore verranno inviati a ThingSpeak Server in un intervallo di tempo definito in modo che possa essere monitorato da qualsiasi parte del mondo.
Componenti richiesti
- NodeMCU ESP8266
- Modulo sensore di umidità del suolo
- Modulo pompa dell'acqua
- Modulo relè
- DHT11
- Collegamento dei cavi
Puoi acquistare tutti i componenti necessari per questo progetto.
Schema elettrico
Di seguito è riportato lo schema del circuito per questo sistema di irrigazione intelligente IoT:
Programmazione ESP8266 NodeMCU per sistema di irrigazione automatico
Per programmare il modulo ESP8266 NodeMCU, solo la libreria di sensori DHT11 viene utilizzata come libreria esterna. Il sensore di umidità fornisce un'uscita analogica che può essere letta tramite il pin analogico A0 di ESP8266 NodeMCU. Poiché il NodeMCU non può fornire una tensione di uscita superiore a 3,3 V dal suo GPIO, stiamo utilizzando un modulo relè per azionare la pompa del motore da 5 V. Anche il sensore di umidità e il sensore DHT11 sono alimentati da un alimentatore esterno a 5V.
Il codice completo con un video funzionante viene fornito alla fine di questo tutorial, qui stiamo spiegando il programma per comprendere il flusso di lavoro del progetto.
Inizia includendo la libreria necessaria.
#includere
Poiché stiamo utilizzando il server ThingSpeak, la chiave API è necessaria per comunicare con il server. Per sapere come possiamo ottenere la chiave API da ThingSpeak, puoi visitare il precedente articolo sul monitoraggio della temperatura e dell'umidità in tempo reale su ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Il passaggio successivo consiste nello scrivere le credenziali Wi-Fi come SSID e password.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Definire il pin del sensore DHT a cui è collegato il DHT e scegliere il tipo di DHT.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
L'uscita del sensore di umidità è collegata al pin A0 di ESP8266 NodeMCU. E il pin del motore è collegato a D0 di NodeMCU.
const int umiditàPin = A0; const int motorPin = D0;
Useremo la funzione millis () per inviare i dati dopo ogni intervallo di tempo definito qui è di 10 secondi. Il delay () viene evitato poiché arresta il programma per un ritardo definito in cui il microcontrollore non può eseguire altre attività. Scopri di più sulla differenza tra delay () e millis () qui.
intervallo lungo senza segno = 10000; unsigned long previousMillis = 0;
Impostare il pin del motore come uscita e spegnere inizialmente il motore. Avvia la lettura del sensore DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // mantiene il motore spento inizialmente dht.begin ();
Prova a connetterti al Wi-Fi con SSID e password forniti e attendi che il Wi-Fi sia connesso e, se connesso, vai ai passaggi successivi.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { ritardo (500); Serial.print ("."); } Serial.println (""); Serial.println ("WiFi connesso"); }
Definire l'ora corrente di avvio del programma e salvarlo in una variabile per confrontarlo con il tempo trascorso.
corrente lunga non firmataMillis = millis ();
Leggere i dati di temperatura e umidità e salvarli in variabili.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Se DHT è collegato e ESP8266 NodeMCU è in grado di leggere le letture, procedere al passaggio successivo o tornare da qui per controllare di nuovo.
if (isnan (h) - isnan (t)) { Serial.println ("Impossibile leggere dal sensore DHT!"); ritorno; }
Leggere la lettura dell'umidità dal sensore e stampare la lettura.
umiditàPercentuale = (100,00 - ((analogRead (moistPin) / 1023,00) * 100,00)); Serial.print ("Soil Moisture is ="); Serial.print (umiditàPercentuale); Serial.println ("%");
Se la lettura dell'umidità è compresa nell'intervallo di umidità del suolo richiesto, tenere spenta la pompa o se supera l'umidità richiesta, accendere la pompa.
if ( umiditàPercentuale <50) { digitalWrite (motorPin, HIGH); } se ( percentuale di umidità> 50 && percentuale di umidità <55) { digitalWrite (motorPin, HIGH); } if ( umiditàPercentuale > 56) { digitalWrite (motorPin, LOW); }
Ora, dopo ogni 10 secondi, chiama la funzione sendThingspeak () per inviare i dati di umidità, temperatura e umidità al server ThingSpeak.
if ((unsigned long) (currentMillis - previousMillis)> = interval) { sendThingspeak (); previousMillis = millis (); client.stop (); }
Nella funzione sendThingspeak () controlliamo se il sistema è connesso al server e in caso affermativo prepariamo una stringa in cui viene scritta la lettura di umidità, temperatura, umidità e questa stringa verrà inviata al server ThingSpeak insieme alla chiave API e all'indirizzo del server.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = Stringa (umiditàPercentuale); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
Infine i dati vengono inviati al server ThingSpeak utilizzando la funzione client.print () che contiene la chiave API, l'indirizzo del server e la stringa preparata nel passaggio precedente.
client.print ("POST / aggiornamento HTTP / 1.1 \ n"); client.print ("Host: api.thingspeak.com \ n"); client.print ("Connessione: chiudi \ 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);
Finalmente ecco come appaiono i dati su ThingSpeak Dashboard
Quest'ultimo passaggio termina il tutorial completo sul sistema di irrigazione intelligente basato su IoT. Notare che è importante spegnere il motore quando l'umidità del suolo ha raggiunto il livello richiesto dopo la spruzzatura dell'acqua. Puoi creare un sistema più intelligente che può contenere controlli diversi per colture diverse.
In caso di problemi durante l'esecuzione di questo progetto, commenta di seguito o accedi ai nostri forum per domande più pertinenti e le loro risposte.
Di seguito trovi il programma completo e il video dimostrativo per questo progetto.