Arduino Cảm biến nước

Cảm biến nước hoặc cảm biến mức nước được sử dụng để phát hiện rò rỉ nước, mưa, tràn bình hoặc để đo mức nước. Trong bài hướng dẫn này, chúng ta sẽ học:

Phần cứng cần chuẩn bị

1×Arduino Uno R3
1×USB 2.0 cable type A/B (for USB-A PC)
1×USB 2.0 cable type C/B (for USB-C PC)
1×Water level sensor
1×dây jumper
1×(Khuyến nghị) Screw Terminal Block Shield for Arduino Uno
1×(Khuyến nghị) Breadboard Shield for Arduino Uno
1×(Khuyến nghị) Enclosure for Arduino Uno
1×(Khuyến nghị) Prototyping Base Plate & Breadboard Kit for Arduino UNO

Or you can buy the following kits:

1×DIYables STEM V3 Starter Kit (Arduino included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)

Về Cảm Biến Mực Nước

Bố trí chân cảm biến mức nước

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

  • S (Signal) pin: là một đầu ra analog sẽ được kết nối với một trong các đầu vào analog trên Arduino của bạn.
  • + (VCC) pin: cấp nguồn cho cảm biến. Nên cấp nguồn cho cảm biến ở mức từ 3.3V đến 5V.
  • - (GND) pin: là một kết nối đất.
sơ đồ chân cảm biến nước

※ Lưu ý:

Giá trị đầu ra tương tự trên chân tín hiệu phụ thuộc vào điện áp cấp cho chân VCC của cảm biến.

Cách hoạt động của cảm biến mức nước

Đơn giản thôi, càng nhiều nước mà cảm biến được nhúng vào, thì điện áp đầu ra ở chân tín hiệu càng cao.

Hãy xem xét sâu hơn.

Phần này chứa thông tin nâng cao có thể gây quá tải. Nếu bạn chưa chắc về nội dung, hãy bỏ qua và chuyển sang phần tiếp theo.

Cảm biến có một chuỗi mười đường dẫn đồng hở. Năm đường dẫn là nguồn và năm đường dẫn là đường cảm biến. Những đường dẫn này được đan xen song song sao cho có một đường dẫn cảm biến ở giữa mỗi hai đường dẫn nguồn. Những đường dẫn này sẽ không được nối với nhau trừ khi nước làm cầu nối giữa chúng khi bị ngập.

Các đường dẫn trên bảng mạch hoạt động như một biến trở, và điện trở của chúng thay đổi theo mức nước.

  • Sự thay đổi điện trở tương ứng với khoảng cách từ đỉnh cảm biến tới mặt nước.
  • Điện trở tỷ lệ nghịch với chiều cao của nước:
  • Càng nhiều nước được cảm biến ngâm vào, độ dẫn điện càng tốt, điện trở càng thấp.
  • Càng ít nước được cảm biến ngâm vào, độ dẫn điện càng kém, điện trở càng cao.
  • Cảm biến tạo ra điện áp đầu ra dựa trên điện trở.

Bằng cách đo điện áp, chúng ta có thể xác định mực nước.

Sơ đồ đấu dây

Trong lý thuyết, để cấp nguồn cho cảm biến, chúng ta có thể kết nối các chân VCCGND của cảm biến với các chân 5V và GND của Arduino lần lượt.

Trong thực tế, tuy nhiên, cách đó không được khuyến nghị. Vì trong môi trường ẩm ướt, nếu chúng ta cấp nguồn cho cảm biến liên tục, cảm biến sẽ bị ăn mòn điện hóa nhanh hơn. Điều này làm ngắn tuổi thọ của cảm biến. Để khắc phục vấn đề này, chúng tôi khuyên bạn không cấp nguồn cho cảm biến liên tục, mà chỉ cấp nguồn cho cảm biến khi đọc giá trị của nó. Điều này có thể được thực hiện bằng cách kết nối chân VCC của cảm biến với một chân kỹ thuật số của Arduino, và đặt chân của Arduino ở mức HIGH trước khi đọc và ở mức LOW sau khi đọc, tương ứng.

sơ đồ đấu nối cảm biến nước Arduino

This image is created using Fritzing. Click to enlarge image

Mã Arduino - Đọc Giá Trị Từ Cảm Biến Nước

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino 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/arduino/arduino-water-sensor */ #define POWER_PIN 7 #define SIGNAL_PIN A5 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); 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 Serial.print("Sensor value: "); Serial.println(value); delay(1000); }

Hướng dẫn từng bước

  • Sao chép mã ở trên và mở bằng Arduino IDE
  • Nhấp vào nút Upload trên Arduino IDE để tải mã lên Arduino
  • Nhúng cảm biến từ từ vào nước (một ly nước).
  • Xem kết quả trên Trình theo dõi nối tiếp. Giá trị bằng 0 khi cảm biến không chạm vào bất kỳ vật gì.
COM6
Send
Sensor value: 0 Sensor value: 0 Sensor value: 0 Sensor value: 25 Sensor value: 97 Sensor value: 284 Sensor value: 428 Sensor value: 435 Sensor value: 441 Sensor value: 455 Sensor value: 467 Sensor value: 521 Sensor value: 528 Sensor value: 553
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

※ Lưu ý:

Cảm biến không được thiết kế để ngập hoàn toàn trong nước, chỉ các đường mạch lộ ra trên PCB mới có thể tiếp xúc với nước. Xin hãy lắp đặt nó một cách cẩn thận.

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

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

Hãy lấy một ví dụ cụ thể. Arduino bật một đèn LED khi nước được phát hiện.

Sơ đồ đấu dây

sơ đồ nối dây LED cho cảm biến nước Arduino

This image is created using Fritzing. Click to enlarge image

Mã Arduino - Phát hiện rò rỉ nước

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino 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/arduino/arduino-water-sensor */ #define LED_PIN 2 #define POWER_PIN 7 #define SIGNAL_PIN A5 #define THRESHOLD 300 int value = 0; // variable to store the sensor value void setup() { Serial.begin(9600); pinMode(LED_PIN, OUTPUT); // configure D2 pin as an OUTPUT pinMode(POWER_PIN, OUTPUT); // configure D7 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

Nếu bạn muốn chia độ cao tối đa của nước thành một số cấp độ và đo mức hiện tại, bạn có thể sử dụng phương pháp trong đoạn mã dưới đây. Lưu ý rằng độ cao tối đa của nước bằng với chiều cao của cảm biến. Đoạn mã dưới đây chia độ cao tối đa thành 4 cấp độ.

/* * Mã Arduino này được phát triển bởi newbiely.vn * Mã Arduino 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/arduino/arduino-water-sensor */ #define POWER_PIN 7 #define SIGNAL_PIN A5 #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); 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ởi quá trình hiệu chuẩn.
  • Phương pháp ánh xạ ở trên không chính xác. Tuy nhiên, nó được chấp nhận trong nhiều ứng dụng. Nếu bạn muốn làm cho nó chính xác, bạn có thể đo các giá trị ngưỡng cho từng mức. Xem phần hiệu chuẩn.

Hiệu chuẩn cảm biến mực nước

Giá trị đầu ra của cảm biến phụ thuộc không chỉ vào mức nước mà còn vào độ dẫn điện của nước. Nước tinh khiết không dẫn điện. Nước chứa khoáng chất và tạp chất dẫn điện. Nước càng dẫn điện, cảm biến càng nhạy. Mặt khác, giá trị đầu ra cũng thay đổi tùy thuộc vào điện áp được cấp cho chân VCC của cảm biến.

Để có được kết quả đo chính xác từ cảm biến nước, chúng tôi khuyến nghị bạn hiệu chuẩn cảm biến cho loại nước cụ thể mà bạn dự định giám sát.

Trước khi xác định ngưỡng kích hoạt một hành động, bạn nên đo giá trị thực tế mà cảm biến đọc được bằng cách thực hiện một bài kiểm tra.

Cách làm bài kiểm tra:

  • Sử dụng bản phác thảo ở trên để đọc giá trị cảm biến.
  • Nhúng cảm biến vào nước ở mức bạn muốn làm ngưỡng.
  • Ghi lại giá trị mà cảm biến xuất ra trên Serial Monitor.
  • Sử dụng giá trị đó làm ngưỡng để bạn kích hoạt một hành động.

Bài kiểm tra này có thể cần một vài lần thử và sai.

Bài kiểm tra cũng có thể được sử dụng để tìm:

  • Giá trị SENSOR_MIN, khi cảm biến không được nhúng trong nước
  • Giá trị SENSOR_MAX, khi cảm biến được nhúng hoàn toàn trong nước
  • Một ngưỡng để phát hiện rò rỉ nước
  • Các ngưỡng cho từng mức trên thang đo cấp độ của bạn

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.

Thử thách bản thân

  • Gửi email khi phát hiện rò rỉ nước
  • Gửi tin nhắn SMS khi phát hiện rò rỉ nước
  • Phát ra âm thanh báo động khi phát hiện rò rỉ nước