цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Умная система полива растений на основе ESP8266, DHT11 и датчика влажности почвы

Умная система полива растений на основе ESP8266, DHT11 и датчика влажности почвы

Автор: Mike(admin) от 22-07-2019, 04:55

Интеллектуальная ирригационная система своими руками


Большинство дачников и фермеров имеют немалые сельскохозяйственные угодия, и иногда становится очень трудно отследить каждый уголок возделываемой земли. Иногда существует вероятность неравномерного разбрызгивания воды при поливе. Это приводит к плохому качеству урожая, что в дальнейшем может привести к финансовым потерям. В этом проекте мы рассмотрим создание интеллектуальной ирригационной системы, использующей преимущества Интернета вещей, которая полезна в практическом плане и облегчает ведение сельского хозяйства.


Умная система полива растений на основе ESP8266, DHT11 и датчика влажности почвы

Интеллектуальная система полива имеет широкие возможности для автоматизации всей системы полива. В данном случае мы создадим систему полива на основе механизма Интернета вещей с использованием модуля ESP8266 NodeMCU и датчика DHT11. Она будет не только автоматически орошать воду в зависимости от уровня влажности в почве, но и отправлять данные на сервер ThingSpeak для отслеживания состояния почвы. Система будет состоять из водяного насоса, который будет использоваться для разбрызгивания воды на землю в зависимости от условий окружающей среды, таких как влажность воздуха, влажность почвы и температура.


Перед началом важно отметить, что для разных культур требуются разные условия влажности воздуха, температуры и влажности почвы. Поэтому в этом примере мы используем такую культуру, для которой влажность почвы должна составлять около 50-55%. Таким образом, когда почва теряет влажность менее чем на 50%, моторный насос автоматически включается для разбрызгивания воды и будет продолжать разбрызгивать воду до тех пор, пока влажность не поднимется до 55% и после этого насос будет выключен. Данные датчика будут отправлены на сервер ThingSpeak через определенный интервал времени, чтобы их можно было контролировать из любой точки мира. Принципиальная схема подключения для этой интеллектуальной ирригационной системы приведена далее.


Умная система полива растений на основе ESP8266, DHT11 и датчика влажности почвы

А так она может выглядеть в макетном виде для тестирования.


Умная система полива растений на основе ESP8266, DHT11 и датчика влажности почвы

При программировании модуля ESP8266 NodeMCU в качестве внешней библиотеки используется только библиотека датчиков DHT11. Датчик влажности выдает аналоговый выход, который может быть считан через аналоговый вывод A0 ESP8266 NodeMCU. Так как NodeMCU не может выдавать выходное напряжение более 3,3 В от своей линии GPIO, поэтому мы используем релейный модуль для привода насоса двигателя 5 В. Также датчик влажности почвы и датчик DHT11 питаются от внешнего источника питания 5 В.


Полный код с комментариями приведен далее. Здесь стоит лишь отметить ососбенности работы с ThingSpeak. В функции sendThingspeak() мы проверяем, подключена ли система к серверу, и если да, то мы подготавливаем строку, в которую записывается показание влажности воздуха, температуры, влажности почвы, и эта строка будет отправляться на сервер ThingSpeak вместе с ключом API и адресом сервера. Данные отправляются на сервер ThingSpeak с помощью функции client.print(), которая содержит ключ API, адрес сервера и строку, подготовленную на предыдущем шаге. Наконец, вот так выглядят данные на панели инструментов ThingSpeak.


Умная система полива растений на основе ESP8266, DHT11 и датчика влажности почвы

Обратите внимание, что важно выключить двигатель, когда влажность почвы достигнет необходимого уровня после разбрызгивания воды. Вы можете сделать более умную систему, которая может содержать разные элементы управления для разных культур.



#include <DHT.h>
#include <ESP8266WiFi.h>
String apiKey = "X5AQ3EGIKMBYW31H";     //  Введите ваш ключ API записи здесь
const char* server = "api.thingspeak.com";
const char *ssid =  "CircuitLoop";     // Введите имя WiFi
const char *pass =  "circuitdigest101"; // Введите пароль WiFi
#define DHTPIN D3          // линия GPIO для подключения dht11
DHT dht(DHTPIN, DHT11);
WiFiClient client;
const int moisturePin = A0;             // линия для подключения датчика влажности почвы
const int motorPin = D0;
unsigned long interval = 10000;
unsigned long previousMillis = 0;
unsigned long interval1 = 1000;
unsigned long previousMillis1 = 0;
float moisturePercentage;              // показания влажности почвы
float h;                  //  показания влажности воздуха
float t;                  // показания температуры
void setup()
{
  Serial.begin(115200);
  delay(10);
  pinMode(motorPin, OUTPUT);
  digitalWrite(motorPin, LOW); // изначально выключаем мотор
  dht.begin();
  Serial.println("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");              // печатаем ... пока не подключимся
  }
  Serial.println("");
  Serial.println("WiFi connected");
}
void loop()
{
  unsigned long currentMillis = millis(); // захватить текущее время
  h = dht.readHumidity();     // считать влажность
  t = dht.readTemperature();     // считать температуру
  if (isnan(h) || isnan(t))
  {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  moisturePercentage = ( 100.00 - ( (analogRead(moisturePin) / 1023.00) * 100.00 ) );
  if ((unsigned long)(currentMillis - previousMillis1) >= interval1) {
    Serial.print("Soil Moisture is  = ");
    Serial.print(moisturePercentage);
    Serial.println("%");
    previousMillis1 = millis();
  }
if (moisturePercentage < 50) {
  digitalWrite(motorPin, HIGH);         // включить мотор
}
if (moisturePercentage > 50 && moisturePercentage < 55) {
  digitalWrite(motorPin, HIGH);        // включить мотор
}
if (moisturePercentage > 56) {
  digitalWrite(motorPin, LOW);          // выключить мотор
}
if ((unsigned long)(currentMillis - previousMillis) >= interval) {
  sendThingspeak();           // отправить данные в thingpeak
  previousMillis = millis();
  client.stop();
}
}
void sendThingspeak() {
  if (client.connect(server, 80))
  {
    String postStr = apiKey;              // добавить ключ API в строку postStr
    postStr += "&field1=";
    postStr += String(moisturePercentage);    // добавить показания влажности почвы
    postStr += "&field2=";
    postStr += String(t);                 // добавить показания температуры
    postStr += "&field3=";
    postStr += String(h);                  // добавить показания влажности воздуха
    postStr += "\r\n\r\n";
    client.print("POST /update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\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);                      //  отправить полную строку
    Serial.print("Moisture Percentage: ");
    Serial.print(moisturePercentage);
    Serial.print("%. Temperature: ");
    Serial.print(t);
    Serial.print(" C, Humidity: ");
    Serial.print(h);
    Serial.println("%. Sent to Thingspeak.");
  }
}



© digitrode.ru


Теги: ESP8266, DHT11, датчик температуры, датчик влажности



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий