ESP32 Cảm Biến Mưa

Cảm biến mưa có khả năng phát hiện và đo mức độ mưa/tuyết. Cảm biến mưa cung cấp hai đầu ra: đầu ra số (LOW/HIGH) và đầu ra analog.

Trong hướng dẫn này, chúng ta sẽ học cách sử dụng ESP32 và cảm biến mưa để phát hiện và đo lượng mưa. Cụ thể, chúng ta sẽ đề cập đến:

ESP32 rain sensor

Sau đó, bạn có thể sửa đổi code để kích hoạt motor hoặc cảnh báo khi phát hiện mưa/tuyết.

Linh Kiện Cần Thiết

1×mô-đun phát triển ESP-WROOM-32
1×Alternatively, ESP32 Uno-form board
1×Alternatively, ESP32 S3 Uno-form board
1×Cáp USB Type-C
1×Cảm Biến Mưa
1×breadboard
1×Dây Nối Jumper
1×(Khuyến nghị) Screw Terminal Expansion Board for ESP32
1×(Khuyến nghị) Breakout Expansion Board for ESP32
1×(Khuyến nghị) Power Splitter for ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm Biến Mưa

Cảm biến mưa có thể được sử dụng để phát hiện sự hiện diện của mưa hoặc đo mức độ nước rơi từ mưa. Cảm biến mưa cung cấp hai tùy chọn thông qua chân đầu ra số và chân đầu ra analog.

Cảm biến mưa bao gồm hai phần:

  • Tấm cảm biến
  • Module điện tử
rain sensor sơ đồ chân
image source: diyables.io

Tấm cảm biến

Tấm cảm biến được đặt bên ngoài có thể tiếp xúc với mưa/tuyết (ví dụ: trên mái nhà). Tấm cảm biến có một loạt các vạch đồng lộ thiên, được chia thành hai nhóm: vạch nguồn và vạch cảm biến. Các vạch nguồn và vạch cảm biến này không được kết nối trừ khi chúng được nối bằng nước hoặc tuyết. Không có sự khác biệt giữa vạch nguồn và vạch cảm biến. Bạn có thể chọn một làm vạch nguồn và cái kia sẽ trở thành vạch cảm biến.

Module điện tử

Module điện tử của cảm biến mưa chuyển đổi tín hiệu từ tấm cảm biến thành giá trị analog hoặc số có thể được đọc bởi ESP32. Nó bao gồm bốn chân:

  • Chân VCC: Cần được kết nối với VCC (3.3V đến 5V).
  • Chân GND: Cần được kết nối với GND (0V).
  • Chân DO: Là chân đầu ra số. Nó ở mức HIGH nếu không phát hiện mưa và LOW nếu phát hiện được. Giá trị ngưỡng để phát hiện mưa có thể được điều chỉnh bằng potentiometer tích hợp.
  • Chân AO: Là chân đầu ra analog. Giá trị đầu ra giảm khi lượng nước trong tấm cảm biến tăng, và tăng khi lượng nước trong tấm cảm biến giảm.

Hơn nữa, nó có hai đèn LED chỉ báo:

  • Một đèn LED PWR để báo nguồn.
  • Một đèn LED DO để báo trạng thái mưa trên chân DO: nó sáng khi có mưa.

Cách Hoạt Động

Đối với chân DO:

  • Module có potentiometer tích hợp để thiết lập ngưỡng (độ nhạy).
  • Khi cường độ cao hơn giá trị ngưỡng, mưa được phát hiện, chân đầu ra của cảm biến ở mức LOW, và LED DO sáng.
  • Khi cường độ thấp hơn giá trị ngưỡng, mưa KHÔNG được phát hiện, chân đầu ra của cảm biến ở mức HIGH, và LED DO tắt.

Đối với chân AO:

  • Càng nhiều nước trong tấm cảm biến, giá trị đọc từ chân AO càng thấp.
  • Càng ít nước trong tấm cảm biến, giá trị đọc từ chân AO càng cao.

Lưu ý rằng potentiometer không ảnh hưởng đến giá trị trên chân AO.

Sơ Đồ Đấu Nối

Như đã đề cập ở trên, chân VCC của cảm biến nên được kết nối với 3.3V hoặc 5V. Nếu chúng ta kết nối chân này trực tiếp với chân 3.3V hoặc 5V của ESP32, tuổi thọ của cảm biến sẽ bị rút ngắn do ăn mòn điện hóa. Cách tốt nhất là kết nối chân VCC của cảm biến mưa với một chân đầu ra của ESP32. Chúng ta có thể lập trình chân đó để cấp nguồn cho cảm biến mưa chỉ khi đọc. Điều này có thể giảm thiểu tác động của ăn mòn điện hóa.

Vì module cảm biến mưa có hai đầu ra, bạn có thể chọn sử dụng một hoặc cả hai, tùy thuộc vào nhu cầu của bạn.

  • Cách kết nối ESP32 và cảm biến mưa bằng breadboard

Module cảm biến mưa cung cấp hai đầu ra. Bạn có thể sử dụng một hoặc cả hai tùy theo yêu cầu.

ESP32 rain sensor sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Nếu bạn chưa rõ cách cấp nguồn cho ESP32 và các linh kiện khác, xem: Cách Cung Cấp Nguồn Điện Cho ESP32.

how to connect ESP32 and rain sensor

ESP32 Code - Đọc giá trị từ chân DO

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-rain-sensor */ #define POWER_PIN 19 // ESP32's pin GPIO19 that provides the power to the rain sensor #define DO_PIN 21 // ESP32's pin GPIO21 connected to DO pin of the rain sensor void setup() { // initialize serial communication Serial.begin(9600); // initialize the Arduino's pin as an input pinMode(POWER_PIN, OUTPUT); // configure the power pin pin as an OUTPUT pinMode(DO_PIN, INPUT); } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the rain sensor's power ON delay(10); // wait 10 milliseconds int rain_state = digitalRead(DO_PIN); digitalWrite(POWER_PIN, LOW); // turn the rain sensor's power OFF if (rain_state == HIGH) Serial.println("The rain is NOT detected"); else Serial.println("The rain is detected"); delay(1000); // pause for 1 sec to avoid reading sensors frequently to prolong the sensor lifetime }

Các Bước Thực Hiện

  • Nếu đây là lần đầu tiên bạn sử dụng ESP32, hãy xem ESP32 - Cài Đặt Phần Mềm
  • Copy đoạn code trên và mở bằng Arduino IDE
  • Click nút Upload trên Arduino IDE để upload code lên ESP32
  • Nhỏ một ít nước lên cảm biến mưa
  • Xem kết quả trên Serial Monitor.
COM6
Send
The rain is NOT detected The rain is NOT detected The rain is NOT detected The rain is detected The rain is detected The rain is detected The rain is detected The rain is detected The rain is NOT detected The rain is NOT detected The rain is NOT detected
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Hãy nhớ rằng nếu bạn nhận thấy đèn LED luôn sáng hoặc tắt ngay cả khi cảm biến tiếp xúc với mưa, bạn có thể điều chỉnh potentiometer để tinh chỉnh độ nhạy của cảm biến.

ESP32 Code - Đọc giá trị từ chân AO

/* * Mã ESP32 này được phát triển bởi newbiely.vn * Mã ESP32 này được cung cấp để sử dụng công khai, không có ràng buộc. * Để xem hướng dẫn chi tiết và sơ đồ kết nối, vui lòng truy cập: * https://newbiely.vn/tutorials/esp32/esp32-rain-sensor */ #define POWER_PIN 19 // ESP32's pin GPIO19 that provides the power to the rain sensor #define AO_PIN 36 // ESP32's pin GPIO36 connected to AO pin of the rain sensor void setup() { // initialize serial communication Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure the power pin pin as an OUTPUT } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the rain sensor's power ON delay(10); // wait 10 milliseconds int rain_value = analogRead(AO_PIN); digitalWrite(POWER_PIN, LOW); // turn the rain sensor's power OFF Serial.println(rain_value); // print out the analog value delay(1000); // pause for 1 sec to avoid reading sensors frequently to prolong the sensor lifetime }

Các Bước Thực Hiện

  • Copy đoạn code trên và mở bằng Arduino IDE
  • Click nút Upload trên Arduino IDE để upload code lên ESP32
  • Nhỏ một ít nước lên cảm biến mưa
  • Xem kết quả trên Serial Monitor.
COM6
Send
225 2426 236 563 687 959 975 1009 1017 1053 1078 841 743 440 279
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Lưu ý:

Hướng dẫn này sử dụng hàm analogRead() để đọc giá trị từ ADC (Analog-to-Digital Converter) kết nối với cảm biến mưa. ADC của ESP32 phù hợp cho các dự án KHÔNG cần độ chính xác cao. Tuy nhiên, đối với các dự án cần đo lường chính xác, hãy lưu ý:

  • ADC của ESP32 không hoàn toàn chính xác và có thể cần hiệu chuẩn để có kết quả đúng. Mỗi board ESP32 có thể hơi khác nhau, vì vậy bạn cần hiệu chuẩn ADC cho từng board riêng lẻ.
  • Việc hiệu chuẩn có thể khó khăn, đặc biệt đối với người mới bắt đầu, và có thể không luôn cho kết quả chính xác như bạn muốn.

Đối với các dự án cần độ chính xác cao, hãy cân nhắc sử dụng ADC ngoài (ví dụ ADS1115) với ESP32 hoặc sử dụng Arduino, có ADC đáng tin cậy hơn. Nếu bạn vẫn muốn hiệu chuẩn ADC của ESP32, tham khảo ESP32 ADC Calibration Driver

Video Tutorial

Việc sản xuất video tốn rất nhiều thời gian. Nếu video hướng dẫn hữu ích cho việc học của bạn, hãy đăng ký kênh YouTube để ủng hộ. Nếu nhu cầu đủ cao, chúng tôi sẽ cố gắng làm thêm nhiều video.