Bài viết
Cảm biến rò rỉ nước thông minh với ESP8266
💧
Rò rỉ nước dưới bồn rửa, sau máy giặt hay gần máy nước nóng thường không ai phát hiện ngay — đến khi thấy sàn nhà ướt hoặc trần nhà tầng dưới loang ố thì thiệt hại đã đáng kể. Một cảm biến rò rỉ nước nhỏ, giá vài chục nghìn đồng, kết hợp với ESP8266 có thể phát hiện giọt nước đầu tiên và gửi cảnh báo ngay lập tức tới điện thoại, kể cả khi không có ai ở nhà.
Nguyên lý hoạt động
- Cảm biến rò rỉ nước dạng hai đường mạch song song (giống cảm biến độ ẩm đất nhưng đặt nằm trên sàn) — khi khô, hai đường mạch cách điện hoàn toàn; khi có nước tiếp xúc, nước dẫn điện nhẹ tạo thành mạch kín, điện trở giảm mạnh.
- ESP8266 đọc tín hiệu digital hoặc analog từ cảm biến liên tục; khi giá trị vượt ngưỡng phát hiện nước, coi như có rò rỉ.
- Để tránh báo động giả do nhiễu tức thời, hệ thống yêu cầu tín hiệu nước phải ổn định qua vài lần đọc liên tiếp trước khi xác nhận cảnh báo thật.
- Khi xác nhận rò rỉ, ESP8266 gửi tin nhắn khẩn qua Telegram Bot API kèm vị trí lắp đặt (ví dụ “Rò rỉ nước: dưới bồn rửa bếp”), đồng thời có thể kích còi báo động cục bộ để người trong nhà nghe thấy ngay.
Linh kiện
- ESP8266 (NodeMCU hoặc Wemos D1 Mini, có WiFi tích hợp)
- Module cảm biến rò rỉ nước (dạng mạch hở hai đường dẫn điện, giá rẻ và dễ mua)
- Còi buzzer nhỏ (tùy chọn) để báo động tại chỗ
- Nguồn 5V (adapter USB nhỏ, đặt gần ổ điện tại vị trí lắp)
- Dây dẫn dài đủ để đặt cảm biến ở vị trí thấp nhất (sàn nhà, dưới ống nước) trong khi board đặt cao hơn tránh ẩm
Code mẫu
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <UniversalTelegramBot.h>
const char* WIFI_SSID = "ten-wifi";
const char* WIFI_PASS = "mat-khau-wifi";
const char* BOT_TOKEN = "TELEGRAM_BOT_TOKEN";
const char* CHAT_ID = "TELEGRAM_CHAT_ID";
const char* LOCATION_NAME = "Duoi bon rua bep";
const int SENSOR_PIN = A0;
const int BUZZER_PIN = D5;
const int WATER_THRESHOLD = 500; // hieu chinh theo cam bien thuc te, gia tri cang thap khi cang uot
WiFiClientSecure secureClient;
UniversalTelegramBot bot(BOT_TOKEN, secureClient);
bool leakActive = false;
int consecutiveWetReads = 0;
const int CONFIRM_READS = 3; // can 3 lan doc lien tiep de xac nhan, tranh bao gia
void setup() {
Serial.begin(115200);
pinMode(BUZZER_PIN, OUTPUT);
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) delay(500);
secureClient.setInsecure();
bot.sendMessage(CHAT_ID, "Cam bien ro ri nuoc tai " + String(LOCATION_NAME) + " da san sang.", "");
}
void loop() {
int reading = analogRead(SENSOR_PIN);
bool wetNow = reading < WATER_THRESHOLD;
if (wetNow) {
consecutiveWetReads++;
} else {
consecutiveWetReads = 0;
}
if (consecutiveWetReads >= CONFIRM_READS && !leakActive) {
leakActive = true;
digitalWrite(BUZZER_PIN, HIGH);
bot.sendMessage(CHAT_ID, "CANH BAO RO RI NUOC: " + String(LOCATION_NAME), "");
Serial.println("Da xac nhan ro ri, da gui canh bao!");
} else if (!wetNow && leakActive) {
leakActive = false;
digitalWrite(BUZZER_PIN, LOW);
bot.sendMessage(CHAT_ID, "Da het ro ri (hoac da lau kho): " + String(LOCATION_NAME), "");
}
delay(2000); // kiem tra moi 2 giay, du nhanh de phat hien som
}
Những lỗi thường gặp
- Đặt board ESP8266 quá thấp, gần sát sàn khiến chính board bị hỏng khi nước lan tới — chỉ đặt phần cảm biến ở vị trí thấp, còn board chính nên gắn cao hơn, cách xa nguồn nước có thể tràn tới.
- Không xác nhận qua nhiều lần đọc (
CONFIRM_READS) khiến hệ thống báo động giả vì hơi ẩm hoặc bụi bẩn tạm thời trên cảm biến — luôn yêu cầu tín hiệu ổn định qua vài lần đọc liên tiếp. - Cảm biến kim loại trần bị oxy hóa theo thời gian làm giảm độ nhạy dần — nên chọn cảm biến có lớp mạ chống oxy hóa hoặc kiểm tra định kỳ, đặc biệt ở vị trí ẩm thường xuyên.
- Chỉ có một cảm biến cho cả nhà bỏ sót các vị trí rò rỉ khác — với nhà có nhiều điểm nguy cơ (bếp, nhà tắm, máy giặt, máy nước nóng), nên lắp nhiều bộ độc lập, mỗi bộ có tên vị trí riêng trong tin nhắn cảnh báo.
Mở rộng
Tích hợp với van nước điện tử (solenoid valve) để tự động khóa nguồn nước tổng ngay khi phát hiện rò rỉ, kết hợp với dự án hộp thư thông minh ESP8266 nếu muốn tham khảo thêm cách gửi cảnh báo qua Telegram cho các cảm biến khác trong nhà, hoặc publish trạng thái qua MQTT để hiển thị chung trên dashboard Home Assistant.
Thẻ:#esp8266#sensors#safety
Bình luận