- Wymagane składniki
- Schemat obwodu
- Programowanie ESP8266 NodeMCU do automatycznego systemu nawadniania
Większość rolników korzysta z dużych części ziemi uprawnej i bardzo trudno jest dotrzeć i śledzić każdy zakątek dużych ziem. Czasami istnieje możliwość nierównomiernego zraszania wodą. Skutkuje to niską jakością plonów, co dodatkowo prowadzi do strat finansowych. W tym scenariuszu inteligentny system nawadniania wykorzystujący najnowszą technologię IoT jest pomocny i prowadzi do ułatwienia uprawy.
Inteligentny system nawadniania posiada szeroki zakres automatyzacji kompletny system nawadniania. Tutaj budujemy system nawadniania oparty na IoT z wykorzystaniem modułu ESP8266 NodeMCU i czujnika DHT11. Nie tylko automatycznie nawadnia wodę na podstawie poziomu wilgoci w glebie, ale także wysyła dane do serwera ThingSpeak, aby śledzić stan gruntu. System będzie składał się z pompy wodnej, która będzie używana do zraszania gleby wodą w zależności od warunków środowiskowych terenu, takich jak wilgotność, temperatura i wilgotność.
Wcześniej budowaliśmy podobny automatyczny system nawadniania roślin, który wysyła alerty na urządzenia mobilne, ale nie w chmurze IoT. Oprócz tego w budowie inteligentnego systemu nawadniania pomocne mogą być również obwody czujnika deszczu i czujnika wilgoci w glebie.
Przed rozpoczęciem należy zauważyć, że różne uprawy wymagają różnych warunków wilgotności gleby, temperatury i wilgotności. Więc w tym tutorialu używamy takiej uprawy, która będzie wymagała wilgotności gleby około 50-55%. Kiedy więc gleba straci wilgotność do mniej niż 50%, pompa z silnikiem włączy się automatycznie, aby spryskać wodę i będzie kontynuować spryskiwanie wody, aż wilgotność osiągnie 55%, a następnie pompa zostanie wyłączona. Dane czujnika będą przesyłane do ThingSpeak Server w określonych odstępach czasu, aby można było je monitorować z dowolnego miejsca na świecie.
Wymagane składniki
- NodeMCU ESP8266
- Moduł czujnika wilgotności gleby
- Moduł pompy wodnej
- Moduł przekaźników
- DHT11
- Podłączanie przewodów
Możesz kupić wszystkie komponenty potrzebne do tego projektu.
Schemat obwodu
Schemat obwodu tego inteligentnego systemu nawadniania IoT przedstawiono poniżej:
Programowanie ESP8266 NodeMCU do automatycznego systemu nawadniania
Do programowania modułu ESP8266 NodeMCU jako biblioteki zewnętrznej używana jest tylko biblioteka czujników DHT11. Czujnik wilgoci daje wyjście analogowe, które można odczytać przez analogowy pin A0 NodeMCU ESP8266. Ponieważ NodeMCU nie może podawać napięcia wyjściowego większego niż 3,3 V ze swojego GPIO, używamy modułu przekaźnikowego do napędzania pompy silnikowej 5 V. Również czujnik wilgoci i czujnik DHT11 są zasilane z zewnętrznego zasilacza 5V.
Kompletny kod z działającym filmem znajduje się na końcu tego samouczka, tutaj wyjaśniamy program, aby zrozumieć przepływ pracy projektu.
Zacznij od dołączenia niezbędnej biblioteki.
#zawierać
Ponieważ używamy ThingSpeak Server, klucz API jest niezbędny do komunikacji z serwerem. Aby dowiedzieć się, w jaki sposób możemy uzyskać klucz API od ThingSpeak, zapoznaj się z poprzednim artykułem na temat monitorowania temperatury i wilgotności na żywo na ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Następnym krokiem jest zapisanie danych uwierzytelniających Wi-Fi, takich jak SSID i hasło.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Zdefiniuj styk czujnika DHT, do którego podłączony jest DHT, i wybierz typ DHT.
# zdefiniować DHTPIN D3 DHT dht (DHTPIN, DHT11);
Wyjście czujnika wilgoci jest podłączone do styku A0 modułu NodeMCU ESP8266. A pin silnika jest podłączony do D0 NodeMCU.
const int wilgoćPin = A0; const int motorPin = D0;
Będziemy używać funkcji millis () do wysyłania danych po każdym zdefiniowanym przedziale czasu, tutaj jest to 10 sekund. Opóźnienie () jest unikać, ponieważ zatrzymuje program dla określonego opóźnienia gdzie mikrokontroler nie może wykonywać inne zadania. Dowiedz się więcej o różnicy między delay () a millis () tutaj.
długi interwał bez znaku = 10000; unsigned long previousMillis = 0;
Ustaw styk silnika jako wyjście i początkowo wyłącz silnik. Rozpocznij odczyt czujnika DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // początkowo wyłącz silnik dht.begin ();
Spróbuj połączyć się z Wi-Fi z podanym SSID i hasłem i poczekaj na połączenie Wi-Fi, a jeśli jest połączone, przejdź do kolejnych kroków.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { opóźnienie (500); Serial.print („.”); } Serial.println („”); Serial.println („Połączenie Wi-Fi”); }
Zdefiniuj bieżący czas uruchomienia programu i zapisz go w zmiennej, aby porównać go z upływającym czasem.
unsigned long currentMillis = millis ();
Odczytaj dane dotyczące temperatury i wilgotności i zapisz je w zmiennych.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Jeśli DHT jest podłączone, a NodeMCU ESP8266 może odczytać odczyty, przejdź do następnego kroku lub wróć stąd, aby sprawdzić ponownie.
if (isnan (h) - isnan (t)) { Serial.println ("Błąd odczytu z czujnika DHT!"); powrót; }
Odczytaj odczyt wilgotności z czujnika i wydrukuj odczyt.
wilgotnośćProcent = (100,00 - ((analogRead (wilgotnośćPin) / 1023,00) * 100,00)); Serial.print ("Wilgotność gleby to ="); Serial.print (isturePercentage); Serial.println ("%");
Jeśli odczyt wilgotności mieści się w wymaganym zakresie wilgotności gleby, należy wyłączyć pompę lub jeśli wilgotność przekracza wymaganą, włącz pompę.
if (wilgotnośćPercentage <50) { digitalWrite (motorPin, HIGH); } if ( wilgoćPercentage > 50 && wilgociPercentage <55) { digitalWrite (motorPin, HIGH); } if (wilgotnośćPercentage> 56) { digitalWrite (motorPin, LOW); }
Teraz po każdych 10 sekundach wywołaj funkcję sendThingspeak (), aby wysłać dane dotyczące wilgotności, temperatury i wilgotności do serwera ThingSpeak.
if ((unsigned long) (currentMillis - previousMillis)> = interwał) { sendThingspeak (); previousMillis = millis (); client.stop (); }
W funkcji sendThingspeak () sprawdzamy, czy system jest połączony z serwerem, a jeśli tak to przygotowujemy string, w którym zapisany jest odczyt wilgotności, temperatury, wilgotności i ten string zostanie przesłany na serwer ThingSpeak wraz z kluczem API i adresem serwera.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = String (isturePercentage); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
Na koniec dane są przesyłane do serwera ThingSpeak za pomocą funkcji client.print (), która zawiera klucz API, adres serwera i napis, który został przygotowany w poprzednim kroku.
client.print ("POST / aktualizacja HTTP / 1.1 \ n"); client.print ("Host: api.thingspeak.com \ n"); client.print ("Połączenie: zamknij \ 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);
Wreszcie tak wyglądają dane w ThingSpeak Dashboard
Ten ostatni krok kończy pełny samouczek dotyczący inteligentnego systemu nawadniania opartego na IoT. Należy pamiętać, że ważne jest, aby wyłączyć silnik, gdy wilgotność gleby osiągnie wymagany poziom po spryskaniu wodą. Możesz stworzyć bardziej inteligentny system, który może zawierać różne sterowanie dla różnych upraw.
Jeśli napotkasz jakiekolwiek problemy podczas wykonywania tego projektu, skomentuj poniżej lub przejdź na nasze fora, aby uzyskać bardziej odpowiednie pytania i odpowiedzi.
Znajdź poniżej pełny program i film demonstracyjny dla tego projektu.