Код для поиска

ESP32 Урок 35/55 — Монитор растений, почва, температура и свет | Учебный набор SunFounder для ESP32 IoT

ESP32 Урок 35/55 — Монитор растений, почва, температура и свет | Учебный набор SunFounder для ESP32 IoT

В этом руководстве мы создадим монитор растений с использованием микроконтроллера ESP32 из учебного набора SunFounder ESP32 IoT Learning Kit. Этот проект объединяет несколько компонентов для контроля влажности почвы, температуры, влажности воздуха и уровня освещенности. К концу этого руководства у вас будет полностью работающая система, которая сможет управлять и отображать эти важные параметры для ухода за растениями. Подробное визуальное объяснение смотрите в видео (в видео на 00:00).

Схема монитора растений ESP32-25

Описание аппаратного обеспечения

Основные компоненты, используемые в этом проекте, включают микроконтроллер ESP32, датчик DHT11, датчик влажности почвы, фоторезистор (LDR) и ЖК-дисплей для отображения данных. ESP32 служит мозгом системы, обрабатывая данные и выполняя задачи управления. Он имеет встроенные Wi-Fi и Bluetooth, что обеспечивает возможности подключения для удаленного мониторинга.

Фоторезистор
Модуль DHT11
Модуль DHT11

Датчик DHT11 измеряет температуру и влажность воздуха, а датчик влажности почвы определяет уровень влаги в почве. Фоторезистор измеряет интенсивность окружающего света, что позволяет получить информацию об условиях освещения растения. Каждый компонент играет решающую роль в обеспечении здоровья растения, предоставляя данные в реальном времени.

Данные из технической документации

Производитель SunFounder
Номер детали DHT11
Логическое/IO напряжение 3,3 В
Напряжение питания 5 В
Выходной ток (на канал) 20 мА
Пиковый ток (на канал) 50 мА
Рекомендации по частоте ШИМ Н/Д
Пороговые значения входной логики 0,3 ВСС (низкий), 0,7 ВСС (высокий)
Падение напряжения / RDS(on) / насыщение Н/Д
Тепловые пределы от 0°С до 50°С
Корпус DIP
Примечания / варианты Совместим с DHT22

 

  • Обеспечьте правильные уровни напряжения для каждого компонента (5 В для драйвера двигателя, 3,3 В для датчиков).
  • Используйте подтягивающие резисторы для кнопок, чтобы предотвратить плавающие входы.
  • Содержите проводку в порядке, чтобы избежать путаницы и возможных коротких замыканий.
  • Проверьте соединения перед подачей питания на схему, чтобы предотвратить повреждения.
  • Проверьте подключение DHT11, так как он чувствителен к неправильным соединениям.

Инструкции по подключению

ESP32-25_plant_moitor_wiring

Для подключения компонентов начните с соединения линий питания и заземления. ESP32 должен питаться от литиевой батареи: положительный вывод подключается к линии VCC, а заземление — к линии GND на макетной плате. Вывод данных датчика DHT11 подключается к PIN 13, его VCC — к линии 3,3 В, а GND — к земле. Датчик влажности почвы подключается аналогично: его сигнальный вывод — к PIN 14, VCC — к 3,3 В, а GND — к земле.

Для фоторезистора подключите один вывод к линии 3,3 В, а другой — к PIN 35, при этом резистор 10 кОм соединяется от фоторезистора с землей. ЖК-дисплей подключается к линии 5 В для питания и использует выводы SDA и SCL, подключенные к PIN 21 и PIN 22 соответственно. Наконец, подключите кнопку к PIN 32 с подтягивающим резистором, соединенным с землей, чтобы она считывала низкий уровень, когда не нажата, и высокий, когда нажата.

Примеры кода и пояснения

Ядро нашей программы начинается с определения выводов для каждого компонента. Например, DHTPIN назначается на PIN 13 для датчика DHT11, а MOIS_PIN устанавливается на PIN 14 для датчика влажности. Такая организация помогает отслеживать, какой датчик подключен к какому выводу.


#define DHTPIN 13     // Установите вывод, подключенный к выводу данных DHT11
#define MOIS_PIN 14 // Модуль влажности почвы
#define LIGHT_PIN 35 // Фоторезистор

Далее мы инициализируем датчик DHT и ЖК-дисплей внутри функции setup(). Это важно, так как подготавливает эти компоненты к работе. Обязательный вызов dht.begin() необходим для того, чтобы датчик DHT начал правильно считывать значения.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Инициализация DHT11
  lcd.init();  // Инициализация ЖК-дисплея
  lcd.backlight();
}

В функции loop() мы непрерывно считываем значения температуры и влажности, отображая их на ЖК-дисплее. Если кнопка нажата, двигатель активируется для полива растений. Эта логика использует цифровое чтение вывода кнопки, чтобы определить, включать или выключать двигатель.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Включить водяной насос
  } else {
    digitalWrite(motor1A, LOW); // Выключить водяной насос
  }
  delay(2000);
}

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

Демонстрация / Что ожидать

После завершения настройки и загрузки кода на ЖК-дисплее должны попеременно отображаться показания температуры и влажности, а также уровня влажности почвы и освещенности. При нажатии кнопки водяной насос должен активироваться, подавая воду к растению. Убедитесь, что все соединения надежны, чтобы избежать таких проблем, как плавающие входы или неверные показания (на видео на 05:30).

Контроль значений, отображаемых на ЖК-дисплее и в последовательном мониторе, поможет убедиться в правильной работе системы. Если возникнут проблемы, перепроверьте подключение и убедитесь, что все компоненты получают соответствующее питание.

Таймкоды видео

  • 00:00 Начало
  • 2:23 Введение в проект
  • 4:02 Страница документации
  • 7:43 1-Драйвер двигателя насоса L293D
  • 14:30 2-Кнопка для насоса
  • 16:35 3-Датчик температуры и влажности DHT11
  • 19:26 4-Датчик влажности почвы
  • 21:43 5-Датчик освещенности
  • 24:47 6-Датчик влажности почвы
  • 26:01 Полный код монитора растений для Arduino
  • 29:21 Демонстрация

Изображения

DHT11 Module
DHT11 Module
5V DC water pump
5V DC water pump
soil_mositure_module
soil_mositure_module
photoresistor
photoresistor
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_schematic
ESP32-25_plant_moitor_wiring
ESP32-25_plant_moitor_wiring
836-ESP32 Tutorial 35/55- Arduino code for plant monitor
Язык: C++
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 13 // Установите контакт, подключенный к пину данных DHT11.
#define MOIS_PIN 14 // Модуль влажности почвы
#define LIGHT_PIN 35 // Фоторезистор
#define motor1A 27 // Пин насоса
#define motor2A 26 // Пин насоса
#define BUTTON 32 // Кнопка

#define DHTTYPE DHT11 // DHT 11
DHT dht(DHTPIN, DHTTYPE);

int page = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

  Serial.begin(115200);

 // Инициализируйте dht11
  dht.begin();

  lcd.init(); // инициализировать lcd
  lcd.backlight();
  lcd.clear();

 // инициализировать цифровой пин как выходной.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);

  pinMode(BUTTON, INPUT);
}

void loop() {

 // Считывание температуры или влажности занимает около 250 миллисекунд!
 // Показания датчика могут быть "старыми" до 2 секунд (это очень медленный датчик)
  float humidity = dht.readHumidity();
 // Читать температуру в градусах Цельсия (по умолчанию)
  float temperature = dht.readTemperature();

 // Проверьте, не было ли сбоев чтения, и завершите выполнение (чтобы попробовать снова).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  lcd.clear();
 // Показывать сообщение каждые 2 секунды
  if ((page++) % 2) {
 // Отображать температуру и влажность
    lcd.setCursor(0, 0);
    lcd.print("Humi: ");
    lcd.print(humidity);
    lcd.print("%");
    lcd.setCursor(0, 1);
    lcd.print("Temp: ");
    lcd.print(temperature);
    lcd.print("\xDF");
    lcd.print("C");
  } else {
 // Отображение значений датчиков влажности и освещенности
    lcd.setCursor(0, 0);
    lcd.print("Mois: ");
    lcd.print(analogRead(MOIS_PIN));
    lcd.setCursor(0, 1);
    lcd.print("Light: ");
    lcd.print(analogRead(LIGHT_PIN));
  }
 // Поливайте растение, пока кнопка нажата.
  Serial.println(digitalRead(BUTTON));
  if (digitalRead(BUTTON) == HIGH) {
 // Включите водяной насос, если кнопка нажата.
    digitalWrite(motor1A, HIGH);
    digitalWrite(motor2A, LOW);
  } else {
 // Выключите водяной насос, если кнопка не нажата.
    digitalWrite(motor1A, LOW);
    digitalWrite(motor2A, LOW);
  }

  delay(2000);
}

Вещи, которые могут вам понадобиться

Ресурсы и ссылки

Файлы📁

Файл Fritzing