Giới thiệu dự án

Chất lượng nước là yếu tố sống còn không chỉ với sức khỏe con người mà còn với ngành nuôi trồng thủy hải sản — lĩnh vực đóng góp hơn 3,5% GDP Việt Nam theo số liệu Tổng cục Thống kê 2022. Tuy nhiên, phần lớn các hồ nuôi, sông suối tại vùng nông thôn và vùng hẻo lánh hiện vẫn thiếu hệ thống giám sát liên tục, khiến người nuôi trồng phải phụ thuộc vào kiểm định thủ công tốn kém và chậm trễ.

Đồ án "Nghiên cứu, Xây dựng Hệ thống Giám sát Chất lượng Nước Ứng dụng IoT" — thực hiện bởi sinh viên Lê Hùng Việt, ngành Kỹ thuật Robot, Trường Đại học Công nghệ – ĐHQGHN, dưới sự hướng dẫn của ThS. Phạm Đình Tuân — ra đời nhằm giải quyết chính xác khoảng trống đó. Sau 15 tuần nghiên cứu và triển khai, hệ thống cung cấp khả năng giám sát thời gian thực qua Internet, điều khiển từ xa qua dashboard, và lưu trữ dữ liệu tự động, với độ trễ truyền – nhận dưới 1 giây.

Mục tiêu cụ thể của đồ án:

  1. Thu thập dữ liệu đa chỉ số (nhiệt độ, độ pH, độ đục, mực nước) liên tục và tự động.
  2. Truyền dữ liệu qua giao thức MQTT (Message Queuing Telemetry Transport) lên server Node-RED.
  3. Hiển thị biểu đồ thời gian thực trên dashboard web, cho phép truy cập qua trình duyệt bất kỳ.
  4. Cho phép điều khiển từ xa: bật/tắt cảm biến, thay đổi chu kỳ cập nhật.
  5. Xuất dữ liệu định dạng CSV theo ngày để phân tích ngoại tuyến.

Phân tích và Thiết kế Giải pháp

Phân tích Hiện trạng

So sánh các giải pháp hiện có:

Tiêu chí Kiểm định thủ công Hệ thống thương mại (Xylem, Hach) Hệ thống IoT đề xuất
Chi phí triển khai Thấp (nhân công) Rất cao (>$5,000) Thấp (~$50–80 USD)
Giám sát liên tục
Truy cập từ xa ✓ (phần mềm độc quyền) ✓ (web browser)
Tùy biến mở rộng Hạn chế Cao
Độ trễ cập nhật Hàng ngày <10 giây <1 giây
Xuất CSV tự động Giới hạn

Phân tích yêu cầu theo MoSCoW:

  • Must have: Thu thập đa cảm biến, truyền MQTT, dashboard thời gian thực, điều khiển từ xa.
  • Should have: Xuất CSV theo ngày, giao diện biểu đồ tùy chỉnh CSS.
  • Could have: Cảnh báo ngưỡng tự động, tích hợp nhiều client.
  • Won't have (giai đoạn này): Cảm biến oxy hòa tan, học máy dự đoán xu hướng.

Thiết kế Hệ thống

Kiến trúc tổng thể theo mô hình IoT 3 lớp:

[Lớp Perception]          [Lớp Network]         [Lớp Application]
ESP32 + Sensors  ──WiFi──▶  MQTT Broker    ──▶   Node-RED Dashboard
  - DS18B20                (Mosquitto on           (Node.js runtime)
  - pH Sensor              Raspberry Pi 3B+)       - Chart visualization
  - TS300B Turbidity                               - CSV export
  - Water Level                                    - Remote control
  - ADS1115 ADC

Technology Stack:

Thành phần Phiên bản / Model Vai trò
Vi điều khiển ESP32 DevKit V1 Thu thập và gửi dữ liệu
Máy tính nhúng Raspberry Pi 3B+ Gateway + Server
MQTT Broker Mosquitto (mã nguồn mở) Trung gian truyền thông điệp
Flow runtime Node-RED (Node.js) Logic server + Dashboard
IDE lập trình PlatformIO Phát triển firmware C++
Ngôn ngữ C++ (Arduino framework) Firmware ESP32
ADC mở rộng ADS1115 (16-bit, 4 kênh) Đọc cảm biến analog
Giao thức cảm biến nhiệt One-Wire (DS18B20) Đo nhiệt độ chất lỏng
Vỏ bảo vệ Nhựa ABS, in 3D (SolidWorks) Đóng gói phần cứng
DDNS NoIP Ánh xạ IP động → tên miền cố định

Cổng mạng được cấu hình (Port Forwarding):

  • 1883 — Giao thức MQTT
  • 1880 — Giao diện Node-RED
  • 2244 — SSH điều khiển Raspberry Pi

Methodology

Đồ án áp dụng phương pháp phát triển kết hợp tham khảo tài liệu → quan sát → thực nghiệm lặp, tương đương mô hình Agile nhỏ gọn với các mốc sau:

Tuần Milestone
1–3 Nghiên cứu IoT, chọn linh kiện, thiết kế kiến trúc
4–6 Lắp ráp phần cứng, thiết kế vỏ 3D SolidWorks
7–9 Lập trình firmware ESP32, tích hợp cảm biến
10–12 Cài đặt Node-RED, MQTT, DDNS, Port Forwarding
13–14 Xây dựng dashboard, tính năng xuất CSV
15 Kiểm thử toàn hệ thống, đánh giá, viết báo cáo

Implementation và Kết quả

Development Process

Firmware ESP32 (C++/Arduino trên PlatformIO) hoạt động theo luồng chính:

// Luồng chính - vòng lặp ESP32
void loop() {
    client.loop();  // Lắng nghe lệnh từ MQTT broker (Callback)

    if (millis() - lastUpdate >= TimetoUpdate) {
        // Đọc dữ liệu qua I2C (ADS1115) và OneWire (DS18B20)
        float pH    = readPH(ads.readADC_SingleEnded(0));
        float turb  = readTurbidity(ads.readADC_SingleEnded(1));
        float level = readLevel(ads.readADC_SingleEnded(2));
        float temp  = readTemperature();  // OneWire DS18B20

        // Đóng gói JSON và Publish lên MQTT broker
        String payload = "{\"pH\":" + String(pH) +
                         ",\"turbidity\":" + String(turb) +
                         ",\"level\":" + String(level) +
                         ",\"temperature\":" + String(temp) + "}";
        client.publish("waterquality/data", payload.c_str());
        lastUpdate = millis();
    }
}

Hàm Callback xử lý lệnh từ server (bật/tắt cảm biến, thay đổi TimetoUpdate), cho phép điều chỉnh hành vi hệ thống mà không cần nạp lại firmware — đây là điểm linh hoạt then chốt của thiết kế.

Node-RED server thực hiện subscribe topic MQTT, parse JSON bằng hàm Node.js, phân phối dữ liệu tới từng khối biểu đồ và khối ghi file CSV:

// Hàm Node.js trong Node-RED: parse JSON từ MQTT
var data = JSON.parse(msg.payload);
msg.pH    = data.pH;
msg.turb  = data.turbidity;
msg.level = data.level;
msg.temp  = data.temperature;
return msg;

File CSV được đặt tên theo cấu trúc DD-MM-YYYY.csv và tự động khởi tạo mỗi ngày mới với header: Timestamp, pH, Turbidity(NTU), WaterLevel, Temperature(°C).

Testing và Validation

Kết quả kiểm thử:

Hạng mục kiểm thử Chỉ tiêu Kết quả thực tế
Độ trễ truyền – nhận (ESP32 → Dashboard) < 2 giây < 1 giây
Tính toàn vẹn dữ liệu trên server 100% 100%
Hoạt động liên tục không lỗi 15 tuần Ổn định
Điều khiển bật/tắt cảm biến từ dashboard Hoạt động Hoạt động
Xuất file CSV đúng cấu trúc Đúng Đúng
Khởi động tự động sau mất điện (Node-RED + Mosquitto) Tự động Tự động

Nhược điểm ghi nhận: Thẩm mỹ mạch PCB hàn tay chưa cao; thông số kết nối WiFi/Server chưa thể chỉnh sửa qua giao diện mà phải sửa trực tiếp trong firmware.


Đổi mới và Đóng góp

Hệ thống này mang lại ba điểm khác biệt so với các nghiên cứu tương đồng:

1. Chi phí triển khai cực thấp: Tổng chi phí phần cứng ước tính 50–80 USD, thấp hơn ít nhất 60 lần so với hệ thống thương mại như Hach HQ series (>$3,000). Nghiên cứu của Pule et al. (Journal of Applied Research and Technology, 2017) xác nhận rào cản chi phí là hạn chế chính của WSN (Wireless Sensor Network) tại các nước đang phát triển — đồ án này trực tiếp phá vỡ rào cản đó.

2. Kiến trúc mở và dễ mở rộng: Không giống hệ thống thương mại với phần mềm đóng, toàn bộ stack (Mosquitto + Node-RED) là mã nguồn mở, cho phép thêm client, thêm loại cảm biến hoặc tích hợp hệ thống xử lý nước tự động mà không phát sinh phí bản quyền.

3. Tích hợp đầy đủ vòng đời dữ liệu: Từ thu thập (ESP32 + ADS1115 16-bit) → truyền tải (MQTT qua WiFi) → hiển thị thời gian thực (Node-RED Dashboard với tùy chỉnh CSS) → lưu trữ dài hạn (CSV tự động theo ngày) → truy xuất từ xa (download qua HTTP) — tất cả trong một hệ thống tích hợp duy nhất, trong khi nghiên cứu của Lê Ngọc Trân (Journal of Science and Technology, 2021) chủ yếu tập trung vào phần thu thập và truyền tải.


Ứng dụng Thực tế và Triển khai

Các kịch bản sử dụng thực tế:

  • Nuôi trồng thủy sản: Giám sát liên tục pH (tối ưu 7.5–8.5 cho tôm), nhiệt độ và độ đục ao nuôi, giảm tỷ lệ chết do biến động chất lượng nước không được phát hiện kịp thời.
  • Trạm quan trắc sông, hồ: Lắp đặt tại điểm xả thải để phát hiện ô nhiễm theo thời gian thực, hỗ trợ cơ quan quản lý môi trường.
  • Hệ thống cấp nước nông thôn: Theo dõi chất lượng nước đầu ra bể lọc, cảnh báo sớm khi vượt ngưỡng cho phép.

Yêu cầu triển khai:

Phần cứng:  ESP32 DevKit V1 + ADS1115 + DS18B20 + Cảm biến pH/Turbidity/Mực nước
Server:     Raspberry Pi 3B+ (Raspberry OS) + Kết nối Internet
Phần mềm:  Node-RED, Mosquitto (cài đặt qua apt/npm)
Mạng:       Port Forwarding (1883, 1880) + DDNS (NoIP hoặc tương đương)
Điện:       Nguồn 5V DC cho Raspberry Pi, 3.3V/5V cho ESP32

Phân tích khả năng mở rộng:

  • Một Raspberry Pi 3B+ có thể xử lý đồng thời 10–20 client ESP32 kết nối MQTT mà không cần nâng cấp phần cứng (dựa trên giới hạn kết nối Mosquitto mặc định là 1024).
  • Thêm cảm biến mới chỉ cần bổ sung kênh đọc ADS1115 và cập nhật payload JSON — không thay đổi kiến trúc tổng thể.

Ước tính ROI: So với thuê dịch vụ kiểm định nước định kỳ (200,000–500,000 VND/lần × 30 lần/tháng ≈ 6–15 triệu VND/tháng), hệ thống IoT này thu hồi vốn sau 1–2 tháng đầu tiên đối với ao nuôi quy mô vừa.


Hạn chế và Hướng Phát triển

Hạn chế kỹ thuật hiện tại:

  • Thông số kết nối (WiFi SSID, địa chỉ MQTT broker) được hardcode trong firmware; thay đổi cần nạp lại chương trình.
  • Chưa có cơ chế cảnh báo tự động (email, SMS, Telegram) khi vượt ngưỡng.
  • Bảng mạch PCB hàn tay, chưa đạt tiêu chuẩn sản xuất công nghiệp.
  • Chưa có mã hóa kết nối MQTT (chưa dùng TLS/SSL), tiềm ẩn rủi ro bảo mật khi triển khai công khai.

Hướng phát triển đề xuất:

  • Ngắn hạn: Tích hợp WiFi Provisioning (SmartConfig/BLE) để cấu hình kết nối qua app di động; thêm cảnh báo qua Telegram Bot API.
  • Trung hạn: Bổ sung cảm biến oxy hòa tan (DO), cảm biến ion; thiết kế PCB chuyên dụng thay thế mạch hàn tay; triển khai MQTT over TLS.
  • Dài hạn: Tích hợp mô hình học máy (LSTM) dự đoán xu hướng chất lượng nước; liên kết với hệ thống xử lý nước tự động (bơm sục khí, châm hóa chất) dựa trên dữ liệu quan trắc.

Đối Tượng Hưởng Lợi

  • Sinh viên kỹ thuật điện tử/IoT: Đồ án cung cấp blueprint hoàn chỉnh từ phần cứng đến phần mềm — lý tưởng để học tích hợp ESP32, MQTT, Node-RED và thiết kế vỏ 3D trong một dự án thực tế.
  • Kỹ sư và nhà phát triển IoT: Code firmware C++ (PlatformIO), flow Node-RED và cấu hình Mosquitto có thể tái sử dụng trực tiếp cho các bài toán giám sát môi trường khác.
  • Hộ nuôi trồng thủy sản vừa và nhỏ: Giải pháp chi phí thấp (~1.5–2 triệu VND/bộ) thay thế kiểm định thủ công, giảm rủi ro thiệt hại do biến động chất lượng nước.
  • Cơ quan quản lý môi trường: Nền tảng mở rộng thành mạng quan trắc phân tán với nhiều điểm đo, dữ liệu lưu trữ tập trung trên server.
  • Nhà nghiên cứu: Methodology tích hợp đa giao thức (I2C, One-Wire, MQTT, WiFi, HTTP) và kiến trúc 3 lớp IoT cung cấp case study thực nghiệm có thể tham chiếu trong các công bố về WSN và smart aquaculture.

Câu Hỏi Thường Gặp

1. Yêu cầu kỹ thuật để triển khai hệ thống này là gì? Cần ESP32 DevKit V1, Raspberry Pi 3B+ với Raspberry OS, kết nối Internet băng thông tối thiểu 1 Mbps, và nguồn điện 5V ổn định. Phần mềm hoàn toàn miễn phí (Node-RED, Mosquitto, PlatformIO Community Edition).

2. Hệ thống hỗ trợ tối đa bao nhiêu điểm đo đồng thời? Với cấu hình Mosquitto mặc định trên Raspberry Pi 3B+, có thể hỗ trợ 10–20 client ESP32 đồng thời. Nâng lên server Linux mạnh hơn cho phép mở rộng tới hàng trăm client.

3. Tích hợp với hệ thống SCADA hoặc nền tảng IoT cloud có được không? Có. MQTT là giao thức chuẩn công nghiệp; dữ liệu có thể forward tới AWS IoT Core, ThingsBoard hoặc bất kỳ platform hỗ trợ MQTT broker bằng cách thêm một MQTT out node trong Node-RED.

4. Chi phí bảo trì hàng năm là bao nhiêu? Chi phí chủ yếu là thay thế điện cực cảm biến pH (~200,000 VND/6 tháng) và dịch vụ DDNS (miễn phí với NoIP). Không có phí phần mềm.

5. Dữ liệu lịch sử được lưu trữ trong bao lâu? Dữ liệu CSV được ghi theo ngày lên storage của Raspberry Pi. Với thẻ microSD 32GB và chu kỳ cập nhật 3 giây, ước tính lưu trữ được hơn 5 năm dữ liệu liên tục.


Kết Luận

Sau 15 tuần nghiên cứu và phát triển, đồ án đã triển khai thành công một hệ thống giám sát chất lượng nước IoT hoàn chỉnh, đáp ứng toàn bộ mục tiêu ban đầu: giám sát thời gian thực với độ trễ dưới 1 giây, điều khiển từ xa qua dashboard web, và lưu trữ dữ liệu tự động theo ngày.

Về mặt kỹ thuật, đồ án chứng minh khả năng tích hợp hiệu quả giữa vi điều khiển ESP32, giao thức MQTT/Mosquitto, nền tảng Node-RED và các cảm biến đa giao thức (I2C qua ADS1115, One-Wire cho DS18B20) trong một kiến trúc IoT 3 lớp gọn nhẹ, chi phí thấp. Về mặt thực tiễn, hệ thống mở ra con đường ứng dụng IoT cho nuôi trồng thủy sản và quản lý tài nguyên nước tại Việt Nam với mức đầu tư chỉ từ 1.5–2 triệu đồng — phù hợp quy mô hộ sản xuất nhỏ lẻ.

Các nhà phát triển muốn xây dựng trên nền tảng này có thể bắt đầu từ việc thiết lập Mosquitto và Node-RED trên Raspberry Pi, sau đó flash firmware PlatformIO lên ESP32 và cấu hình Port Forwarding + DDNS. Đây là điểm khởi đầu lý tưởng cho bất kỳ dự án IoT giám sát môi trường nào cần chi phí thấp, mã nguồn mở và khả năng mở rộng linh hoạt.