Giới thiệu dự án

Nhu cầu về thực phẩm sạch tại các đô thị lớn như Hà Nội và TP.HCM ngày càng trở nên cấp thiết, đặc biệt sau những biến động chuỗi cung ứng và yêu cầu khắt khe về an toàn vệ sinh thực phẩm. Tuy nhiên, cư dân tại các căn hộ chung cư cao tầng thường đối mặt với rào cản lớn về diện tích canh tác hạn chế và quỹ thời gian eo hẹp.

Khảo sát thực tế trên 100 hộ dân tại Hà Nội chỉ ra rằng: 94% hộ gia đình tại chung cư có nhu cầu tự trồng rau sạch, nhưng 61.7% trong số đó gặp thất bại hoặc tốn quá nhiều công sức do phương pháp thủy canh thủ công thiếu ổn định, dễ dẫn đến hiện tượng úng rễ hoặc thiếu hụt dinh dưỡng cục bộ.

Đề tài tốt nghiệp "Xây dựng hệ thống IoT cho cây thủy canh tĩnh" (Ngành Kỹ thuật máy tính - Chuyên ngành Trí tuệ nhân tạo và IoT, Trường Công nghệ Thông tin và Truyền thông - Đại học Bách Khoa Hà Nội) giải quyết trực diện bài toán tự động hóa quy trình chăm sóc nông nghiệp đô thị quy mô hộ gia đình.

+-------------------------------------------------------------------------+
|                         KIẾN TRÚC TỔNG THỂ HỆ THỐNG                     |
+-------------------------------------------------------------------------+
| [Khối IoT - Phần cứng]         [Khối Cơ sở dữ liệu]   [Khối Ứng dụng]   |
| - ESP8266 Wi-Fi SoC            - Cloud Firestore      - Flutter App     |
| - Cảm biến DHT11 (Temp/Hum)    - Document/Collection  - Web Admin       |
| - Cảm biến HC-SR04 (Mực nước)  - Real-time Sync       - Pattern: MVVM   |
| - Relay & Van điện từ 12V      - Offline Persistence  - Quản lý & Chart |
+-------------------------------------------------------------------------+

Mục tiêu dự án

  1. Thiết kế phần cứng IoT tích hợp: Xây dựng bo mạch điều khiển dựa trên SoC ESP8266, tích hợp cảm biến nhiệt độ - độ ẩm môi trường (DHT11), cảm biến siêu âm đo mực nước (HC-SR04) và cơ chế điều khiển van cấp xả tự động qua Relay.
  2. Xây dựng giải pháp bán tự động dựa trên mô hình toán học: Phát triển thuật toán bù trừ lượng nước tiêu thụ tự động dựa trên tương quan nhiệt độ, độ ẩm không khí và chiều dài sinh trưởng của rễ cây.
  3. Phát triển nền tảng quản lý đa thiết bị: Xây dựng ứng dụng di động (Android/iOS) và cổng Web quản trị (Web Dashboard) trên nền tảng Flutter đa nền tảng, kết hợp kiến trúc phần mềm MVVM.
  4. Tối ưu hóa chi phí sản xuất: Đảm bảo toàn bộ chi phí phần cứng hoàn thiện dưới 1.500.000 VNĐ, đáp ứng khả năng chi trả của 90.62% nhóm khách hàng tiềm năng.

Phạm vi và giới hạn

  • Đối tượng thử nghiệm: Cây rau muống (Ipomoea aquatica) canh tác theo phương pháp thủy canh tĩnh trong chu kỳ sinh trưởng 31 ngày.
  • Môi trường triển khai: Không gian ban công, logia căn hộ chung cư diện tích từ $1.5\text{ m}^2 - 4\text{ m}^2$.
  • Giới hạn kỹ thuật: Hệ thống yêu cầu nguồn cấp nước áp lực trực tiếp hoặc bồn chứa phụ; kết nối mạng Wi-Fi băng tần 2.4 GHz cố định.

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

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

Khảo sát thị trường cho thấy sự phân hóa rõ rệt giữa các mô hình thủy canh hiện hành:

Tiêu chí Thủy canh động (NFT/DFT) Thủy canh tĩnh truyền thống Hệ thống IoT bán tự động (Đề tài)
Cơ chế vận hành Bơm tuần hoàn 24/7 Thủ công 100% Bán tự động theo thuật toán hồi quy
Tiêu thụ điện năng Cao (30 - 60W liên tục) 0W Rất thấp (< 5W khi kích hoạt van)
Độ ồn & Rò rỉ nước Có nguy cơ tràn và ồn Thấp Không gây ồn, có cảm biến chống tràn
Chi phí đầu tư 4.000.000 - 10.000.000 VNĐ 200.000 - 500.000 VNĐ 1.000.000 - 1.500.000 VNĐ
Tỷ lệ kiểm soát rủi ro Trung bình (hỏng bơm = chết cây) Thấp (phụ thuộc trí nhớ người trồng) Cao (giám sát thời gian thực qua Cloud)

Phân loại yêu cầu người dùng (MoSCoW)

  • Must have: Giám sát nhiệt độ/độ ẩm thời gian thực; tự động kích hoạt van cấp nước khi mực nước chạm đáy rễ; điều khiển thủ công qua Mobile App; tự ngắt chống tràn.
  • Should have: Thống kê lịch sử tưới và biểu đồ môi trường theo ngày/tháng; quản lý định danh thiết bị qua địa chỉ MAC trên Web Admin.
  • Could have: Cảnh báo biến động nhiệt độ môi trường vượt ngưỡng qua thông báo đẩy (Push Notification).
  • Won't have (trong phiên bản hiện tại): Định lượng nồng độ dinh dưỡng tự động (EC/pH dosing) do chi phí cảm biến công nghiệp cao.

Thiết kế hệ thống

+------------------------------------------------------------------------------------+
|                               SƠ ĐỒ LUỒNG DỮ LIỆU                                  |
+------------------------------------------------------------------------------------+
| [Node IoT ESP8266] --(JSON/HTTPS/REST)--> [Firebase Cloud Firestore Engine]       |
|        ^                                                |                          |
|        |                                                v (Real-time Stream)       |
| [Relay / Solenoid] <--- [Lệnh điều khiển] <--- [Flutter App / Web Admin (MVVM)]    |
+------------------------------------------------------------------------------------+

Technology Stack và phiên bản

  • Vi điều khiển & Firmware: ESP8266 NodeMCU V3 (Lolin), SDK ESP8266 Core v3.0.2, lập trình C++ trên Arduino IDE v1.8.19.
  • Frontend & App Engine: Flutter SDK v3.0.5, Dart SDK v2.17.6, State Management với Provider pattern, IDE Android Studio Bumblebee.
  • Cơ sở dữ liệu & Điện toán đám mây: Google Firebase Cloud Firestore (NoSQL Document Store), Firebase Authentication, Firebase Core v1.18.0.
  • UI/UX Prototyping: Figma Cloud Enterprise.

Thiết kế cơ sở dữ liệu (Firestore Schema)

// Collection: Users
{
  "userId": "USR_884920A",
  "userName": "Ha Duy Hieu",
  "email": "hieu.vn@example.com",
  "phoneNumber": "0987654321",
  "isAdmin": false,
  "deviceId": "ESP8266_MAC_B4E62D"
}

// Collection: Devices
{
  "deviceId": "ESP8266_MAC_B4E62D",
  "userId": "USR_884920A",
  "temperature": 29.5,
  "humidity": 78.2,
  "timeSensor": "2026-08-22T10:15:00Z",
  "pumpControl": false,
  "autoTurnOnPump": true,
  "waterFull": 4.5,
  "startTime": "2026-08-22T09:00:00Z",
  "endTime": "2026-08-22T09:02:15Z"
}

Phương pháp luận (Methodology)

Dự án áp dụng mô hình phát triển phần mềm Agile/Scrum chia thành 4 Sprint (mỗi Sprint kéo dài 2 tuần):

  • Sprint 1: Nghiên cứu tài liệu sinh học thủy canh, khảo sát 100 hộ dân và thiết kế mạch phần cứng nguyên mẫu.
  • Sprint 2: Lập trình Firmware vi điều khiển, kết nối cảm biến DHT11/HC-SR04 và thiết lập giao thức đồng bộ Firestore.
  • Sprint 3: Xây dựng ứng dụng di động Flutter theo chuẩn MVVM; thiết kế giao diện Figma tỉ lệ 1920x1080.
  • Sprint 4: Thực nghiệm sinh trưởng cây trồng thực tế (2 đợt $\times$ 60 cây rau muống), tinh chỉnh hệ số hồi quy tuyến tính của thuật toán cấp nước.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Thuật toán quyết định chu kỳ bơm tự động dựa trên mô hình toán học cân bằng bốc thoát hơi nước:

$$w = \left(\frac{H_0}{H} \times a + \frac{T_0}{T} \times b\right)$$

Trong đó:

  • $T_0, H_0$: Giá trị nhiệt độ ($^\circ\text{C}$) và độ ẩm ($%$) thực tế đo trung bình 3 mốc (09:00, 15:00, 21:00).
  • $T = 30^\circ\text{C}, H = 75%$: Ngưỡng nhiệt độ và độ ẩm cơ sở chuẩn hóa.
  • $a \approx 0.45, b \approx 0.55$: Trọng số xác định qua mô hình Hồi quy tuyến tính (Linear Regression) từ dữ liệu thực nghiệm.

Khoảng cách mặt nước tới cảm biến siêu âm ($s$) để gửi tín hiệu ngắt van được tính theo:

$$s = s_0 + r - \left(\frac{L_0 \times (1 + w)}{S}\right)$$

Với $s_0$ là khoảng cách mốc tới rễ, $r$ là chiều dài rễ đo tại ngày thứ $N$, $L_0$ là mức tiêu hao nước cơ sở, và $S$ là diện tích tiết diện đáy thùng chứa ($L \times W$).

Đoạn mã trích xuất: Xử lý dữ liệu cảm biến & điều khiển phần cứng (C++/Arduino)

#include <ESP8266WiFi.h>
#include <DHT.h>

#define DHTPIN D4
#define DHTTYPE DHT11
#define TRIG_PIN D5
#define ECHO_PIN D6
#define RELAY_PIN D1

DHT dht(DHTPIN, DHTTYPE);

float getWaterDistance() {
  digitalWrite(TRIG_PIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIG_PIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG_PIN, LOW);
  long duration = pulseIn(ECHO_PIN, HIGH, 30000); // Timeout 30ms
  if (duration == 0) return -1.0;
  return (duration * 0.0343) / 2.0; // Khoảng cách tính bằng cm
}

void processPumpingLogic(float currentDist, float targetCutoffDist) {
  if (currentDist > targetCutoffDist) {
    digitalWrite(RELAY_PIN, HIGH); // Mở van nước
  } else {
    digitalWrite(RELAY_PIN, LOW);  // Đóng van ngắt dòng
  }
}

Đoạn mã trích xuất: Tầng ViewModel trong Flutter (Dart)

class HomeViewModel extends ChangeNotifier {
  final FirebaseFirestore _firestore = FirebaseFirestore.instance;
  Sensor _currentSensor = Sensor(temperature: 0.0, humidity: 0.0, time: DateTime.now());
  bool _isPumpActive = false;
  bool _isAutoMode = true;

  Sensor get currentSensor => _currentSensor;
  bool get isPumpActive => _isPumpActive;
  bool get isAutoMode => _isAutoMode;

  void bindDeviceStream(String macAddress) {
    _firestore.collection('Devices').doc(macAddress).snapshots().listen((snapshot) {
      if (snapshot.exists) {
        final data = snapshot.data()!;
        _currentSensor = Sensor(
          temperature: (data['temperature'] as num).toDouble(),
          humidity: (data['humidity'] as num).toDouble(),
          time: DateTime.parse(data['timeSensor']),
        );
        _isPumpActive = data['pumpControl'] ?? false;
        _isAutoMode = data['autoTurnOnPump'] ?? true;
        notifyListeners();
      }
    });
  }

  Future<void> toggleManualPump(String macAddress, bool targetState) async {
    await _firestore.collection('Devices').doc(macAddress).update({
      'pumpControl': targetState,
      'startTime': targetState ? DateTime.now().toIso8601String() : null,
    });
  }
}

Kiểm thử và đánh giá hiệu năng

Hệ thống trải qua chuỗi 25 ca kiểm thử tích hợp (Test Cases), đạt tỷ lệ kiểm thử thành công 100% trên môi trường thực nghiệm:

Chỉ số kiểm thử Giá trị thiết kế Kết quả thực nghiệm Đánh giá
Độ trễ đồng bộ Cloud (Firestore Sync) $\le 1000\text{ ms}$ $320\text{ ms} - 580\text{ ms}$ Đạt tiêu chuẩn thời gian thực
Sai số cảm biến siêu âm (HC-SR04) $\le \pm 0.5\text{ cm}$ $\pm 0.2\text{ cm}$ (ở cự ly 5 - 30 cm) Rất chính xác
Sai số cảm biến DHT11 $\pm 1^\circ\text{C} / \pm 5%$ $\pm 0.8^\circ\text{C} / \pm 4.2%$ Ổn định
Độ chính xác cấp thể tích nước ($L = v_0 \times t_0$) $\ge 95%$ $97.4%$ Đảm bảo chống tràn tuyệt đối

Kết quả sinh trưởng thực tế (Cây rau muống - 31 ngày)

Quá trình theo dõi thực nghiệm trên 60 cây rau muống khẳng định tính ưu việt của hệ thống tự động:

[Chiều cao thân cây (cm) theo ngày sinh trưởng]
35 |                                                      * (32.4 cm - Ngày 31)
30 |                                            * (25.1 cm - Ngày 24)
25 |
20 |                                  * (16.8 cm - Ngày 17)
15 |
10 |                        * (9.2 cm - Ngày 10)
 5 |              * (3.5 cm - Ngày 6)
 0 +--------------+---------+---------+---------+---------+
   Ngày 0       Ngày 6    Ngày 10   Ngày 17   Ngày 24   Ngày 31
  • Ngày 6: Chiều cao trung bình $3.5\text{ cm}$, rễ dài $1.8\text{ cm}$; cây thích nghi tốt với dung dịch dinh dưỡng tĩnh.
  • Ngày 10: Thân đạt $9.2\text{ cm}$, rễ chớm $4.1\text{ cm}$; thuật toán bắt đầu điều chỉnh mức cấp bù nước $120\text{ ml/ngày}$.
  • Ngày 17: Tốc độ tăng trưởng vượt bậc, thân đạt $16.8\text{ cm}$, rễ chạm mức $7.6\text{ cm}$; lượng tiêu thụ nước tăng lên $280\text{ ml/ngày}$.
  • Ngày 24: Thân đạt $25.1\text{ cm}$, hình thành tán lá rộng, rễ dài $11.2\text{ cm}$.
  • Ngày 31 (Thu hoạch): Cây đạt chiều cao thương phẩm $32.4\text{ cm}$, sinh khối đồng đều, rễ trắng khỏe mạnh, không xuất hiện hiện tượng thối rễ do yếm khí hay thiếu nước.

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

  1. Thuật toán điều tiết vi khí hậu: Không sử dụng cảm biến đo đạc liên tục gây tiêu tốn năng lượng, hệ thống ứng dụng mô hình hồi quy tuyến tính liên kết giữa độ ẩm - nhiệt độ không khí và chiều dài rễ để suy biến lượng nước bốc thoát, giảm 70% tần suất đo đạc phần cứng.
  2. Kiến trúc phần mềm chuẩn hóa MVVM: Việc phân tách rõ ràng giữa Data Layer (Firestore), ViewModel (Business Logic) và Presentation Layer (Flutter Widgets) cho phép hệ thống tái sử dụng hơn 85% mã nguồn giữa bản Web Dashboard và Mobile App.
  3. Cơ chế định danh phần cứng qua MAC Address: Quản trị viên dễ dàng liên kết thiết bị với tài khoản khách hàng thông qua chuỗi MAC duy nhất mà không yêu cầu cấu hình mạng phức tạp từ phía người dùng cuối.

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

Hướng dẫn triển khai phần cứng tại gia đình

[Nguồn nước / Bồn chứa] ---> [Van điện từ 12V / Relay D1] ---> [Khay Thủy Canh Tĩnh]
                                          ^                            |
                                          |                     [Cảm biến HC-SR04]
                                  [Node ESP8266] <---------------------+
                                  [Cảm biến DHT11]
  1. Bước 1 (Lắp đặt bồn và cảm biến): Cố định cảm biến siêu âm HC-SR04 vuông góc với nắp khay chứa; gắn cảm biến DHT11 tại vị trí thông thoáng tránh ánh nắng trực tiếp rọi vào vỏ nhựa.
  2. Bước 2 (Đấu nối chấp hành): Nối Relay kích hoạt van điện từ qua chân GPIO D1 của ESP8266; cấp nguồn Adapter 12V-2A hạ áp qua module LM2596 xuống 5V cho vi điều khiển.
  3. Bước 3 (Khai báo thiết bị): Mở ứng dụng Flutter, đăng nhập tài khoản được cấp bởi Admin, nhập mã MAC in trên thân máy để liên kết dữ liệu đồng bộ đám mây.

Phân tích tài chính và điểm hòa vốn (ROI)

  • Tổng chi phí chế tạo thiết bị: 1.250.000 VNĐ (NodeMCU ESP8266: 95.000 VNĐ, DHT11 + HC-SR04: 85.000 VNĐ, Van điện từ + Relay + Nguồn: 280.000 VNĐ, Thùng vật liệu + Khay: 350.000 VNĐ, Phụ kiện & PCB: 440.000 VNĐ).
  • Chi phí vận hành: Năng lượng điện tiêu thụ $\approx 1.2\text{ kWh/tháng}$ ($\approx 3.000\text{ VNĐ}$); dung dịch dinh dưỡng $\approx 45.000\text{ VNĐ/tháng}$.
  • Hiệu quả kinh tế: Cung cấp trung bình $6\text{ kg}$ rau sạch/tháng (tương đương $300.000\text{ VNĐ}$ giá trị rau hữu cơ trên thị trường). Thời gian hoàn vốn đầu tư toàn bộ thiết bị là 5.2 tháng.

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

Hạn chế kỹ thuật

  • Hệ thống vẫn mang tính chất bán tự động: Người dùng cần định kỳ bổ sung dung dịch dinh dưỡng mẹ vào bồn dự trữ.
  • Cảm biến DHT11 có độ bền giới hạn trong môi trường độ ẩm bão hòa kéo dài trên 90%, cần nâng cấp lên dòng chống ẩm chuyên dụng.

Hướng nâng cấp

  • Tích hợp thêm cảm biến đo độ dẫn điện (EC) và độ chua (pH) để tự động hóa hoàn toàn khâu pha chế dinh dưỡng.
  • Ứng dụng mô hình Deep Learning (YOLOv8 nano) chạy trực tiếp trên vi điều khiển ESP32-CAM để nhận diện sớm sâu bệnh và nấm lá thông qua hình ảnh quang học.

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

  • Sinh viên & Nghiên cứu sinh: Bộ tài liệu tham khảo hoàn chỉnh về cách tích hợp kiến trúc MVVM trong Flutter với cơ sở dữ liệu thời gian thực Cloud Firestore và phần cứng IoT.
  • Lập trình viên IoT (Developers): Nắm vững kỹ thuật xử lý tín hiệu cảm biến thời gian thực, cơ chế ngắt phần cứng, và luồng Data Binding trên thiết bị nhúng.
  • Hộ gia đình đô thị: Tiếp cận giải pháp nông nghiệp sạch, tiết kiệm 85% thời gian chăm sóc với chi phí đầu tư ban đầu thấp.
  • Doanh nghiệp nông nghiệp công nghệ cao: Cơ sở tham khảo để module hóa các giải pháp Smart Urban Farming quy mô lớn.

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

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

Cần mạng Wi-Fi băng tần 2.4 GHz có kết nối Internet liên tục, một ổ cắm điện 220V trong bán kính 2m, và nguồn cấp nước áp lực từ 0.02 - 0.8 MPa nối vào van điện từ.

2. Khi mất kết nối Internet, hệ thống có tiếp tục bơm nước tự động không?

Có. Firmware trên vi điều khiển ESP8266 lưu trữ ngưỡng ngắt khoảng cách an toàn cục bộ trong bộ nhớ EEPROM, đảm bảo cơ chế tự ngắt chống tràn hoạt động độc lập không phụ thuộc vào tín hiệu Wi-Fi.

3. Có thể quản lý nhiều chậu thủy canh trên cùng một ứng dụng di động không?

Có. Ứng dụng Flutter được thiết kế theo cấu trúc 1-N (Một người dùng quản lý nhiều deviceId). Người dùng chỉ cần thêm thiết bị mới bằng cách đăng ký địa chỉ MAC với quản trị viên.

4. Chi phí bảo trì hàng năm của hệ thống là bao nhiêu?

Chi phí bảo dưỡng định kỳ ước tính khoảng 150.000 VNĐ/năm, chủ yếu cho việc vệ sinh màng lọc van điện từ và kiểm tra độ nhạy của cảm biến siêu âm.

5. Dữ liệu giám sát cây trồng được lưu trữ trong bao lâu trên Firebase?

Dữ liệu đo đạc nhiệt độ, độ ẩm và mực nước được lập chỉ mục (indexing) và lưu trữ không giới hạn thời gian trên Cloud Firestore, cho phép truy xuất và kết xuất biểu đồ lịch sử bất kỳ lúc nào.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống IoT cho cây thủy canh tĩnh" đã giải quyết thành công bài toán tự động hóa nông nghiệp đô thị quy mô nhỏ bằng cách kết hợp vi điều khiển ESP8266, hệ quản trị cơ sở dữ liệu thời gian thực Cloud Firestore, và ứng dụng đa nền tảng Flutter (MVVM).

Thực nghiệm sinh trưởng trong 31 ngày chứng minh hệ thống vận hành chính xác, loại bỏ hoàn toàn nguy cơ chết rễ do quên cấp nước, đồng thời tối ưu chi phí ở mức dưới 1.500.000 VNĐ. Đây là nền tảng vững chắc để mở rộng thương mại hóa và phát triển các mô hình nhà vườn thông minh (Smart Garden) trong tương lai.