Интернет вещей (IoT) позволяет идентифицировать объекты и управлять ими на расстоянии, используя существующую сетевую инфраструктуру, открывая тем самым новые возможности их применения. Чтобы оптимизировать потребление воды и тем самым сохранить зеленую окружающую среду, важно более эффективно ирригировать почву, поскольку запасы воды на нашей планете становятся все более скудными и загрязненными. Цель этого проекта — создать интеллектуальную систему полива и мониторинга комнатных растений, которая анализирует и записывает факторы окружающей среды, чтобы помочь растениям "процветать". Датчики будут собирать и анализировать данные об изменении погоды и уровне влажности почвы. Эта информация будет обрабатываться модулем ESP8266 и отправляться на телефон пользователя под управлением Android.
Ранее на нашем сайте мы рассматривали аналогичные проекты управления поливом растений:
- умная оросительная система на NodeMCU ESP8266 и датчике влажности почвы;
- автоматическая оросительная система на Arduino Uno;
- автоматическая система полива растений на основе Arduino.
Внешний вид собранной конструкции нашего проекта показан на следующем рисунке.
Необходимые компоненты
Аппаратное обеспечение
- ESP8266 (купить на AliExpress).
- Датчик влажности почвы (купить на AliExpress).
- Водяной насос (купить на AliExpress).
- Модуль реле (купить на AliExpress).
- Датчик DHT11 (купить на AliExpress).
- Светодиод (купить на AliExpress).
Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158
Программное обеспечение
- Arduino IDE.
- Blynk App.
Выбор оборудования и программного обеспечения для проекта
Для проекта мы выбрали плату NodeMCU ESP8266, потому что это плата микроконтроллера со встроенным модулем Wi-Fi для беспроводного управления. Также мы использовали датчик влажности почвы для контроля и мониторинга влажности почвы, а также датчик температуры и влажности для измерения температуры и влажности окружающей среды. Все эти компоненты достаточно дешевы. Также мы использовали модуль реле для управления водяным насосом, который будет орошать почву.
Для программирования платы NodeMCU мы использовали Arduino IDE поскольку это очень удобное и простое в использовании приложение для программирования, которое широко используется как студентами, так и профессионалами. Также мы воспользовались помощью приложения Blynk для беспроводного мониторинга и управления полной настройкой проекта. Для повышения производительности системы можно использовать новую версию этого программного обеспечения - Blynk 2.0. Более подробно про работу с приложением Blynk можно прочитать в этой статье.
Схема проекта
Схема интеллектуальной ирригационной системы на основе модуля ESP8266 представлена на следующем рисунке.
Датчик влажности почвы в нашей схеме подключен к контакту A0 (аналоговый контакт) NodeMCU. Сигнальный контакт датчика температуры и влажности DHT подключен к контакту D4 (цифровой контакт) NodeMCU. Модуль реле подключен к выводу D5 NodeMCU, далее к модулю реле подключен водяной насос. Светодиод подключен к выводу D3 NodeMCU - он используется в качестве источника света в ночное время для работы в ночное время и управления через Интернет вещей.
Датчик влажности почвы и датчик DHT всегда подают аналоговый сигнал на NodeMCU, которая на основании этих сигналов вычисляет влажность почвы, влажность и температуру окружающего воздуха.
Исходный код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
#define BLYNK_PRINT Serial #include <OneWire.h> #include <SPI.h> #include <BlynkSimpleEsp8266.h> #include <DHT.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS D2 OneWire oneWire(ONE_WIRE_BUS); DallasTemperature sensors(&oneWire); char auth[] =”BOsoqmyvsdJSenk51n6EplHN0jqela_aajwi”; char ssid[] = “Iqbal”; char pass[] = “Password”; //code written by Md iqbal //website:-techiqbal.com //Youtube:-Techiqbal #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); SimpleTimer timer; void sendSensor() { float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(h) || isnan(t)) { Serial.println(“Failed to read from DHT sensor!”); return; } Blynk.virtualWrite(V5, h); //V5 is for Humidity Blynk.virtualWrite(V6, t); //V6 is for Temperature } void setup() { Serial.begin(9600); dht.begin(); timer.setInterval(1000L, sendSensor); Blynk.begin(auth, ssid, pass); sensors.begin(); } int sensor=0; int output=0; void sendTemps() { sensor=analogRead(A0); output=(145-map(sensor,0,1023,0,100)); //in place 145 there is 100(it change with the change in sensor) delay(1000); sensors.requestTemperatures(); float temp = sensors.getTempCByIndex(0); Serial.println(temp); Serial.print(“moisture = “); Serial.print(output); Serial.println(“%”); Blynk.virtualWrite(V1, temp); Blynk.virtualWrite(V2,output); delay(1000); } void loop() { Blynk.run(); timer.run(); sendTemps(); } |