Giới thiệu dự án

Trong bối cảnh đô thị hóa và sự bùng nổ của hạ tầng đô thị thông minh, quản lý năng lượng và tài nguyên nước tại các hộ gia đình cũng như các khu nhà trọ, chung cư mini đang đối mặt với nhiều thách thức lớn. Theo các thống kê ngành năng lượng và cấp thoát nước, việc thất thoát tài nguyên và lãng phí năng lượng trong sinh hoạt dân dụng chiếm từ 15% đến 20% tổng lượng tiêu thụ, phần lớn bắt nguồn từ việc người tiêu dùng không thể theo dõi mức độ sử dụng theo thời gian thực để có kế hoạch điều chỉnh kịp thời.

Phương pháp ghi nhận chỉ số điện - nước truyền thống phụ thuộc hoàn toàn vào việc đọc chỉ số cơ học thủ công định kỳ mỗi tháng một lần. Quy trình này bộc lộ hàng loạt nhược điểm: độ trễ thông tin cao, dễ xảy ra sai sót do con người, thiếu tính minh bạch dẫn đến tranh chấp hóa đơn, và hoàn toàn bất khả thi trong việc phát hiện sớm các sự cố rò rỉ nước ngầm hoặc hiện tượng rò rỉ, quá tải điện năng. Mặc dù trên thị trường đã xuất hiện các hệ thống SCADA và công tơ điện tử thông minh công nghiệp, tuy nhiên giá thành triển khai rất cao (thường dao động từ 150 đến 300 USD cho một điểm đo tích hợp), cấu hình phức tạp và phụ thuộc vào hạ tầng mạng chuyên dụng, không phù hợp với quy mô hộ gia đình phổ thông.

Đề tài "Ứng dụng công nghệ IoT giám sát mức tiêu thụ điện – nước" do sinh viên Phạm Quốc Hưng thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thanh Nghĩa tại Trường Đại học Sư phạm Kỹ thuật TP.HCM giải quyết bài toán trên thông qua việc thiết kế một trạm giám sát biên (Edge Monitoring Node) chi phí thấp, tích hợp đo lường đa thông số và truyền tải dữ liệu trực tiếp lên nền tảng đám mây.

+-----------------------------------------------------------------------------------+
|                                MỤC TIÊU DỰ ÁN                                     |
+-----------------------------------------------------------------------------------+
| 1. Thiết kế phần cứng đo lường tích hợp: ACS712-20A (dòng), Biến áp/Mạch chia áp  |
|    (áp AC 220V) và Cảm biến lưu lượng Hall S201 (nước).                           |
| 2. Xây dựng kiến trúc xử lý kép: Phân tách nhiệm vụ lấy mẫu tần số cao (Arduino    |
|    Mega 2560) và truyền thông mạng (NodeMCU ESP8266).                             |
| 3. Đồng bộ dữ liệu thời gian thực lên Google Firebase Realtime Database qua Wi-Fi.|
| 4. Xây dựng Web Dashboard phục vụ đa người dùng (Phân quyền Admin và User).       |
| 5. Tự động hóa tính toán chi phí theo biểu giá lũy tiến và lưu trữ lịch sử 3 tháng.|
+-----------------------------------------------------------------------------------+

Hệ thống mang lại khả năng đo đạc liên tục với chu kỳ lấy mẫu 1 giây, truyền dữ liệu nội bộ qua UART mỗi 10 giây và đẩy dữ liệu lên Firebase sau mỗi 120 giây. Độ sai số đo lường thực nghiệm được kiểm soát dưới 5%, đảm bảo độ tin cậy cao cho mục đích dân dụng.

Phạm vi nghiên cứu giới hạn ở mạng điện xoay chiều 1 pha 220V/50Hz, dòng điện tối đa 20A, hệ thống đường ống nước sinh hoạt dân dụng phi 21 (chuẩn ren G1/2, lưu lượng 1 - 30 L/phút), và triển khai giám sát trên nền tảng web responsive tương thích thiết bị di động và máy tính để bàn.


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

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

Việc đối sánh các giải pháp đo lường hiện nay trên thị trường giúp xác định rõ phân khúc tối ưu của giải pháp IoT tự chế tạo (Custom IoT Node).

Tiêu chí Đồng hồ cơ truyền thống Thiết bị đo thông minh công nghiệp (Modbus/Zigbee) Hệ thống IoT đề xuất (Arduino + NodeMCU + Firebase)
Thu thập dữ liệu Thủ công (1 lần/tháng) Tự động qua RS485/Modbus RTU Tự động qua Wi-Fi 802.11 b/g/n
Độ trễ cập nhật ~30 ngày Giây / Phút Cập nhật cục bộ 1s, Cloud 120s
Giám sát từ xa Không hỗ trợ Cần Gateway/Server chuyên dụng Web App truy cập toàn cầu qua Internet
Phân tích điện tích Không Đòi hỏi phần mềm SCADA đắt tiền Tích hợp tính tiền và so sánh 3 tháng
Chi phí đầu tư Thấp ($10 - $15) Rất cao ($150 - $300) Tối ưu ($25 - $35)
Khả năng mở rộng Không Phức tạp, phụ thuộc vendor Linh hoạt, mã nguồn mở

Yêu cầu kỹ thuật của hệ thống được phân loại theo mô hình MoSCoW:

  • Must Have (Bắt buộc): Đo dòng điện AC (0-20A), điện áp AC (0-250V), tính toán điện năng tiêu thụ (Wh); Đo lưu lượng xung và tích lũy thể tích nước (Lít); Hiển thị LCD 16x2 qua I2C; Kết nối Wi-Fi truyền dữ liệu lên Firebase; Phân quyền xác thực Gmail.
  • Should Have (Nên có): Thống kê dữ liệu lịch sử 3 tháng gần nhất; Giao diện người dùng dạng thẻ (Card/Form UI) tối ưu cho smartphone; Cơ chế khôi phục trạng thái tích lũy sau khi mất điện.
  • Could Have (Có thể có): Cảnh báo ngưỡng tiêu thụ vượt định mức qua còi/đèn; Tích hợp xuất báo cáo hóa đơn PDF.
  • Won't Have (Chưa thực hiện trong phiên bản này): Điều khiển ngắt rơ-le/van điện từ từ xa; Đọc dữ liệu công suất phản kháng và hệ số công suất $\cos\phi$ tức thời theo dạng sóng thực tế.

Thiết kế hệ thống

Kiến trúc hệ thống tuân theo mô hình 4 tầng tiêu chuẩn của hệ thống IoT:

graph TD
    subgraph "1. Sensing Layer"
        S1["Cảm biến dòng ACS712-20A"] -->|Analog 0-5V| M1["Arduino Mega 2560"]
        S2["Mạch đo điện áp AC 220V"] -->|Analog 0-5V| M1
        S3["Cảm biến lưu lượng YF-S201"] -->|Digital Pulse Interrupt| M1
    end

    subgraph "2. Processing & Gateway Layer"
        M1 -->|UART TX/RX 9600 bps| M2["NodeMCU ESP8266"]
        M2 -->|I2C SDA/SCL| DISP["LCD 16x2 + PCF8574"]
        BTN["Nút nhấn chuyển Mode"] -->|Digital Input| M2
    end

    subgraph "3. Cloud Platform (Firebase)"
        M2 -->|HTTPS / WSS| F_DB[("Firebase Realtime Database")]
        F_AUTH["Firebase Authentication (Gmail OAuth)"] --- F_DB
        F_HOST["Firebase Hosting"] --- WEB_APP["Static Web Files (HTML/JS/CSS)"]
    end

    subgraph "4. Application Layer"
        WEB_APP -->|REST / WebSocket| CLIENT_U["User Dashboard (Mobile/PC)"]
        WEB_APP -->|Admin Full Access| CLIENT_A["Admin Management Dashboard"]
    end

Danh mục công nghệ và phiên bản phần cứng/phần mềm sử dụng trong dự án:

Hạng mục Công nghệ / Phần cứng Phiên bản / Thông số kỹ thuật Vai trò trong hệ thống
Vi điều khiển đo đạc Atmel ATmega2560 16MHz, 54 I/O Pins, 16 ADC 10-bit Đo tín hiệu tương tự, đếm ngắt lưu lượng nước
Bộ xử lý truyền thông NodeMCU V3 (ESP8266) Tensilica L106 80MHz, Wi-Fi 2.4GHz Kết nối Internet, đồng bộ Firebase, điều khiển LCD
Cảm biến dòng Allegro ACS712-20A Độ nhạy 100 mV/A, Cách ly quang 2.1 kV Đo dòng điện xoay chiều AC lên đến 20A
Cảm biến lưu lượng YF-S201 Hall Sensor Áp lực $\le 1.75\text{ MPa}$, Tần số $7.5 \times Q$ Đếm xung dòng chảy nước sinh hoạt
Cloud Database Firebase Realtime DB Spark Plan (NoSQL JSON Data Store) Lưu trữ trạng thái thời gian thực và lịch sử
Hosting & Auth Firebase CLI / Auth Google OAuth 2.0 Client Library Lưu trữ Web App và xác thực tài khoản Gmail
Môi trường phát triển Arduino IDE / Sublime Text Arduino Core for ESP8266 v2.4.x Lập trình nhúng C/C++ và Front-end Web

Mô hình cấu trúc dữ liệu NoSQL trên Firebase Realtime Database được tổ chức theo cấu trúc JSON phân cấp:

{
  "users": {
    "UID_GMAIL_01": {
      "profile": {
        "email": "user1@gmail.com",
        "name": "Nha_Tro_So_01",
        "role": "user"
      },
      "current_status": {
        "voltage": 220.5,
        "current": 2.45,
        "power_w": 540.2,
        "energy_wh": 15420.0,
        "water_liters": 1250.5,
        "last_update": 1531728000
      },
      "history": {
        "month_05": { "total_kwh": 120.5, "total_water_m3": 15.2, "total_cost_vnd": 350000 },
        "month_06": { "total_kwh": 145.2, "total_water_m3": 18.0, "total_cost_vnd": 420000 },
        "month_07": { "total_kwh": 138.0, "total_water_m3": 16.5, "total_cost_vnd": 395000 }
      }
    }
  }
}

Về mặt bảo mật, các quy tắc Firebase Database Rules được thiết lập nghiêm ngặt:

{
  "rules": {
    "users": {
      "$uid": {
        ".read": "auth != null && (auth.uid == $uid || root.child('users').child(auth.uid).child('profile/role').val() == 'admin')",
        ".write": "auth != null && (auth.uid == $uid || root.child('users').child(auth.uid).child('profile/role').val() == 'admin')"
      }
    }
  }
}

Methodology

Quy trình phát triển dự án kéo dài 15 tuần theo mô hình thác nước kết hợp kiểm thử lặp (Waterfall with Iterative Prototyping):

+------------------------------------------------------------------------------------------+
|                                    LỊCH TRÌNH 15 TUẦN                                    |
+------------------------------------------------------------------------------------------+
| Tuần 01 - 03: Khảo sát đề tài, tính toán lý thuyết cảm biến, lập BOM linh kiện.           |
| Tuần 04 - 06: Nghiên cứu SDK ESP8266, cấu hình Firebase Console, dựng UI Web cơ bản.   |
| Tuần 07 - 08: Thiết kế mạch đo điện áp, thử nghiệm đọc cảm biến ACS712 và S201 độc lập.   |
| Tuần 09 - 10: Tích hợp thuật toán xử lý tín hiệu, lập trình truyền thông liên MCU UART.   |
| Tuần 11 - 12: Gia công hộp mica (20x17x9 cm), hàn PCB, tích hợp nguồn và đóng gói.     |
| Tuần 13 - 15: Hiệu chỉnh sai số đo lường, stress-test hệ thống, hoàn thiện luận văn.     |
+------------------------------------------------------------------------------------------+

Đánh giá và kiểm soát rủi ro kỹ thuật:

  • Nhiễu tín hiệu ADC: Tín hiệu analog từ cảm biến ACS712 bị nhiễu điện từ lưới. Giải pháp: Tích hợp tụ lọc gốm $100\text{nF}$ tại ngõ ra và thuật toán lấy trung bình cộng 100 mẫu tín hiệu trong cửa sổ 1 giây.
  • Tràn bộ đếm xung ngắt: Xung nước chảy nhanh gây nghẽn vi điều khiển. Giải pháp: Dùng ngắt ngoài phần cứng (attachInterrupt) chuyên biệt trên chân INT0 của Arduino Mega.
  • Mất điện đột ngột: Dữ liệu tích lũy trên RAM bị xóa sạch khi mất nguồn. Giải pháp: NodeMCU tự động truy vấn chỉ số tích lũy gần nhất từ Firebase ngay sau khi tái khởi động và cộng dồn dữ liệu mới.

Implementation và kết quả

Development process

Cơ sở toán học tính toán các đại lượng đo lường:

  1. Dòng điện hiệu dụng ($I_{RMS}$): $$V_{out}(t) = V_{offset} + S \cdot i(t)$$ Trong đó độ nhạy $S = 100\text{ mV/A}$, $V_{offset} \approx 2.5\text{ V}$. Lấy mẫu $N$ điểm trong chu kỳ tín hiệu: $$I_{RMS} = \sqrt{\frac{1}{N} \sum_{k=1}^{N} \left( \frac{V_{ADC}(k) - V_{offset}}{S} \right)^2}$$

  2. Điện năng tiêu thụ tích lũy ($E$): $$P(t) = U_{RMS}(t) \cdot I_{RMS}(t)$$ $$E = \sum P(t) \cdot \frac{\Delta t}{3600} \quad (\text{Wh})$$

  3. Lưu lượng và thể tích nước: Tần số xung đầu ra của cảm biến S201 tỷ lệ thuận với lưu lượng: $f = 7.5 \cdot Q$ (với $Q$ tính bằng L/phút). Số lượng xung trên 1 lít nước xấp xỉ 450 xung: $$\text{Thể tích (Lít)} = \frac{\text{Tổng số xung ngắt}}{450}$$

Dưới đây là các đoạn mã nguồn then chốt thể hiện thuật toán thực thi của hệ thống:

// ============================================================================
// ARDUINO MEGA 2560: LẤY MẪU CẢM BIẾN & XỬ LÝ NGẮT KHÔNG CHẶN (NON-BLOCKING)
// ============================================================================
volatile unsigned long pulseCount = 0;
unsigned long lastSampleTime = 0;
int sendCounter = 0;

void IRAM_ATTR pulseCounterISR() {
  pulseCount++; // Đếm xung ngắt từ cảm biến dòng chảy S201
}

void setup() {
  Serial.begin(9600);   // Giao tiếp UART với PC Debug
  Serial1.begin(9600);  // Giao tiếp UART với NodeMCU ESP8266
  pinMode(2, INPUT_PULLUP);
  attachInterrupt(digitalPinToInterrupt(2), pulseCounterISR, FALLING);
}

void loop() {
  unsigned long currentMillis = millis();
  
  // Chu kỳ lấy mẫu và tính toán: 1000ms (1 giây)
  if (currentMillis - lastSampleTime >= 1000) {
    lastSampleTime = currentMillis;
    
    // 1. Tính toán thể tích nước
    detachInterrupt(digitalPinToInterrupt(2));
    float waterLiters = (float)pulseCount / 450.0;
    attachInterrupt(digitalPinToInterrupt(2), pulseCounterISR, FALLING);
    
    // 2. Lấy mẫu dòng điện xoay chiều AC (ACS712)
    long sumCurrentSq = 0;
    for (int i = 0; i < 100; i++) {
      int rawADC = analogRead(A0);
      float voltage = (rawADC * 5.0) / 1024.0;
      float current = (voltage - 2.5) / 0.1; // ACS712-20A: 100mV/A
      sumCurrentSq += (current * current);
      delayMicroseconds(100);
    }
    float Irms = sqrt(sumCurrentSq / 100.0);
    
    // 3. Đo điện áp AC qua mạch biến áp hạ áp và chỉnh lưu
    float rawV = analogRead(A1);
    float Vrms = (rawV * 5.0 / 1024.0) * 55.4; // Hệ số suy hao áp chuẩn hóa
    float powerWatts = Vrms * Irms;
    float energyWh = powerWatts * (1.0 / 3600.0);
    
    sendCounter++;
    // Gửi chuỗi telemetry sang NodeMCU mỗi 10 giây
    if (sendCounter >= 10) {
      sendCounter = 0;
      // Định dạng gói tin: V,I,P,E,W#
      Serial1.print(Vrms, 1); Serial1.print(",");
      Serial1.print(Irms, 2); Serial1.print(",");
      Serial1.print(powerWatts, 1); Serial1.print(",");
      Serial1.print(energyWh, 3); Serial1.print(",");
      Serial1.print(waterLiters, 2); Serial1.println("#");
    }
  }
}
// ============================================================================
// NODEMCU ESP8266: XỬ LÝ CHUỖI DỮ LIỆU & ĐẨY LÊN FIREBASE REALTIME DB
// ============================================================================
#include <ESP8266WiFi.h>
#include <FirebaseArduino.h>

#define FIREBASE_HOST "smart-metering-system.firebaseio.com"
#define FIREBASE_AUTH "AIzaSyD-YOUR_FIREBASE_DATABASE_SECRET"
#define WIFI_SSID     "IoT_Lab_2.4G"
#define WIFI_PASSWORD "Hcmute@2018"

unsigned long lastFirebaseSync = 0;
float accumulatedEnergy = 0.0;
float accumulatedWater = 0.0;

void setup() {
  Serial.begin(9600); // Nhận dữ liệu UART từ Arduino Mega
  WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
  while (WiFi.status() != WL_CONNECTED) { delay(500); }
  Firebase.begin(FIREBASE_HOST, FIREBASE_AUTH);
  
  // Phục hồi chỉ số tiêu thụ từ Firebase sau khi mất điện
  if (Firebase.success()) {
    accumulatedEnergy = Firebase.getFloat("users/USER_01/current_status/energy_wh");
    accumulatedWater = Firebase.getFloat("users/USER_01/current_status/water_liters");
  }
}

void loop() {
  if (Serial.available() > 0) {
    String payload = Serial.readStringUntil('#');
    // Phân tích chuỗi dữ liệu (Parsing CSV format)
    int comma1 = payload.indexOf(',');
    int comma2 = payload.indexOf(',', comma1 + 1);
    int comma3 = payload.indexOf(',', comma2 + 1);
    int comma4 = payload.indexOf(',', comma3 + 1);
    
    if (comma4 > 0) {
      float v = payload.substring(0, comma1).toFloat();
      float i = payload.substring(comma1 + 1, comma2).toFloat();
      float p = payload.substring(comma2 + 1, comma3).toFloat();
      float eDelta = payload.substring(comma3 + 1, comma4).toFloat();
      float wDelta = payload.substring(comma4 + 1).toFloat();
      
      accumulatedEnergy += eDelta;
      accumulatedWater = wDelta; // Đã là tổng thể tích từ Arduino
      
      // Đồng bộ Cloud mỗi 120 giây để tối ưu băng thông & hạn ngạch
      if (millis() - lastFirebaseSync >= 120000) {
        lastFirebaseSync = millis();
        Firebase.setFloat("users/USER_01/current_status/voltage", v);
        Firebase.setFloat("users/USER_01/current_status/current", i);
        Firebase.setFloat("users/USER_01/current_status/power_w", p);
        Firebase.setFloat("users/USER_01/current_status/energy_wh", accumulatedEnergy);
        Firebase.setFloat("users/USER_01/current_status/water_liters", accumulatedWater);
      }
    }
  }
}
// ============================================================================
// FRONTEND WEB: ĐỒNG BỘ DỮ LIỆU REALTIME & TÍNH TIỀN TỰ ĐỘNG
// ============================================================================
const firebaseConfig = {
  apiKey: "AIzaSyBxxx-YOUR_API_KEY",
  authDomain: "smart-metering-system.firebaseapp.com",
  databaseURL: "https://smart-metering-system.firebaseio.com",
  projectId: "smart-metering-system"
};
firebase.initializeApp(firebaseConfig);
const db = firebase.database();

// Lắng nghe dữ liệu thời gian thực theo ID người dùng
function listenTelemetry(uid) {
  db.ref(`users/${uid}/current_status`).on('value', (snapshot) => {
    const data = snapshot.val();
    if (data) {
      document.getElementById('val-voltage').innerText = `${data.voltage.toFixed(1)} V`;
      document.getElementById('val-current').innerText = `${data.current.toFixed(2)} A`;
      document.getElementById('val-energy').innerText = `${(data.energy_wh / 1000).toFixed(2)} kWh`;
      document.getElementById('val-water').innerText = `${data.water_liters.toFixed(1)} Lít`;
      
      // Tự động tính toán chi phí (Điện: 2.500 đ/kWh, Nước: 10.000 đ/m3)
      const costElec = (data.energy_wh / 1000) * 2500;
      const costWater = (data.water_liters / 1000) * 10000;
      document.getElementById('val-total-cost').innerText = 
        `${Math.round(costElec + costWater).toLocaleString('vi-VN')} VNĐ`;
    }
  });
}

Testing và validation

Quá trình kiểm chuẩn thiết bị được tiến hành độc lập trên các tải thuần trở và tải cảm ứng:

Thiết bị kiểm chuẩn Tải thực tế (Tham chiếu) Giá trị đo được từ hệ thống Sai số tuyệt đối Tỷ lệ sai số (%)
Điện áp AC (VOM Fluke 17B+) $221.4\text{ V}$ $220.1\text{ V}$ $-1.3\text{ V}$ 0.58%
Dòng tải bóng đèn tròn $0.45\text{ A}$ ($100\text{ W}$) $0.43\text{ A}$ $-0.02\text{ A}$ 4.44%
Dòng tải ấm đun siêu tốc $6.82\text{ A}$ ($1500\text{ W}$) $6.65\text{ A}$ $-0.17\text{ A}$ 2.49%
Đo thể tích nước (Bình chuẩn 5L) $5.00\text{ Lít}$ $4.88\text{ Lít}$ $-0.12\text{ Lít}$ 2.40%
Đo thể tích nước (Bình chuẩn 20L) $20.00\text{ Lít}$ $19.65\text{ Lít}$ $-0.35\text{ Lít}$ 1.75%

Độ trễ truyền nhận từ khi phần cứng lấy mẫu đến khi giá trị hiển thị trên Web Dashboard qua mạng Wi-Fi đạt trung bình $1.25\text{ giây}$ (trong điều kiện mạng tiêu chuẩn, RTT $\approx 45\text{ ms}$).

Kết quả đạt được

Dự án đã chế tạo thành công 2 bộ mô hình phần cứng hoàn chỉnh đóng gói trong hộp mica trong suốt chịu lực ($20\text{ cm} \times 17\text{ cm} \times 9\text{ cm}$), bố trí mạch in công nghiệp, màn hình LCD 16x2 hiển thị tại chỗ, nút nhấn chuyển kênh giám sát và cổng kết nối thủy lực tiêu chuẩn.

+-----------------------------------------------------------------------------------+
|                            BẢNG TỔNG HỢP KẾT QUẢ ĐẠT ĐƯỢC                         |
+-----------------------------------------------------------------------------------+
| [x] Đo đồng thời 2 kênh tài nguyên: Điện năng (Wh) và Nước sinh hoạt (Lít).        |
| [x] Phần cứng phân lớp tối ưu: Giảm 100% hiện tượng mất xung khi đẩy dữ liệu Wi-Fi.|
| [x] Cơ chế Stateless Sync: Bảo toàn dữ liệu tích lũy khi mất nguồn điện.          |
| [x] Giao diện người dùng Web: Đăng nhập Gmail OAuth, xem chỉ số ngày và 3 tháng.   |
| [x] Giao diện Admin: Quản lý tập trung 250 thiết bị, phân quyền và khóa tài khoản. |
| [x] Tỷ lệ sai số đo lường toàn hệ thống: < 4.5% trên toàn dải đo.                 |
+-----------------------------------------------------------------------------------+

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

  • Kiến trúc Master-Slave phân tách tác vụ chuyên biệt: Thay vì sử dụng duy nhất một vi điều khiển đơn lẻ dễ bị tắc nghẽn khi xử lý stack mạng TCP/IP và TLS, hệ thống phân tách mạch lạc: Arduino Mega 2560 tập trung $100%$ chu kỳ máy cho tác vụ lấy mẫu ADC tốc độ cao và ngắt ngoài phần cứng; NodeMCU ESP8266 chuyên trách việc kết nối mạng và duy trì phiên làm việc WebSocket với Firebase.
  • Giải pháp khôi phục chỉ số thông minh (Stateless Recovery): Giải quyết triệt để nhược điểm của các kit phát triển giá rẻ không có bộ nhớ EEPROM lớn hoặc pin nuôi RTC: Sử dụng chính cơ sở dữ liệu đám mây làm điểm mốc khôi phục (Cloud-based Checkpoint), giúp hệ thống tự động đồng bộ lại chỉ số tổng sau sự cố mất điện lưới mà không làm sai lệch số liệu thống kê tháng.
  • Hiệu quả kinh tế vượt trội: Giảm giá thành thiết bị từ mức $150 - $300 (hệ thống thương mại) xuống còn $30 (giảm hơn $80%$ chi phí phần cứng), mở ra tiềm năng thương mại hóa rộng rãi cho các khu nhà trọ sinh viên và hộ gia đình có thu nhập trung bình.

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

Kịch bản ứng dụng

  1. Mô hình quản lý nhà trọ / Căn hộ dịch vụ thông minh: Chủ nhà trọ cài đặt thiết bị tại từng phòng. Vào cuối chu kỳ thanh toán, hệ thống tự động xuất hóa đơn tiền điện - nước chi tiết cho từng khách thuê mà không cần nhân viên đi ghi số từng phòng, loại bỏ hoàn toàn tình trạng sai sót hoặc khiếu nại.
  2. Hộ gia đình giám sát lãng phí tài nguyên: Người dùng dễ dàng theo dõi trực tiếp công suất tiêu thụ của các thiết bị trong gia đình để phát hiện các thiết bị ngốn điện (như máy lạnh hỏng inverter, bình nước nóng rò điện) hoặc phát hiện đường ống nước bị nứt vỡ ngầm thông qua chỉ số xung nước tự tăng khi không mở vòi.

Dự toán chi phí phần cứng (BOM)

STT Linh kiện Số lượng Đơn giá (VNĐ) Thành tiền (VNĐ)
1 Board Arduino Mega 2560 R3 1 180.000 180.000
2 Module NodeMCU ESP8266 V3 1 75.000 75.000
3 Cảm biến dòng ACS712-20A 1 45.000 45.000
4 Cảm biến lưu lượng nước YF-S201 1 65.000 65.000
5 Màn hình LCD 16x2 + Module I2C 1 55.000 55.000
6 Biến áp cách ly, mạch nguồn, vỏ hộp mica 1 bộ 130.000 130.000
TỔNG Chi phí hoàn thiện 1 Node 550.000 VNĐ (~$24 USD)

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

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

  • Độ phân giải bộ chuyển đổi tương tự - số (ADC) của ATmega2560 chỉ đạt 10-bit ($1024$ mức), dẫn đến độ nhạy ở vùng dòng điện rất thấp ($I < 0.2\text{ A}$) chưa thực sự tối ưu.
  • Chưa tích hợp biến dòng cảm ứng không xâm lấn (Non-invasive Current Transformer SCT-013) nên khi lắp đặt ACS712 bắt buộc phải cắt dây nguồn nối tiếp vào mạch.
  • Chưa có cơ cấu chấp hành điều khiển từ xa (Rơ-le công suất lớn để cắt điện khi quá tải hoặc van điện từ Solenoid để khóa nước khi phát hiện rò rỉ).

Hướng nâng cấp đề xuất

  • Chuyển đổi sang vi điều khiển ESP32 kép: Tích hợp bộ xử lý 32-bit Dual-Core với ADC 12-bit, giúp tinh giản toàn bộ phần cứng về một board duy nhất, giảm kích thước vỏ hộp $50%$.
  • Tích hợp module cảnh báo tức thời: Bổ sung cơ chế thông báo đẩy (Push Notification) qua Telegram Bot API hoặc Firebase Cloud Messaging (FCM) khi dòng điện hoặc lưu lượng nước vượt ngưỡng an toàn.
  • Bổ sung cơ cấu khóa tự động: Tích hợp Contactor ngắt điện từ xa và Van điện từ đồng thau chống cháy nổ để can thiệp khẩn cấp khi phát hiện sự cố.

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

  • Sinh viên & Học viên kỹ thuật: Nắm vững phương pháp thiết kế hệ thống IoT phân tán hoàn chỉnh từ mạch in phần cứng, lập trình nhúng C++, kiến trúc truyền thông UART/I2C đến xây dựng Full-stack Web kết nối Firebase Realtime NoSQL.
  • Kỹ sư & Lập trình viên IoT: Tham khảo mô hình xử lý bất đồng bộ (Non-blocking), cơ chế phục hồi dữ liệu đám mây (Stateless Sync) và kỹ thuật giảm tải băng thông Wi-Fi trên dòng chip ESP8266.
  • Chủ nhà trọ & Doanh nghiệp quản lý bất động sản: Sở hữu giải pháp tự động hóa ghi chỉ số điện nước chi phí thấp, triển khai nhanh, nâng cao tính chuyên nghiệp và loại trừ sai sót thất thoát doanh thu.
  • Nhà nghiên cứu: Nền tảng dữ liệu phục vụ nghiên cứu các thuật toán nhận dạng tải điện phi xâm lấn (NILM - Non-Intrusive Load Monitoring) dựa trên chuỗi dữ liệu thời gian thực.

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

1. Yêu cầu kỹ thuật phần cứng và hạ tầng để triển khai hệ thống là gì?

Hệ thống yêu cầu nguồn điện lưới xoay chiều 220V/50Hz cấp cho bộ biến áp tích hợp sẵn trong hộp thiết bị, đường ống nước chuẩn ren G1/2 (phi 21), và sóng Wi-Fi băng tần 2.4GHz có kết nối Internet.

2. Giới hạn số lượng tài khoản người dùng và khả năng chịu tải của Firebase là bao nhiêu?

Trên gói Spark miễn phí của Firebase, hệ thống hỗ trợ tối đa 100 kết nối đồng thời (Concurrent Connections), 1 GB dung lượng lưu trữ NoSQL và 10 GB truyền tải dữ liệu/tháng, đủ đáp ứng giám sát cho 50 đến 80 hộ gia đình. Khi nâng cấp gói Blaze (Pay-as-you-go), hệ thống mở rộng lên hàng chục nghìn thiết bị không giới hạn.

3. Hệ thống xử lý thế nào khi mất kết nối mạng Wi-Fi tạm thời?

Khi mất Wi-Fi, vi điều khiển Arduino Mega vẫn tiếp tục tính toán và tích lũy dữ liệu trên RAM, đồng thời hiển thị trực tiếp lên màn hình LCD 16x2 tại chỗ. NodeMCU liên tục thử kết nối lại; ngay khi có mạng, dữ liệu tích lũy mới nhất sẽ được đẩy lên Firebase.

4. Chi phí duy trì hệ thống hàng tháng trên Cloud là bao nhiêu?

Với quy mô thử nghiệm và triển khai dưới 80 hộ gia đình, chi phí duy trì trên Google Firebase Hosting và Realtime Database là 0 VNĐ/tháng nhờ tối ưu hóa chu kỳ ghi dữ liệu (120 giây/lần).

5. Cảm biến dòng ACS712 có an toàn khi làm việc với điện áp cao 220V không?

IC ACS712 được thiết kế với lớp cách ly điện áp mạ đồng bên trong (Galvanic Isolation) lên đến $2.1\text{ kV RMS}$ giữa các chân đo dòng điện động lực và chân tín hiệu vi điều khiển, đảm bảo an toàn tuyệt đối cho mạch điện tử logic bên trong hộp điều khiển.


Kết luận

Đồ án tốt nghiệp "Ứng dụng công nghệ IoT giám sát mức tiêu thụ điện – nước" đã giải quyết trọn vẹn bài toán đo lường, giám sát và quản lý tài nguyên năng lượng phục vụ đời sống dân sinh. Bằng việc kết hợp hài hòa giữa phần cứng mã nguồn mở linh hoạt (Arduino Mega 2560, NodeMCU ESP8266), các cảm biến chuyên dụng (ACS712, YF-S201) và nền tảng điện toán đám mây Google Firebase, hệ thống đạt độ chính xác cao, vận hành bền bỉ và chi phí đầu tư tối ưu.

Mô hình không chỉ mang giá trị học thuật xuất sắc trong việc ứng dụng kỹ thuật điện tử truyền thông vào thực tiễn, mà còn chứng minh tính khả thi cao cho các ứng dụng nhà thông minh (Smart Home) và đô thị thông minh (Smart City) trong tương lai. Bạn có thể tham khảo toàn bộ sơ đồ nguyên lý và mã nguồn của dự án để tiếp tục phát triển các tính năng cảnh báo thông minh hoặc mở rộng mạng lưới giám sát cho khu dân cư của mình.