- Потрібні компоненти
- Кругова діаграма
- Програмування ESP8266 NodeMCU для системи автоматичного зрошення
Більшість фермерів використовують значну частину сільськогосподарських угідь, і стає дуже важко дістатись і відстежити кожен куточок великих земель. Іноді існує ймовірність нерівномірного розбризкування води. Це призводить до поганої якості врожаю, що в подальшому призводить до фінансових втрат. У цьому сценарії розумна система зрошення з використанням найновішої технології IoT є корисною та полегшує ведення сільського господарства.
Смарт зрошувальної системи має широкі можливості для автоматизації всієї системи зрошення. Тут ми будуємо систему зрошення на основі IoT із використанням модуля ESP8266 NodeMCU та датчика DHT11. Він не тільки автоматично зрошуватиме воду залежно від рівня вологи в ґрунті, але й надсилатиме дані на сервер ThingSpeak для відстеження стану землі. Система буде складатися з водяного насоса, який буде використовуватися для дощування води на землю залежно від стану навколишнього середовища, наприклад вологи, температури та вологості.
Раніше ми побудували подібну автоматичну систему зрошення рослин, яка надсилає попередження на мобільний телефон, але не на хмару IoT. Окрім цього, сигналізація про дощ та схема детектора вологості ґрунту також можуть бути корисними для побудови інтелектуальної системи зрошення.
Перед початком роботи важливо зазначити, що різні культури потребують різної вологості ґрунту, температури та вологості. Отже, у цьому підручнику ми використовуємо таку культуру, яка потребуватиме вологості ґрунту близько 50-55%. Отже, коли грунт втрачає свою вологість до менш ніж 50%, тоді моторний насос автоматично вмикається для збризкування води, і він буде продовжувати обприскувати воду, поки волога не підніметься до 55%, а після цього насос буде вимкнено. Дані датчика надсилатимуться на сервер ThingSpeak через визначений проміжок часу, щоб їх можна було контролювати з будь-якої точки світу.
Потрібні компоненти
- NodeMCU ESP8266
- Модуль датчика вологості ґрунту
- Модуль водяного насоса
- Модуль реле
- DHT11
- Підключення проводів
Ви можете придбати всі компоненти, необхідні для цього проекту.
Кругова діаграма
Схема цієї інтелектуальної системи зрошення IoT наведена нижче:
Програмування ESP8266 NodeMCU для системи автоматичного зрошення
Для програмування модуля ESP8266 NodeMCU в якості зовнішньої бібліотеки використовується лише бібліотека датчиків DHT11. Датчик вологості дає аналоговий вихід, який можна прочитати через аналоговий штифт A0 ESP8266 NodeMCU. Оскільки NodeMCU не може подавати вихідну напругу більше 3,3 В від свого GPIO, тому ми використовуємо релейний модуль для приводу моторного насоса 5 В. Також датчик вологості та датчик DHT11 живляться від зовнішнього джерела живлення 5 В.
Повний код із робочим відео наведено в кінці цього посібника, тут ми пояснюємо програму, щоб зрозуміти робочий процес проекту.
Почніть з включення необхідної бібліотеки.
#включати
Оскільки ми використовуємо сервер ThingSpeak, ключ API необхідний для зв'язку з сервером. Щоб дізнатись, як ми можемо отримати API-ключ від ThingSpeak, ви можете відвідати попередню статтю про моніторинг температури та вологості в реальному часі на ThingSpeak.
Рядок 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 moistPin = A0; const int motorPin = D0;
Ми будемо використовувати функцію millis () для надсилання даних через кожний визначений проміжок часу, тут 10 секунд. Затримку () можна уникнути, так як він зупиняє програму для певної затримки, де мікроконтролер не може робити інші завдання. Дізнайтеся більше про різницю між затримкою () та міліс () тут.
беззнаковий довгий інтервал = 10000; unsigned long previousMillis = 0;
Встановіть штифт двигуна як вихідний і спочатку вимкніть двигун. Почніть зчитування датчика DHT11.
pinMode (motorPin, OUTPUT); digitalWrite (motorPin, LOW); // початково не вимикати двигун dht.begin ();
Спробуйте підключити Wi-Fi із заданим ідентифікатором SSID та паролем і дочекайтеся підключення Wi-Fi, а якщо підключено, перейдіть до наступних кроків.
WiFi.begin (ssid, pass); while (WiFi.status ()! = WL_CONNECTED) { затримка (500); Serial.print ("."); } Serial.println (""); Serial.println ("Wi-Fi підключений"); }
Визначте поточний час запуску програми та збережіть його у змінну, щоб порівняти з минулим часом.
unsigned long currentMillis = millis ();
Зчитуйте дані про температуру та вологість та зберігайте їх у змінних.
float h = dht.readHumidity (); float t = dht.readTemperature ();
Якщо DHT підключено, і ESP8266 NodeMCU може зчитувати показання, перейдіть до наступного кроку або поверніться звідси, щоб перевірити ще раз.
if (isnan (h) - isnan (t)) { Serial.println ("Не вдалося прочитати з датчика DHT!"); повернення; }
Зчитайте показники вологості з датчика та роздрукуйте показання.
moistPercentage = (100.00 - ((analogRead (moistPin) / 1023.00) * 100.00)); Serial.print ("Вологість ґрунту ="); Serial.print (вільний відсоток); Serial.println ("%");
Якщо показники вологості знаходяться між необхідним діапазоном вологості ґрунту, тоді насос вимкніть, або якщо він виходить за межі необхідної вологи, увімкніть насос.
якщо ( відсоток вологи <50) { digitalWrite (motorPin, HIGH); } if ( moistPercentage > 50 && moistPercentage <55) { digitalWrite (motorPin, HIGH); } if ( moistPercentage > 56) { digitalWrite (motorPin, LOW); }
Тепер через кожні 10 секунд викликайте функцію sendThingspeak (), щоб надіслати дані про вологість, температуру та вологість на сервер ThingSpeak.
if ((unsigned long) (currentMillis - previousMillis)> = interval) { sendThingspeak (); previousMillis = міліс (); client.stop (); }
У функції sendThingspeak () ми перевіряємо, чи підключена система до сервера, і якщо так, то ми готуємо рядок, де записується показник вологості, температури, вологості, і цей рядок буде відправлений на сервер ThingSpeak разом із ключем API та адресою сервера.
if (client.connect (server, 80)) { Рядок postStr = apiKey; postStr + = "& field1 ="; postStr + = String (moistPercentage); postStr + = "& field2 ="; postStr + = Рядок (t); postStr + = "& field3 ="; postStr + = Рядок (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. Зверніть увагу, що важливо вимкнути двигун, коли вологість ґрунту досягне необхідного рівня після посипання водою. Ви можете зробити більш розумну систему, яка може містити різний контроль для різних культур.
Якщо ви стикаєтесь із будь-якими проблемами під час виконання цього проекту, тоді коментуйте нижче або звертайтесь на наш форум, щоб отримати відповідні запитання та відповіді на них.
Повну програму та демонстраційне відео для цього проекту знайдіть нижче.