Hướng dẫn sử dụng cảm biến độ ẩm đất với ESP8266

Chào các bạn đam mê công nghệ! Hôm nay mình rất vui khi lại cùng các bạn học hỏi về những con cảm biến mới. Trong series hướng dẫn Esp8266 của Lamchucongnghe.com, chúng ta sẽ tìm hiểu về module cảm biến độ ẩm đất (soil moisture sensor) và ứng dụng của nó.

Thông số kỹ thuật

  • Điện áp sử dụng: 3.3 – 5 VDC
  • Đầu ra:
    • AOUT: Đầu ra analog
    • DOUT: Đầu ra tương tự
  • Led báo tín hiệu:
    • Led đỏ: báo nguồn
    • Led xanh: báo mức độ ẩm ở pin DO

Lưu ý: Khi module chưa phát hiện độ ẩm, điện áp ra sẽ ở mức 1. Khi phát hiện độ ẩm, điện áp giảm xuống mức 0.

Nguyên lý hoạt động

Cảm biến độ ẩm đất sử dụng 2 phiến kim loại để cảm nhận độ dẫn điện của môi trường. Khi đất khô, điện áp ra của cảm biến tương đương 3.3V. Khi đất ẩm, điện áp sẽ xuống xấp xỉ 0V (không phải tuyệt đối 0V). Từ 2 trạng thái này, chúng ta có thể đọc được giá trị analog và digital của cảm biến. Cảm biến độ ẩm đất tích hợp IC LM393 để xác định trạng thái của cảm biến. Nếu đạt giá trị ngưỡng độ ẩm đặt, cảm biến sẽ chuyển trạng thái tín hiệu từ mức cao xuống mức thấp.

Lưu ý: Không nên sử dụng cảm biến này quá lâu để tránh ăn mòn bản kim loại.

Sơ đồ đấu nối với ESP8266

Để đấu nối cảm biến độ ẩm đất với ESP8266, bạn có thể tuân theo sơ đồ sau:

Image

Một chút lưu ý cho các bạn, các bạn sẽ cảm thấy hơi khó hiểu một chút. Điều ngược lại so với giả định ban đầu là khi độ ẩm càng lớn thì điện áp sẽ càng giảm. Nhưng đừng lo, đã có code lo, bạn yên tâm nhé!

Trong phần này, chúng ta sẽ tìm hiểu cách sử dụng hàm map trong Arduino để chuyển đổi điện áp trả về (tương đương với độ ẩm) thành giá trị phần trăm. Hàm map() được sử dụng để chuyển đổi giá trị từ một khoảng đo này sang khoảng đo khác và luôn trả về một số nguyên.

Code

int value, real_value;

void setup() {
  Serial.begin(9600); //Mở cổng Serial ở tốc độ 9600
  pinMode(5, INPUT_PULLUP); // Sử dụng chân D1-GPIO5 làm cổng đọc digital
  // Chân A0 không cần khai báo
}

void loop() {
  // Chúng ta sẽ tạo một vòng lặp để đọc 10 lần giá trị cảm biến.
  // Sau đó, lấy giá trị trung bình để đạt được giá trị chính xác nhất.
  for(int i = 0; i <= 9; i++){
    real_value += analogRead(A0);
  }
  value = real_value / 10;

  int percent = map(value, 350, 1023, 0, 100); 
  // Set giá trị thang đo đầu và cuối để chuyển giá trị về thang từ 0-100.
  // Cái này sẽ bằng thực nghiệm nhé

  percent = 100 - percent; // Tính giá trị phần trăm thực

  Serial.print(percent);
  Serial.print('%');
  Serial.print(" ");
  Serial.print("Giá trị analog: ");
  Serial.print(value);
  Serial.print(" ");
  Serial.print("Giá trị digital: ");
  Serial.println(digitalRead(5));

  delay(200);
  real_value = 0;
}

Video hướng dẫn có thể xem tại: Link Video

Chúc các bạn thành công và tận hưởng quá trình thử nghiệm các ứng dụng của cảm biến độ ẩm đất với ESP8266!