Search Code

Hướng dẫn ESP32 35/55 - Màn hình theo dõi cây trồng, độ ẩm đất, nhiệt độ và ánh sáng | Bộ học IoT ESP32 của SunFounder

Hướng dẫn ESP32 35/55 - Màn hình theo dõi cây trồng, độ ẩm đất, nhiệt độ và ánh sáng | Bộ học IoT ESP32 của SunFounder

Trong hướng dẫn này, chúng ta sẽ xây dựng một thiết bị giám sát cây trồng sử dụng vi điều khiển ESP32 từ Bộ học tập IoT ESP32 của SunFounder. Dự án này kết hợp nhiều thành phần để theo dõi độ ẩm đất, nhiệt độ, độ ẩm không khí và mức ánh sáng. Đến cuối hướng dẫn này, bạn sẽ có một hệ thống hoạt động đầy đủ có thể quản lý và hiển thị các thông số quan trọng này để chăm sóc cây trồng. Để có phần giải thích trực quan chi tiết, hãy nhớ xem video (trong video tại 00:00).

Sơ đồ mạch ESP32-25_plant_moitor

Giải thích về phần cứng

Các thành phần chính được sử dụng trong dự án này bao gồm vi điều khiển ESP32, cảm biến DHT11, cảm biến độ ẩm đất, điện trở phụ thuộc ánh sáng (LDR) và màn hình LCD để hiển thị dữ liệu. ESP32 đóng vai trò là bộ não của hệ thống, xử lý dữ liệu và thực hiện các tác vụ điều khiển. Nó có Wi-Fi và Bluetooth tích hợp, cung cấp các tùy chọn kết nối để giám sát từ xa.

Điện trở quang
Mô-đun DHT11
Mô-đun DHT11

Cảm biến DHT11 đo nhiệt độ và độ ẩm không khí, trong khi cảm biến độ ẩm đất phát hiện mức độ ẩm trong đất. LDR đo cường độ ánh sáng xung quanh, cho phép hiểu rõ về điều kiện ánh sáng của cây trồng. Mỗi thành phần đóng vai trò quan trọng trong việc đảm bảo sức khỏe của cây bằng cách cung cấp dữ liệu theo thời gian thực.

Chi tiết từ bảng dữ liệu

Nhà sản xuất SunFounder
Số bộ phận DHT11
Điện áp logic/IO 3,3 V
Điện áp cấp nguồn 5 V
Dòng điện đầu ra (mỗi kênh) 20 mA
Dòng điện đỉnh (mỗi kênh) 50 mA
Hướng dẫn tần số PWM Không áp dụng
Ngưỡng logic đầu vào 0,3 VCC (thấp), 0,7 VCC (cao)
Sụt áp / RDS(on) / bão hòa Không áp dụng
Giới hạn nhiệt độ 0°C đến 50°C
Kiểu đóng gói DIP
Ghi chú / biến thể Tương thích với DHT22

 

  • Đảm bảo mức điện áp phù hợp cho từng thành phần (5V cho bộ điều khiển động cơ, 3,3V cho cảm biến).
  • Sử dụng điện trở kéo xuống cho các nút nhấn để tránh đầu vào trôi nổi.
  • Giữ dây nối gọn gàng để tránh nhầm lẫn và nguy cơ chập mạch.
  • Kiểm tra các kết nối trước khi cấp nguồn cho mạch để tránh hư hỏng.
  • Kiểm tra cách nối dây của DHT11 vì nó nhạy cảm với các kết nối sai.

Hướng dẫn nối dây

ESP32-25_plant_moitor_wiring

Để nối dây các thành phần, hãy bắt đầu bằng cách kết nối các đường nguồn và đất. ESP32 nên được cấp nguồn bằng pin lithium, kết nối cực dương với đường VCC và cực âm với đường GND trên bảng mạch breadboard. Chân dữ liệu của cảm biến DHT11 kết nối với PIN 13, trong khi chân VCC của nó đi đến đường 3,3V và GND đến đất. Cảm biến độ ẩm đất kết nối tương tự: chân tín hiệu của nó đến PIN 14, VCC đến 3,3V và GND đến đất.

Đối với LDR, kết nối một chân với đường 3,3V và chân còn lại với PIN 35, với một điện trở 10k ohm được kết nối từ LDR xuống đất. Màn hình LCD kết nối với đường 5V để cấp nguồn và sử dụng các chân SDASCL kết nối tương ứng với PIN 21PIN 22. Cuối cùng, nối nút nhấn với PIN 32 với điện trở kéo xuống kết nối xuống đất, đảm bảo nó đọc mức thấp khi không được nhấn và mức cao khi được nhấn.

Ví dụ mã & hướng dẫn chi tiết

Phần cốt lõi của chương trình bắt đầu bằng việc định nghĩa các chân cho từng thành phần. Ví dụ, DHTPIN được gán cho PIN 13 cho cảm biến DHT11, trong khi MOIS_PIN được đặt cho PIN 14 cho cảm biến độ ẩm. Việc tổ chức này giúp theo dõi cảm biến nào được kết nối với chân nào.


#define DHTPIN 13     // Đặt chân kết nối với chân dữ liệu DHT11
#define MOIS_PIN 14 // Mô-đun độ ẩm đất
#define LIGHT_PIN 35 // Điện trở quang

Tiếp theo, chúng ta khởi tạo cảm biến DHT và màn hình LCD bên trong hàm setup(). Điều này rất quan trọng vì nó chuẩn bị các thành phần này để hoạt động. Đảm bảo gọi dht.begin() là điều cần thiết để cảm biến DHT bắt đầu đọc các giá trị một cách chính xác.


void setup() {
  Serial.begin(115200);
  dht.begin();  // Khởi tạo DHT11
  lcd.init();  // Khởi tạo LCD
  lcd.backlight();
}

Trong hàm loop(), chúng ta liên tục đọc các giá trị nhiệt độ và độ ẩm, hiển thị chúng trên màn hình LCD. Nếu nút được nhấn, động cơ sẽ được kích hoạt để tưới cây. Logic này sử dụng việc đọc kỹ thuật số của chân nút để xác định có nên bật hoặc tắt động cơ hay không.


void loop() {
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
  if (digitalRead(BUTTON) == HIGH) {
    digitalWrite(motor1A, HIGH); // Bật máy bơm nước
  } else {
    digitalWrite(motor1A, LOW); // Tắt máy bơm nước
  }
  delay(2000);
}

Cấu trúc mã này cho phép luồng dữ liệu và điều khiển rõ ràng, đảm bảo hệ thống giám sát cây trồng hoạt động trơn tru. Để biết thêm chi tiết, mã đầy đủ được tải bên dưới bài viết.

Trình diễn / Điều mong đợi

Sau khi hoàn tất thiết lập và tải mã lên, màn hình LCD sẽ hiển thị số đo nhiệt độ và độ ẩm xen kẽ với độ ẩm đất và mức ánh sáng. Khi nút nhấn được bấm, máy bơm nước sẽ kích hoạt, cung cấp nước cho cây. Đảm bảo tất cả các kết nối đều chắc chắn để tránh các sự cố như đầu vào trôi nổi hoặc số đo không chính xác (trong video tại 05:30).

Việc theo dõi các giá trị hiển thị trên LCD và màn hình nối tiếp sẽ giúp đảm bảo hệ thống hoạt động chính xác. Nếu bạn gặp sự cố, hãy kiểm tra lại dây nối và đảm bảo tất cả các linh kiện được cấp nguồn phù hợp.

Mốc thời gian video

  • 00:00 Bắt đầu
  • 2:23 Giới thiệu dự án
  • 4:02 Trang tài liệu
  • 7:43 1-Trình điều khiển động cơ bơm L293D
  • 14:30 2-Nút nhấn cho bơm
  • 16:35 3-Cảm biến nhiệt độ và độ ẩm DHT11
  • 19:26 4-Cảm biến độ ẩm đất
  • 21:43 5-Cảm biến ánh sáng
  • 24:47 6-Cảm biến độ ẩm đất
  • 26:01 Mã Arduino giám sát cây trồng đầy đủ
  • 29:21 Trình diễn

Hình ảnh

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
Ngôn ngữ: C++
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define DHTPIN 13     // Set the pin connected to the DHT11 data pin
#define MOIS_PIN 14 // Soil mOisture module
#define LIGHT_PIN 35 // Photoresistor
#define motor1A 27 // Pump pin
#define motor2A 26 // Pump pin
#define BUTTON 32 // Button

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

int page = 0;

LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

  Serial.begin(115200);

  // Initialize the dht11
  dht.begin();

  lcd.init();  // initialize the lcd
  lcd.backlight();
  lcd.clear();

  // initialize digital pin as an output.
  pinMode(motor1A, OUTPUT);
  pinMode(motor2A, OUTPUT);

  pinMode(BUTTON, INPUT);
}

void loop() {

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  lcd.clear();
  // Show message per 2 second
  if ((page++) % 2) {
    // Display temperature and humidity
    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 {
    // Display moisture and light sensor values
    lcd.setCursor(0, 0);
    lcd.print("Mois: ");
    lcd.print(analogRead(MOIS_PIN));
    lcd.setCursor(0, 1);
    lcd.print("Light: ");
    lcd.print(analogRead(LIGHT_PIN));
  }
  // Water plant while button pressed
  Serial.println(digitalRead(BUTTON));
  if (digitalRead(BUTTON) == HIGH) {
    // Turn on water pump if button is pressed
    digitalWrite(motor1A, HIGH);
    digitalWrite(motor2A, LOW);
  } else {
    // Turn off water pump if button is not pressed
    digitalWrite(motor1A, LOW);
    digitalWrite(motor2A, LOW);
  }

  delay(2000);
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Tập tin📁

Tập tin Fritzing