Giới thiệu dự án

Trong kỷ nguyên Công nghiệp 4.0 và chuyển đổi số hạ tầng, việc tự động hóa giám sát tài nguyên nước là yêu cầu cấp thiết. Theo các khảo sát ngành cấp thoát nước, tỷ lệ thất thoát nước sạch do rò rỉ và quản lý không tối ưu tại các hệ thống đường ống đô thị lẫn nông nghiệp thường dao động từ 15% đến 25%. Phương pháp giám sát truyền thống dựa vào đồng hồ cơ khí và đọc số thủ công bộc lộ nhiều điểm nghẽn nghiêm trọng: độ trễ thông tin cao, nguy cơ sai số tích lũy do mài mòn cơ khí, và hoàn toàn thiếu khả năng tích hợp cảnh báo tức thời.

Đề tài “Nghiên cứu đo thể tích và lưu lượng nước hiển thị lên màn hình LCD sử dụng cảm biến và Arduino Uno R3” do nhóm nghiên cứu Khoa Điện tử - Viễn thông, Học viện Kỹ thuật Mật Mã thực hiện (dưới sự hướng dẫn của TS. Bùi Đức Trình) nhằm giải quyết trực tiếp bài toán đo lường và hiển thị thông số dòng chảy/thể tích nước theo thời gian thực (Real-time).

+-------------------------------------------------------------------------------+
|                             MỤC TIÊU CỐT LÕI                                  |
+-------------------------------------------------------------------------------+
| 1. Thiết kế phần cứng nhúng tích hợp vi điều khiển ATmega328P.                |
| 2. Xây dựng thuật toán xử lý tín hiệu xung ngắt dòng chảy từ cảm biến Hall.   |
| 3. Xây dựng thuật toán đo thời gian bay (ToF) của sóng siêu âm đo mức nước.   |
| 4. Lập trình giao tiếp trực tiếp bộ điều khiển HD44780 của LCD 1602 & Keypad. |
| 5. Tính toán động thể tích theo các mô hình hình học: hộp chữ nhật, trụ, cầu. |
+-------------------------------------------------------------------------------+

Giải pháp sử dụng nền tảng vi điều khiển mở giúp tối ưu hóa chi phí sản xuất phần cứng xuống mức tối thiểu nhưng vẫn đảm bảo độ chính xác đo đạc đạt trên 96%, mở ra tiềm năng ứng dụng rộng rãi từ hộ gia đình đến các hệ thống tưới tiêu nông nghiệp và chiết rót công nghiệp quy mô vừa và nhỏ.


Phân tích và thiết kế giải pháp

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

Trước khi xây dựng hệ thống, nhóm nghiên cứu đã tiến hành đánh giá so sánh các giải pháp đo lường chất lỏng hiện có trên thị trường:

Tiêu chí so sánh Đồng hồ đo cơ khí dạng cánh gạt Cảm biến lưu lượng điện từ công nghiệp Hệ thống nhúng Arduino + Cảm biến Hall & HC-SR04
Chi phí đầu tư Thấp (150.000 - 300.000 VNĐ) Rất cao (5.000.000 - 20.000.000 VNĐ) Thấp - Tối ưu (~300.000 - 500.000 VNĐ)
Độ chính xác Trung bình ($\pm 5% - 10%$) Cực cao ($\pm 0.5%$) Tốt ($\pm 2% - 3.5%$)
Giám sát thời gian thực Không hỗ trợ (đọc thủ công) Có (hỗ trợ Modbus, 4-20mA) Có (Hiển thị LCD/Serial tức thời)
Đo đồng thời thể tích bồn Không Cần module đo siêu âm đắt tiền riêng Tích hợp sẵn qua module HC-SR04
Khả năng tùy biến Không thể tùy biến Cấu hình phức tạp theo chuẩn hãng Linh hoạt lập trình cấu hình hình học qua Keypad

Ma trận yêu cầu người dùng (MoSCoW)

  • Must have (Bắt buộc): Đo lưu lượng nước tức thời (L/min), tính tổng lưu lượng tích lũy, đo khoảng cách mức nước bằng cảm biến siêu âm, hiển thị kết quả lên màn hình LCD 1602.
  • Should have (Nên có): Giao diện chuyển đổi chế độ đo và nhập tham số hình học bồn chứa (hộp chữ nhật, hình cầu, hình trụ) qua bàn phím ma trận 4x4.
  • Could have (Có thể mở rộng): Cơ chế cảnh báo mực nước cạn/tràn qua còi Buzzer hoặc đèn LED cảnh báo.
  • Won't have (Chưa thực hiện trong giai đoạn này): Truyền dữ liệu không dây tầm xa (LoRa, NB-IoT) lên Web Dashboard.

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình nhúng module hóa, kết nối chặt chẽ giữa khối thu thập dữ liệu (Sensors), khối xử lý trung tâm (MCU), khối nhập liệu (Keypad) và khối hiển thị (Display).

flowchart TD
    subgraph Power_Supply["Khối Nguồn"]
        PWR["Nguồn Adapter 9V DC / Cáp USB 5V"]
    end

    subgraph Input_Block["Khối Cảm Biến & Nhập Liệu"]
        US["Cảm biến siêu âm HC-SR04 (Trig/Echo)"]
        FS["Cảm biến lưu lượng Hall Sensor (Turbine Rotor)"]
        KP["Bàn phím ma trận màng 4x4 (Keypad)"]
    end

    subgraph Processing_Block["Khối Xử Lý Trung Tâm"]
        ARD["Arduino Uno R3 (Vi điều khiển ATmega328P @ 16MHz)"]
    end

    subgraph Output_Block["Khối Hiển Thị"]
        LCD["Màn hình LCD 1602 (Driver HD44780 - Chế độ 4-bit)"]
    end

    PWR --> ARD
    US -->|Xung Echo Digital| ARD
    FS -->|Xung ngắt External Interrupt INT0| ARD
    KP -->|Quét ma trận hàng/cột| ARD
    ARD -->|Bus dữ liệu DB4-DB7 + RS, E| LCD

Thông số kỹ thuật chi tiết của các linh kiện chính

  1. Bộ vi điều khiển Arduino Uno R3:

    • Chip xử lý: Microchip ATmega328P, tốc độ xung nhịp thạch anh 16 MHz.
    • Bộ nhớ: 32 KB Flash ROM (0.5 KB dành cho Bootloader), 2 KB SRAM, 1 KB EEPROM.
    • Điện áp hoạt động: 5V DC; dòng định mức $20\text{ mA}$ mỗi chân I/O.
    • 14 chân Digital I/O (hỗ trợ ngắt ngoài tại chân D2/D3), 6 kênh Analog ADC 10-bit.
  2. Cảm biến siêu âm HC-SR04:

    • Tần số phát sóng siêu âm: 40 kHz.
    • Khoảng cách đo lường: $2\text{ cm} - 450\text{ cm}$, góc quét tối đa $15^\circ$.
    • Độ chính xác lý thuyết: $3\text{ mm}$.
  3. Cảm biến lưu lượng nước hiệu ứng Hall (Flow Sensor):

    • Cấu tạo: Van dòng chảy tích hợp cánh quạt Turbine gắn nam châm vĩnh cửu và cảm biến từ Hall.
    • Nguyên lý: Khi chất lỏng chảy qua làm quay Rotor, từ trường biến thiên kích hoạt cảm biến Hall tạo chuỗi xung vuông kỹ thuật số.
    • Tần số xung đầu ra tỷ lệ thuận với vận tốc dòng chảy. Chu kỳ hoạt động (Duty Cycle): $$\text{Duty Cycle} = \frac{T_{\text{on}}}{T_{\text{on}} + T_{\text{off}}}$$
  4. Màn hình LCD 1602 (IC điều khiển HD44780):

    • Cấu trúc hiển thị: 2 dòng $\times$ 16 ký tự.
    • Bộ nhớ: DDRAM (Display Data RAM) 80 byte chứa mã ký tự hiển thị; CGROM (Character Generator ROM) chứa 240 mẫu ký tự; CGRAM chứa 8 mẫu ký tự người dùng định nghĩa.
    • Thanh ghi: IR (Instruction Register) để nhận mã lệnh điều khiển và DR (Data Register) để lưu trữ byte dữ liệu đọc/ghi.

Phương pháp nghiên cứu và triển khai (Methodology)

Dự án áp dụng mô hình phát triển nhúng mẫu nhanh (Prototyping Model) kết hợp kiểm thử vòng kín (Closed-loop Testing):

  • Giai đoạn 1 (Tuần 1 - 2): Khảo sát datasheet, tính toán phân bổ chân GPIO trên ATmega328P, thiết kế sơ đồ nguyên lý phần cứng.
  • Giai đoạn 2 (Tuần 3 - 4): Xây dựng driver đọc xung ngắt cảm biến lưu lượng, driver điều khiển HD44780 ở chế độ 4-bit tiết kiệm chân, lập trình quét ma trận Keypad 4x4.
  • Giai đoạn 3 (Tuần 5 - 6): Lập trình thuật toán đo thời gian bay (ToF) và tích hợp các hàm tính toán hình học không gian.
  • Giai đoạn 4 (Tuần 7): Hiệu chuẩn hệ số xung cảm biến Hall ($K\text{-factor}$) và kiểm chuẩn độ chính xác với mẫu đo chuẩn.

Implementation và kết quả

Quy trình phát triển phần mềm và Thuật toán cốt lõi

1. Thuật toán đo khoảng cách và tính thể tích

Nguyên lý đo mức chất lỏng bằng sóng siêu âm dựa trên thời gian truyền và phản xạ sóng:

$$d = \frac{t \times v}{2} = \frac{t \times 340,\text{m/s}}{2}$$

Trong đó: $d$ là khoảng cách từ đầu phát cảm biến tới mặt thoáng chất lỏng, $t$ là tổng thời gian từ lúc phát xung siêu âm $40\text{ kHz}$ đến khi nhận lại tín hiệu Echo, $v = 340\text{ m/s}$ là vận tốc âm thanh trong không khí ở $20^\circ\text{C}$.

Từ khoảng cách $d$ và chiều cao tổng thể của bồn chứa $H$, độ cao mức nước thực tế là $h = H - d$. Thuật toán tính thể tích $V$ được lập trình tùy biến theo hình dạng hình học do người dùng chọn từ bàn phím:

[Chọn hình dạng trên Keypad]

2. Kỹ thuật đếm xung ngắt đo lưu lượng dòng chảy

Để tránh việc làm nghẽn chu trình xử lý chính (CPU blocking) và đảm bảo không bỏ sót xung tín hiệu tần số cao từ cảm biến Hall, hệ thống sử dụng ngắt ngoài phần cứng (External Interrupt) gắn vào chân Digital Pin 2 (INT0).

#include <LiquidCrystal.h>
#include <Keypad.h>

// Cấu hình chân LCD1602 chế độ 4-bit
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 6;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Định nghĩa chân cảm biến
const int FLOW_SENSOR_PIN = 2; // Chân ngắt ngoài INT0
const int TRIG_PIN = 7;
const int ECHO_PIN = 8;

volatile unsigned long pulseCount = 0;
float flowRate = 0.0;
unsigned int flowMilliLitres = 0;
unsigned long totalMilliLitres = 0;
unsigned long oldTime = 0;

// Trình phục vụ ngắt ngoài (ISR) đếm xung Hall
void IRAM_ATTR pulseCounter() {
  pulseCount++;
}

void setup() {
  pinMode(FLOW_SENSOR_PIN, INPUT_PULLUP);
  pinMode(TRIG_PIN, OUTPUT);
  pinMode(ECHO_PIN, INPUT);
  
  lcd.begin(16, 2);
  lcd.print("SYSTEM INIT...");
  
  // Gắn ngắt ngoài theo sườn lên (RISING)
  attachInterrupt(digitalPinToInterrupt(FLOW_SENSOR_PIN), pulseCounter, RISING);
  oldTime = millis();
}

void loop() {
  // Lấy mẫu lưu lượng mỗi chu kỳ 1000ms (1 giây)
  if ((millis() - oldTime) > 1000) {
    detachInterrupt(digitalPinToInterrupt(FLOW_SENSOR_PIN));
    
    // Tần số xung f = pulseCount / (khoảng thời gian)
    // Hệ số chuẩn cho van 1/2 inch: 7.5 Hz tương đương 1 L/min
    flowRate = ((1000.0 / (millis() - oldTime)) * pulseCount) / 7.5;
    oldTime = millis();
    
    flowMilliLitres = (flowRate / 60) * 1000;
    totalMilliLitres += flowMilliLitres;
    
    pulseCount = 0;
    attachInterrupt(digitalPinToInterrupt(FLOW_SENSOR_PIN), pulseCounter, RISING);
    
    // Cập nhật kết quả lên màn hình LCD
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Rate: ");
    lcd.print(flowRate, 2);
    lcd.print(" L/m");
    
    lcd.setCursor(0, 1);
    lcd.print("Vol: ");
    lcd.print(totalMilliLitres / 1000.0, 2);
    lcd.print(" L");
  }
}

Thử nghiệm và Đánh giá kết quả thực nghiệm

Hệ thống được đưa vào kiểm thử thực tế tại phòng lab với các mẫu dung tích bình đo tiêu chuẩn ($500\text{ mL}$, $1000\text{ mL}$, $5000\text{ mL}$) và đồng hồ chuẩn lưu lượng.

                    BIỂU ĐỒ ĐỘ CHÍNH XÁC ĐO LƯU LƯỢNG
   Lưu lượng chuẩn (L/min) vs Kết quả đo từ hệ thống (L/min)
   5.0 |--------------------------------------------- * (4.85)
   4.0 |--------------------------------------- * (3.92)
   3.0 |--------------------------------- * (2.95)
   2.0 |--------------------------- * (1.98)
   1.0 |--------------------- * (1.02)
       +---------------------------------------------------->
         Mẫu 1     Mẫu 2     Mẫu 3     Mẫu 4     Mẫu 5
Hạng mục kiểm thử Giá trị thực tế Giá trị đo được từ hệ thống Độ lệch tuyệt đối Tỷ lệ sai số (%)
Mức nước bồn trụ (Chiều cao) $20.0\text{ cm}$ $19.8\text{ cm}$ $0.2\text{ cm}$ $1.0%$
Mức nước bồn trụ (Chiều cao) $50.0\text{ cm}$ $49.4\text{ cm}$ $0.6\text{ cm}$ $1.2%$
Lưu lượng xả qua van $2.00\text{ L/min}$ $1.98\text{ L/min}$ $0.02\text{ L/min}$ $1.0%$
Lưu lượng xả qua van $5.00\text{ L/min}$ $4.85\text{ L/min}$ $0.15\text{ L/min}$ $3.0%$
Tổng thể tích xả tích lũy $10.00\text{ L}$ $9.68\text{ L}$ $0.32\text{ L}$ $3.2%$

Phân tích nguyên nhân sai số:

  • Độ phân giải của cảm biến Hall phụ thuộc vào độ quán tính cơ học của cánh quạt Turbine khi bắt đầu chảy hoặc dừng đột ngột.
  • Sóng siêu âm có độ tán xạ khi bề mặt nước bị xao động mạnh hoặc có bọt khí nổi.

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

  1. Tích hợp kép cơ chế đo Động và Tĩnh: Khác với các công trình đo đạc thông thường chỉ tập trung vào một đại lượng duy nhất, đề tài kết hợp đồng thời cảm biến dòng chảy (đo lưu lượng động của chất lỏng đang lưu thông) và cảm biến siêu âm ToF (đo thể tích tĩnh trong bồn chứa), tạo ra một giải pháp giám sát toàn diện khép kín.

  2. Cơ chế tính toán đa mô hình hình học linh hoạt: Hệ thống nhúng được lập trình sẵn các công thức giải tích cho 3 loại hình học bồn chứa phổ biến (hình hộp chữ nhật, hình trụ đứng, hình chỏm cầu). Người vận hành có thể cấu hình trực tiếp kích thước bồn qua bàn phím màng 4x4 mà không cần nạp lại mã nguồn (re-flashing firmware).

  3. Tối ưu hóa tài nguyên phần cứng vi điều khiển 8-bit: Sử dụng chế độ 4-bit giao tiếp HD44780 kết hợp kỹ thuật ngắt ngoài phần cứng giúp vi điều khiển ATmega328P (vốn chỉ có 2 KB SRAM) xử lý mượt mà tác vụ thu thập tín hiệu liên tục, tính toán dấu phẩy động và làm mới màn hình hiển thị với tần số trễ dưới $50\text{ ms}$.


Ứng dụng thực tế và triển khai

+-------------------------------------------------------------------------------+
|                       LĨNH VỰC ỨNG DỤNG THỰC TIỄN                             |
+-------------------------------------------------------------------------------+
| [1] NÔNG NGHIỆP THÔNG MINH                                                    |
|     - Giám sát định lượng nước tưới tự động cho hệ thống nhỏ giọt.            |
|     - Đảm bảo cấp chính xác thể tích nước dinh dưỡng cho cây trồng.          |
|                                                                               |
| [2] QUẢN LÝ DÂN DỤNG & TÒA NHÀ                                                |
|     - Theo dõi mức tiêu thụ nước cục bộ từng căn hộ/tầng.                     |
|     - Tự động ngắt hoặc cảnh báo khi bồn chứa trên cao đầy/cạn.               |
|                                                                               |
| [3] CÔNG NGHIỆP CHIẾT RÓT VỪA & NHỎ                                          |
|     - Định lượng dung dịch đóng chai tự động trong sản xuất nước uống, sữa.   |
|     - Giảm thiểu nhân công giám sát thủ công.                                 |
+-------------------------------------------------------------------------------+

Phân tích Hiệu quả Đầu tư (Cost-Benefit & ROI)

  • Chi phí triển khai một điểm đo: Ước tính khoảng $350.000 - 450.000\text{ VNĐ}$ (Bao gồm Arduino Uno, cảm biến Hall, HC-SR04, LCD 1602, Keypad và nguồn).
  • So với thiết bị công nghiệp: Tiết kiệm hơn $85%$ chi phí phần cứng ban đầu.
  • Thời gian hoàn vốn (ROI): Trong vòng 3 đến 6 tháng thông qua việc phát hiện kịp thời các sự cố rò rỉ đường ống và kiểm soát lượng nước tưới tiêu chính xác, tránh lãng phí năng lượng bơm.

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

                HẠN CHẾ HIỆN TẠI VÀ LỘ TRÌNH NÂNG CẤP
                
   [HẠN CHẾ HIỆN TẠI]                     [HƯỚNG NÂNG CẤP TƯƠNG LAI]
   +------------------------------+       +------------------------------+
   | Cảm biến Hall cơ học dễ mòn  | ===>  | Nâng cấp cảm biến siêu âm    |
   | theo thời gian nếu có cặn.   |       | kẹp ngoài ống (Non-invasive).|
   +------------------------------+       +------------------------------+
   | Cảm biến HC-SR04 không       | ===>  | Thay bằng JSN-SR04T chuẩn    |
   | chống nước, dễ bị đọng sương.|       | công nghiệp chống ẩm IP67.   |
   +------------------------------+       +------------------------------+
   | Dữ liệu chỉ hiển thị cục bộ  | ===>  | Nâng cấp SoC ESP32 / LoRaWAN |
   | trên màn hình LCD 1602.      |       | truyền dữ liệu lên IoT Cloud.|
   +------------------------------+       +------------------------------+

Đối tượng hưởng lợi

  • Sinh viên ngành Kỹ thuật Điện tử - Viễn thông / Tự động hóa: Tài liệu mẫu trực quan về cách thức lập trình ngắt ngoài trên vi điều khiển AVR, kỹ thuật giao tiếp màn hình tinh thể lỏng LCD theo tập lệnh HD44780 và xử lý cảm biến ToF.
  • Kỹ sư phát triển hệ sinh thái IoT & Smart Home: Thiết kế tham chiếu (Reference Design) tin cậy để tích hợp module đo lưu lượng/thể tích vào các gateway nhà thông minh.
  • Doanh nghiệp vừa và nhỏ trong nông nghiệp: Bản thiết kế hệ thống giám sát nước giá rẻ, dễ lắp ráp, chi phí bảo trì thấp, độ bền cơ học ổn định.

Câu hỏi thường gặp (FAQ)

1. Cần chuẩn bị những gì để nạp code và chạy hệ thống trên thực tế?

Cần cài đặt phần mềm Arduino IDE (phiên bản v1.8.x hoặc v2.x), máy tính có cổng USB kết nối cáp USB-A to USB-B với board Arduino Uno R3, và cài đặt các thư viện mã nguồn mở: LiquidCrystal.h (tích hợp sẵn) cùng Keypad.h từ Library Manager.

2. Cảm biến lưu lượng Hall có đo được các dung dịch đặc hoặc hóa chất ăn mòn không?

Không. Cảm biến Hall đi kèm cánh quạt nhựa tiêu chuẩn chỉ phù hợp cho nước sinh hoạt sạch hoặc chất lỏng không có cặn rác, độ nhớt thấp. Đối với hóa chất ăn mòn hoặc thực phẩm đặc, bắt buộc phải nâng cấp lên cảm biến lưu lượng từ tính không tiếp xúc hoặc cảm biến bằng inox 316 chuẩn vi sinh.

3. Làm thế nào để khắc phục hiện tượng nhảy số khi nước trong bồn bị xao động?

Trong mã nguồn, có thể áp dụng thuật toán lọc trung bình trượt (Moving Average Filter) hoặc lọc trung vị (Median Filter) lấy mẫu 10 lần liên tiếp của cảm biến siêu âm HC-SR04 để loại bỏ các điểm dữ liệu nhiễu do gợn sóng mặt nước.

4. Hệ thống có lưu trữ được dữ liệu khi xảy ra sự cố mất điện nguồn không?

Bộ nhớ RAM (SRAM) trên ATmega328P sẽ mất dữ liệu khi ngắt điện. Tuy nhiên, lập trình viên có thể kích hoạt ghi tổng lưu lượng tích lũy (totalMilliLitres) vào bộ nhớ EEPROM 1 KB định kỳ (hoặc khi phát hiện sụt áp nguồn qua chân Analog) để khôi phục dữ liệu ngay sau khi có điện trở lại.

5. Chi phí sản xuất hàng loạt ước tính là bao nhiêu?

Nếu tối ưu hóa trên bo mạch in PCB tự thiết kế (sử dụng trực tiếp chip dán ATmega328P-AU thay vì bo mạch Arduino cồng kềnh), giá thành sản xuất hàng loạt có thể giảm xuống dưới 250.000 VNĐ/thiết bị.


Kết luận

Đề tài “Nghiên cứu đo thể tích và lưu lượng nước hiển thị lên màn hình LCD sử dụng cảm biến và Arduino Uno R3” do nhóm sinh viên Khoa Điện tử - Viễn thông, Học viện Kỹ thuật Mật Mã thực hiện đã hoàn thành xuất sắc các mục tiêu thiết kế ban đầu. Hệ thống chứng minh tính khả thi cao trong việc kết hợp linh hoạt giữa cảm biến lưu lượng dòng chảy dạng Turbine và cảm biến siêu âm đo mức ToF dưới sự điều phối của vi điều khiển ATmega328P.

Sản phẩm không chỉ là một bài thực hành nghiên cứu ứng dụng có hàm lượng kỹ thuật chuẩn xác mà còn đặt nền móng vững chắc để mở rộng sang các hệ thống giám sát tài nguyên nước thông minh tích hợp IoT và Cloud trong tương lai.