- Необходими компоненти
- Електрическа схема
- Програмиране на ESP8266 NodeMCU за система за автоматично напояване
Повечето от фермерите използват големи части от земеделска земя и става много трудно да се достигне и проследи всеки ъгъл на големи земи. Понякога има възможност за неравномерно пръскане на вода. Това води до лошо качество на културите, което допълнително води до финансови загуби. В този сценарий системата за интелигентно напояване, използваща най-новата IoT технология, е полезна и води до лекота на земеделие.
В Смарт напоителна система има широк обхват за автоматизиране на пълна система за напояване. Тук изграждаме система за напояване, базирана на IoT, използвайки модул ESP8266 NodeMCU и сензор DHT11. Той не само автоматично ще напоява водата въз основа на нивото на влага в почвата, но също така ще изпраща данните на ThingSpeak Server, за да следи състоянието на земята. Системата ще се състои от водна помпа, която ще се използва за пръскане на вода върху земята в зависимост от състоянието на околната среда, като влага, температура и влажност.
Преди това изграждаме подобна автоматична напоителна система за растения, която изпраща сигнали на мобилни устройства, но не и на IoT облак. Освен това, алармата за дъжд и веригата за детектор на влага в почвата също могат да бъдат полезни при изграждането на интелигентна напоителна система.
Преди да започнете, важно е да се отбележи, че различните култури се нуждаят от различно състояние на влага, температура и влажност на почвата. Така че в този урок ние използваме такава култура, която ще изисква влажност на почвата от около 50-55%. Така че, когато почвата загуби своята влага под 50%, тогава Моторната помпа ще се включи автоматично, за да пръска водата и тя ще продължи да пръска водата, докато влагата се покачи до 55% и след това помпата ще бъде изключена. Данните от сензора ще бъдат изпратени до ThingSpeak Server в определен интервал от време, така че да могат да бъдат наблюдавани от всяка точка на света.
Необходими компоненти
- NodeMCU ESP8266
- Модул на сензора за влага в почвата
- Модул водна помпа
- Релеен модул
- DHT11
- Свързване на проводници
Можете да закупите всички компоненти, необходими за този проект.
Електрическа схема
Схемата на схемата за тази система за интелигентно напояване на IoT е дадена по-долу:
Програмиране на ESP8266 NodeMCU за система за автоматично напояване
За програмиране на модула ESP8266 NodeMCU като външна библиотека се използва само библиотеката на сензора DHT11. Сензорът за влага дава аналогов изход, който може да се прочете през аналоговия щифт A0 на ESP8266 NodeMCU. Тъй като NodeMCU не може да даде изходно напрежение по-голямо от 3.3V от GPIO, затова използваме релеен модул за задвижване на 5V моторната помпа. Също така сензорът за влага и DHT11 се захранват от външно 5V захранване.
Пълен код с работещо видео е даден в края на този урок, тук обясняваме програмата, за да разберем работния поток на проекта.
Започнете с включването на необходимата библиотека.
#include
Тъй като използваме ThingSpeak Server, API ключът е необходим, за да комуникираме със сървъра. За да разберете как можем да получим API ключ от ThingSpeak, можете да посетите предишната статия за мониторинг на температурата и влажността на живо на ThingSpeak.
String apiKey = "X5AQ445IKMBYW31H const char * server =" api.thingspeak.com ";
Следващата стъпка е да напишете идентификационните данни за Wi-Fi като SSID и парола.
const char * ssid = "CircuitDigest"; const char * pass = "xxxxxxxxxxx";
Определете DHT сензорния щифт, където е свързан DHT, и изберете типа DHT.
#define DHTPIN D3 DHT dht (DHTPIN, DHT11);
Изходът на сензора за влага е свързан към щифт A0 на ESP8266 NodeMCU. И щифтът на двигателя е свързан към D0 на NodeMCU.
const int влажностPin = A0; const int motorPin = D0;
Ще използваме функцията millis () за изпращане на данните след всеки определен интервал от време, тук е 10 секунди. В забавяне () се избягва, тъй като спира изпълнението на програмата за определен срок, когато микроконтролер не мога да направя други задачи. Научете повече за разликата между delay () и millis () тук.
неподписан дълъг интервал = 10000; unsigned long previousMillis = 0;
Поставете щифта на двигателя като изход и първоначално изключете двигателя. Започнете отчитането на сензора DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // първоначално изключете мотора dht.begin ();
Опитайте да свържете Wi-Fi с даден SSID и парола и изчакайте Wi-Fi да бъде свързан и ако е свързан, преминете към следващите стъпки.
WiFi.begin (ssid, pass); докато (WiFi.status ()! = WL_CONNECTED) { закъснение (500); Serial.print ("."); } Serial.println (""); Serial.println („WiFi свързан“); }
Определете текущото време на стартиране на програмата и я запишете в променлива, за да я сравните с изминалото време.
неподписан дълъг токMillis = милис ();
Прочетете данните за температурата и влажността и ги запишете в променливи.
float h = dht.readHuminity (); float t = dht.readTemperature ();
Ако DHT е свързан и ESP8266 NodeMCU е в състояние да чете показанията, след това преминете към следващата стъпка или се върнете от тук, за да проверите отново.
if (isnan (h) - isnan (t)) { Serial.println ("Неуспешно четене от DHT сензор!"); връщане; }
Прочетете показанията за влага от сензора и отпечатайте показанията.
влажностPercentage = (100.00 - ((analogRead (vlagaPin) / 1023.00) * 100.00)); Serial.print ("Влагата на почвата е ="); Serial.print (влажностПроцент); Serial.println ("%");
Ако показанията за влага са между необходимия диапазон на влага в почвата, изключете помпата или ако тя надхвърля необходимата влага, включете помпата.
ако (влажностPercentage <50) { digitalWrite (motorPin, HIGH); } if (влажностPercentage> 50 && влажностPercentage <55) { digitalWrite (motorPin, HIGH); } if (влажностPercentage> 56) { digitalWrite (motorPin, LOW); }
Сега след всеки 10 секунди извикайте функцията sendThingspeak (), за да изпратите данни за влагата, температурата и влажността на сървъра ThingSpeak.
if ((неподписано дълго) (currentMillis - previousMillis)> = интервал) { sendThingspeak (); previousMillis = милис (); client.stop (); }
Във функцията sendThingspeak () проверяваме дали системата е свързана със сървър и ако да, тогава подготвяме низ, в който се записва влага, температура, влажност и този низ ще бъде изпратен на сървъра ThingSpeak заедно с API ключа и адреса на сървъра.
if (client.connect (server, 80)) { String postStr = apiKey; postStr + = "& field1 ="; postStr + = низ (влажностPercentage); postStr + = "& field2 ="; postStr + = String (t); postStr + = "& field3 ="; postStr + = String (h); postStr + = "\ r \ n \ r \ n";
Накрая данните се изпращат към ThingSpeak сървър с помощта на client.print () функция, която съдържа API ключ, адрес на сървъра и низа, който е подготвен в предишната стъпка.
client.print ("POST / актуализиране на HTTP / 1.1 \ n"); client.print ("Хост: api.thingspeak.com \ n"); client.print ("Връзка: затворете \ n"); client.print ("X-THINGSPEAKAPIKEY:" + apiKey + "\ n"); client.print ("Тип съдържание: application / x-www-form-urlencoded \ n"); client.print ("Content-Length:"); client.print (postStr.length ()); client.print ("\ n \ n"); client.print (postStr);
И накрая така изглеждат данните на таблото за управление ThingSpeak
Тази последна стъпка завършва пълния урок за интелигентна напоителна система, базирана на IoT. Имайте предвид, че е важно да изключите двигателя, когато влагата в почвата достигне необходимото ниво след пръскане с вода. Можете да направите по-интелигентна система, която може да съдържа различен контрол за различните култури.
Ако се сблъскате с някакви проблеми, докато правите този проект, тогава коментирайте по-долу или посетете нашите форуми за по-подходящи въпроси и техните отговори.
Намерете пълната програма и демонстрационно видео за този проект по-долу.