Hướng dẫn esp8266 #5: cảm biến độ ẩm đất và ứng dụng

Đào Hùng 09/04/2021
huong-dan-esp8266-5-cam-bien-do-am-dat-va-ung-dung

Mở đầu

  • Chào các bạn đã quay trở lại với Series hướng dẫn Esp8266 của Lamchucongnghe.com. Hôm nay mình rất vui khi lại cùng các bạn ngồi tìm tòi và học hỏi những con cảm biến mới. Hôm nay chúng ta sẽ tìm hiểu về module cảm biến độ ẩm đất (soil moisture sensor). Thực tế, những bài viết về cảm biến độ ẩm đất khá nhiều, nhưng thực sự chưa chất lượng và  thực sự chính xác. Thì hôm nay, mình sẽ viết một bài hướng dẫn chi tiết cho các bạn làm sao có thể sử dụng tối ưu nhất con cảm biến độ ẩm đất này nhé

Chuẩn bị

Phần cứng
ESP8266 NodeMCU v1.0 x1
Phần mềm
Arduino IDE  

Giới thiệu cảm biến độ ẩm đất

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 ý: Module khi chưa phát hiện ở mức 1, khi phát hiện độ ẩm cho ra mức 0 Nguyên lỹ hoạt động Nếu như đất khô, không có độ ẩm thì điện áp ra của nó tương đương 3.3V. Còn nếu ở trong môi trường có độ ẩm rất lớn, thì nó sẽ xấp xỉ 0V ( chứ không phải tuyệt đối 0V nhé ). Sở dĩ có điều này bởi vì 2 phiến kim loại ở cảm biến sẽ cảm nhận được độ dẫn điện của môi trường, từ đó nếu độ ẩm càng lớn thì điện áp càng nhỏ. Cảm biến độ ẩm đất có tích hợp IC LM393, từ đó chúng ta có thể đọc được 2 trạng thái của cảm biến là Analog và Digital. Cảm biến sẽ chuyển tính hiệu chân D0 từ mức cao xuống mức thấp nếu đạt giá trị ngưỡng độ ẩm đặt. Lưu ý: Các bạn cũng không nên sử dụng cảm biến này quá lâu vì có thể bị ăn mòn bản kim loại Sơ đồ đấu nối với ESP8266

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 ý: Module khi chưa phát hiện ở mức 1, khi phát hiện độ ẩm cho ra mức 0

Nguyên lỹ hoạt động

  • Nếu như đất khô, không có độ ẩm thì điện áp ra của nó tương đương 3.3V. Còn nếu ở trong môi trường có độ ẩm rất lớn, thì nó sẽ xấp xỉ 0V ( chứ không phải tuyệt đối 0V nhé ). Sở dĩ có điều này bởi vì 2 phiến kim loại ở cảm biến sẽ cảm nhận được độ dẫn điện của môi trường, từ đó nếu độ ẩm càng lớn thì điện áp càng nhỏ. Cảm biến độ ẩm đất có tích hợp  IC LM393, từ đó chúng ta có thể đọc được 2 trạng thái của cảm biến là Analog và Digital. Cảm biến sẽ chuyển tính hiệu chân D0 từ mức cao xuống mức thấp nếu đạt giá trị ngưỡng độ ẩm đặt.

Lưu ý: Các bạn cũng không nên sử dụng cảm biến này quá lâu vì có thể bị ăn mòn bản kim loại

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

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 ý: Module khi chưa phát hiện ở mức 1, khi phát hiện độ ẩm cho ra mức 0 Nguyên lỹ hoạt động Nếu như đất khô, không có độ ẩm thì điện áp ra của nó tương đương 3.3V. Còn nếu ở trong môi trường có độ ẩm rất lớn, thì nó sẽ xấp xỉ 0V ( chứ không phải tuyệt đối 0V nhé ). Sở dĩ có điều này bởi vì 2 phiến kim loại ở cảm biến sẽ cảm nhận được độ dẫn điện của môi trường, từ đó nếu độ ẩm càng lớn thì điện áp càng nhỏ. Cảm biến độ ẩm đất có tích hợp IC LM393, từ đó chúng ta có thể đọc được 2 trạng thái của cảm biến là Analog và Digital. Cảm biến sẽ chuyển tính hiệu chân D0 từ mức cao xuống mức thấp nếu đạt giá trị ngưỡng độ ẩm đặt. Lưu ý: Các bạn cũng không nên sử dụng cảm biến này quá lâu vì có thể bị ăn mòn bản kim loại Sơ đồ đấu nối với ESP8266

  • Một chút lưu ý cho các bạn, các bạn sẽ cảm thấy nó hơi bị ngược một chút. Giống như việc độ ẩm càng lớn thì điện áp sẽ càng giảm. Nhưng không sao, đã có code lo, các bạn yên tâm nhé
  • Trong phần này, chúng ta sẽ có thêm một kiến thức mới, đó là việc sử dụng hàm map trong Arduino để chuyển điện áp trả về ( của độ ẩm ) về dạng giá trị phần trăm.
  • map() là hàm dùng để chuyển một giá trị từ thang đo này sang một giá trị ở thang đo khác. Giá trị trả về của hàm map() luôn là một số nguyên.
  • Bạn có thể tìm hiểu thêm về hàm tại đây

Code

int value,real_value;
void setup() {
  Serial.begin(9600);                             //Mở cổng Serial ở tốc độ 9600
  pinMode(5,INPUT_PULLUP);                        // Mình sẽ dùng chân D1-GPIO5 để làm cổng đọc digital, còn chân A0 vào thì không cần khai báo cũng được nhé
}
 
void loop() {
  // Chúng ta sẽ tạo một hàm for để đọc 10 lần giá trị cảm biến, sau đó lấy giá trị trung bình để đượ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á thang giá trị đầu và giá trị cuối để đưa 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. Chuyển điện thế từ 3.3V ( khô ) thành 3.3V ( ẩm )
  Serial.print(percent);
  Serial.print('%');
  Serial.print(" ");
  Serial.print("Gia tri analog: ");
  Serial.print(value);
  Serial.print(" ");
  Serial.print("Gia tri digital: ");
  Serial.println(digitalRead(5));
  delay(200);
  real_value=0;
}

Video

https://www.youtube.com/watch?v=PlWGoZyZFKQ

Bình luận
Nội dung này chưa có bình luận, hãy gửi cho chúng tôi bình luận đầu tiên của bạn.
VIẾT BÌNH LUẬN