ESP32 Water Sensor (Cảm Biến Nước)

Hướng dẫn này sẽ chỉ bạn cách sử dụng ESP32 và cảm biến nước để phát hiện mưa, rò rỉ nước, tràn bể, và đo mức nước.

Phần Cứng 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×USB Cable Type-A to Type-C (for USB-A PC)
1×USB Cable Type-C to Type-C (for USB-C PC)
1×Water level sensor (cảm biến mức nước)
1×breadboard (bo mạch thí nghiệm)
1×dây jumper (dây nối)
1×(Tùy chọn) DC Power Jack
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ức Nước

Sơ Đồ Chân Cảm Biến Mức Nước

Cảm biến mức nước có 3 chân:

  • Chân S (Signal): Chân này xuất ra điện áp tương tự tỷ lệ thuận với mức nước. Chân này nên được kết nối với chân đầu vào analog của ESP32.
  • Chân + (VCC): kết nối chân này với 3.3V hoặc 5V.
  • Chân - (GND): kết nối chân này với GND.
water sensor sơ đồ chân

Cách Hoạt Động Của Cảm Biến Mức Nước

Đơn giản, càng nhúng sâu cảm biến vào nước thì điện áp đầu ra ở chân S càng cao. Bằng cách đo điện áp, chúng ta có thể biết được mức nước.

Sơ Đồ Đấu Nối

Về lý thuyết, chúng ta có thể cấp nguồn cho cảm biến nước bằng cách kết nối các chân VCCGND của cảm biến với các chân 3.3V và GND của ESP32.

Tuy nhiên, cách này không được khuyến nghị trong thực tế. Nếu chúng ta cấp nguồn liên tục cho cảm biến nước, cảm biến sẽ bị ăn mòn điện hóa nhanh hơn do môi trường ẩm ướt ⇒ Tốt hơn là chỉ cấp nguồn cho cảm biến khi đọc giá trị từ cảm biến. Để làm điều này, chúng ta có thể kết nối chân VCC của cảm biến với một chân digital của ESP32, và lập trình chân ESP32 ở mức HIGH trước khi đọc và LOW sau khi đọc.

  • Cách kết nối ESP32 và cảm biến nước sử dụng breadboard
ESP32 water 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 water sensor

Code ESP32 - Đọc Giá Trị Từ Cảm Biến Nước

/* * 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-water-sensor */ #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF Serial.print("The water sensor value: "); Serial.println(value); delay(1000); }

Các Bước Nhanh

  • 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.
  • Sao chép code trên và dán vào Arduino IDE.
  • Biên dịch và tải code lên bo ESP32 bằng cách nhấn nút Upload trên Arduino IDE
  • Từ từ nhúng cảm biến vào nước (một cốc nước).
  • Xem kết quả trên Serial Monitor. Nó sẽ trông như sau. Giá trị 0 khi cảm biến không chạm vào gì.
COM6
Send
The water sensor value: 0 The water sensor value: 0 The water sensor value: 0 The water sensor value: 25 The water sensor value: 196 The water sensor value: 587 The water sensor value: 625 The water sensor value: 1434 The water sensor value: 1449 The water sensor value: 1454 The water sensor value: 1469 The water sensor value: 2525 The water sensor value: 2526 The water sensor value: 2558
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Lưu ý:

Cảm biến nước không được thiết kế để nhúng hoàn toàn, chỉ các đường dẫn lộ ra trên PCB mới có thể nhúng vào nước. Vui lòng cẩn thận khi lắp đặt.

Cách Phát Hiện Rò Rỉ Nước

Để phát hiện rò rỉ nước, mưa, và tràn bể, chúng ta chỉ cần so sánh giá trị của cảm biến với một ngưỡng. Ngưỡng này được xác định trong phần hiệu chỉnh của hướng dẫn này.

Hãy làm cho ESP32 bật đèn LED nếu phát hiện rò rỉ nước.

Sơ Đồ Đấu Nối

ESP32 water sensor LED sơ đồ đấu dây

This image is created using Fritzing. Click to enlarge image

Code ESP32 - Phát Hiện Rò Rỉ Nước

/* * 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-water-sensor */ #define LED_PIN 21 // ESP32 pin GPIO21 connected to LED pin #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin #define THRESHOLD 1000 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(LED_PIN, OUTPUT); // configure pin as an OUTPUT pinMode(POWER_PIN, OUTPUT); // configure pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF digitalWrite(LED_PIN, LOW); // turn LED OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF if (value > THRESHOLD) { Serial.print("The water is detected"); digitalWrite(LED_PIN, HIGH); // turn LED ON } else { digitalWrite(LED_PIN, LOW); // turn LED OFF } }

Cách Đo Mức Nước

Code dưới đây chia mức nước thành 4 cấp độ.

/* * 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-water-sensor */ #define POWER_PIN 17 // ESP32 pin GPIO17 connected to sensor's VCC pin #define SIGNAL_PIN 36 // ESP32 pin GPIO36 (ADC0) connected to sensor's signal pin #define SENSOR_MIN 0 #define SENSOR_MAX 521 int value = 0; // variable to store the sensor value int level = 0; // variable to store the water level void setup() { Serial.begin(9600); // set the ADC attenuation to 11 dB (up to ~3.3V input) analogSetAttenuation(ADC_11db); pinMode(POWER_PIN, OUTPUT); // configure D7 pin as an OUTPUT digitalWrite(POWER_PIN, LOW); // turn the sensor OFF } void loop() { digitalWrite(POWER_PIN, HIGH); // turn the sensor ON delay(10); // wait 10 milliseconds value = analogRead(SIGNAL_PIN); // read the analog value from sensor digitalWrite(POWER_PIN, LOW); // turn the sensor OFF level = map(value, SENSOR_MIN, SENSOR_MAX, 0, 4); // 4 levels Serial.print("Water level: "); Serial.println(level); delay(1000); }

※ Lưu ý:

  • SENSOR_MIN và SENSOR_MAX được xác định bằng quá trình hiệu chỉnh.
  • Phương pháp ánh xạ trên không chính xác hoàn toàn. Tuy nhiên, nó chấp nhận được trong nhiều ứng dụng.

Hiệu Chỉnh Cảm Biến Mức Nước

Xem cách hiệu chỉnh cảm biến mức nước

※ 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 nước. ESP32 ADC 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, vui lòng lưu ý:

  • ESP32 ADC không hoàn toàn chính xác và có thể cần hiệu chỉnh để có kết quả đúng. Mỗi bo ESP32 có thể khác nhau một chút, vì vậy bạn cần hiệu chỉnh ADC cho từng bo riêng lẻ.
  • Hiệu chỉnh 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ư mong 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 chỉnh ESP32 ADC, 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.

Bình Luận