Giới thiệu dự án
Bối cảnh ngành và thực trạng bảo quản dược phẩm
Trong chuỗi cung ứng y tế và dược phẩm, bảo quản thuốc là khâu trọng yếu quyết định trực tiếp đến hoạt tính hóa sinh, độ tinh khiết và tính an toàn của thành phẩm trước khi đến tay người bệnh. Theo tiêu chuẩn Thực hành tốt bảo quản thuốc (GSP - Good Storage Practices) do Tổ chức Y tế Thế giới (WHO) và Bộ Y tế Việt Nam quy định, phần lớn các loại thuốc tân dược, biệt dược và sinh phẩm y tế bắt buộc phải được duy trì trong môi trường có kiểm soát nghiêm ngặt: nhiệt độ phòng thông thường từ 15°C đến 25°C (hoặc tối đa không quá 30°C) và độ ẩm tương đối (RH) không vượt quá 70% – 75%.
Tại Việt Nam, với đặc trưng khí hậu nhiệt đới gió mùa có độ ẩm trung bình hàng năm lên tới 80% – 85% và nhiệt độ mùa hè thường xuyên vượt ngưỡng 35°C – 38°C, quá trình suy giảm chất lượng thuốc diễn ra rất nhanh nếu không có hệ thống điều hòa vi khí hậu liên tục. Tuy nhiên, khảo sát thực tế tại nhiều kho thuốc bệnh viện tuyến cơ sở, trạm y tế và hệ thống nhà thuốc bán lẻ cho thấy công tác giám sát môi trường vẫn phụ thuộc phần lớn vào phương pháp thủ công: nhân viên kiểm tra nhiệt ẩm kế treo tường 1 – 2 lần mỗi ngày rồi ghi chép thủ công vào sổ nhật ký.
[Môi trường nhiệt đới ẩm (T > 35°C, RH > 80%)]
Vấn đề cốt lõi (Problem Statement)
Phương pháp giám sát thủ công bộc lộ những điểm yếu chí mạng:
- Độ trễ phản ứng cao: Khi xảy ra sự cố đột biến nhiệt ẩm ngoài giờ làm việc (ví dụ: máy lạnh quá tải, chập điện vào ban đêm), không có cơ chế cảnh báo tức thời, dẫn đến toàn bộ lô thuốc nhạy cảm nhiệt bị biến tính.
- Sai số và điểm mù dữ liệu: Việc đo cục bộ tại một điểm treo nhiệt kế không phản ánh chính xác phân bố nhiệt độ trong các tủ thuốc kín hoặc các góc khuất luồng gió; nhật ký giấy không lưu trữ được dữ liệu liên tục để phục vụ thanh tra chất lượng.
- Thao tác can thiệp thụ động: Người vận hành phải tự tay bật/tắt máy hút ẩm hoặc điều hòa, gây tiêu hao điện năng và không duy trì được trạng thái cân bằng vi khí hậu ổn định.
Mục tiêu của đề tài
Đồ án tập trung giải quyết các mục tiêu kỹ thuật cụ thể:
- Nghiên cứu, thiết kế và chế tạo phần cứng mạch nhúng giám sát vi khí hậu dựa trên SoC ESP8266 NodeMCU Lua CP2102 kết hợp cảm biến số DHT11.
- Xây dựng thuật toán điều khiển tự động vòng kín kích hoạt mạch Relay 4 kênh điều khiển máy làm lạnh và máy tạo ẩm phun sương.
- Lập trình WebServer nhúng trực tiếp trên bộ nhớ Flash của ESP8266 bằng chuẩn HTML5, cung cấp giao diện quản trị từ xa (Web GUI) qua mạng WiFi nội bộ mà không cần thuê máy chủ ngoài.
- Tích hợp màn hình LCD 16x2 giao tiếp qua bus I2C giúp hiển thị thông số vi khí hậu trực quan tại trạm đo.
Phương pháp tiếp cận giải pháp
Đề tài ứng dụng kiến trúc tính toán biên cục bộ (Edge Computing cơ bản). Node điều khiển trung tâm tự xử lý dữ liệu cảm biến, tự ra quyết định đóng ngắt tải công suất và tự đóng vai trò là một HTTP WebServer phục vụ các kết nối client (PC, Smartphone) trong cùng mạng LAN. Hướng tiếp cận này tối ưu hóa độ bền, loại bỏ chi phí duy trì dịch vụ đám mây (Cloud Server) và đảm bảo tính khả thi cao khi ứng dụng tại các kho dược quy mô vừa và nhỏ.
Kết quả kỳ vọng và chỉ số đo lường
- Tần số lấy mẫu và cập nhật dữ liệu môi trường: $\ge 1\text{ Hz}$ (1 lần/giây).
- Thời gian phản hồi đóng/ngắt relay khi vượt ngưỡng cài đặt: $< 100\text{ ms}$.
- Giao diện Web hiển thị chính xác trạng thái hoạt động của bơm và máy lạnh với độ trễ phản hồi trang $< 500\text{ ms}$.
- Phạm vi khống chế vi khí hậu: Tự động kích hoạt làm lạnh khi $T \ge 32^\circ\text{C}$ và kích hoạt bù ẩm khi $H \le 72%$.
Phạm vi và giới hạn đề tài
- Phạm vi: Ứng dụng trong phòng bảo quản thuốc quy mô vừa (thể tích $V \le 50\text{ m}^3$), kết nối WiFi băng tần $2.4\text{ GHz}$ tiêu chuẩn 802.11 b/g/n.
- Giới hạn: Sử dụng cảm biến DHT11 (dải đo nhiệt độ 0°C – 50°C, độ ẩm 20% – 80% RH), phù hợp cho phòng bảo quản điều kiện thường, chưa áp dụng cho kho lạnh âm sâu (Cold Chain: 2°C – 8°C hoặc âm 20°C).
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 hành
Dưới đây là bảng đánh giá định lượng giữa phương pháp thủ công, hệ thống BMS công nghiệp và giải pháp nhúng IoT đề xuất trong đồ án:
| Tiêu chí đánh giá |
Phương pháp ghi chép thủ công |
Hệ thống công nghiệp PLC/SCADA |
Giải pháp đề tài (ESP8266 + WebServer) |
| Chi phí đầu tư phần cứng |
Thấp ($< 200.000\text{ VNĐ}$) |
Rất cao ($> 50.000.000\text{ VNĐ}$) |
Tối ưu ($< 500.000\text{ VNĐ}$) |
| Tần suất giám sát |
1 – 2 lần/ngày (ngắt quãng) |
Thời gian thực ($< 100\text{ ms}$) |
Thời gian thực ($1\text{ s}$) |
| Khả năng tự động điều khiển |
Không có (con người tự bật/tắt) |
Tự động hoàn toàn (PID/Logic) |
Tự động theo ngưỡng lập trình |
| Giám sát từ xa qua mạng |
Không có |
Qua mạng công nghiệp/HMI |
Trực tiếp qua Web Browser nội bộ |
| Độ phức tạp lắp đặt |
Không yêu cầu kỹ thuật |
Cần kỹ sư chuyên môn cao |
Đơn giản, mô-đun hóa cao |
| Tính độc lập hạ tầng |
Phụ thuộc nhân sự |
Phụ thuộc Server trung tâm |
Tự xử lý tại trạm biên (Node MCU) |
Phân tích yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc phải có):
- Đọc chính xác giá trị nhiệt độ, độ ẩm từ DHT11 qua giao thức 1-Wire.
- Tự động kích ngắt tiếp điểm Relay điều khiển động cơ máy lạnh ($220\text{VAC}$) và máy phun sương ($220\text{VAC}$).
- Hiển thị thông số $T$ và $H$ lên LCD 16x2 thông qua bộ chuyển đổi I2C.
- Should Have (Nên có):
- Giao diện Web hiển thị trực quan thông số và trạng thái đóng/ngắt tải.
- Khả năng chuyển đổi giữa chế độ tự động (Auto) và can thiệp thủ công (Manual) từ Web.
- Could Have (Có thể mở rộng):
- Gửi tin nhắn cảnh báo qua Telegram/SMS khi mất điện lưới.
- Won't Have (Chưa thực hiện trong giai đoạn này):
- Lưu trữ dữ liệu Big Data lên cơ sở dữ liệu Cloud như AWS IoT hoặc Firebase.
Thiết kế hệ thống
Kiến trúc tổng thể phần cứng
Hệ thống gồm 4 khối chức năng chính liên kết chặt chẽ với nhau theo luồng dữ liệu một chiều từ cảm biến đến bộ xử lý và phân phối tín hiệu điều khiển ra cơ cấu chấp hành:
graph TD
subgraph "Khối Cảm Biến"
DHT11["Cảm biến DHT11 (1-Wire Pin D2)"]
end
subgraph "Khối Xử Lý Trung Tâm"
ESP["NodeMCU ESP8266 (ESP-12E Module)"]
WebServer["Nhúng HTTP WebServer (Port 80)"]
ESP --- WebServer
end
subgraph "Khối Hiển Thị & Giao Tiếp"
I2C_Mod["Module PCF8574 (I2C: D6/SDA, D7/SCL)"]
LCD["Màn hình LCD 16x2 (HD44780)"]
I2C_Mod --> LCD
Client["Client (Smartphone / PC Browser)"]
end
subgraph "Khối Cơ Cấu Chấp Hành"
Opto["Cách ly quang Optocoupler (PC817)"]
Relay["Module Relay 4 Kênh (Active LOW)"]
AC["Máy lạnh / Máy nén kho lạnh (220VAC)"]
Pump["Máy bơm phun sương tạo ẩm (220VAC)"]
Opto --> Relay
Relay -->|Channel 1: Pin D0| AC
Relay -->|Channel 2: Pin D4| Pump
end
DHT11 -->|Tín hiệu Digital 40-bit| ESP
ESP -->|I2C Data/Clock| I2C_Mod
ESP <-->|WiFi 802.11 b/g/n (HTTP Request/Response)| Client
ESP -->|Tín hiệu logic 0V/5V| Opto
Ngăn xếp công nghệ (Technology Stack)
- Phần cứng điều khiển:
- Kit RF ESP8266 NodeMCU Lua CP2102 (Vi điều khiển 32-bit Tensilica L106 xung nhịp $80\text{ MHz}$, Flash $4\text{MB}$, tích hợp WiFi SoC).
- Cảm biến DHT11 (Điện áp hoạt động: $3\text{V} - 5\text{V}$, dải đo: $0 - 50^\circ\text{C} \pm 2^\circ\text{C}$, $20 - 80%\text{RH} \pm 5%$).
- Mạch Relay 4 kênh tích hợp Opto cách ly PC817 (Tiếp điểm định mức $250\text{VAC}/10\text{A}$, $30\text{VDC}/10\text{A}$).
- Module LCD 16x2 kèm driver chuyển đổi I2C PCF8574T (địa chỉ mặc định
0x27 hoặc 0x3F).
- Phần mềm & Thư viện:
- Môi trường phát triển: Arduino IDE v1.8.13 với gói ESP8266 Core v2.7.4.
- Thư viện nhúng:
ESP8266WiFi.h, ESP8266WebServer.h, DHTesp.h, LiquidCrystal_I2C.h.
- Frontend nhúng: HTML5, CSS thuần responsive cho trình duyệt di động.
Tính toán tải nhiệt phòng bảo quản thuốc
Công thức xác định công suất nhiệt tải phòng lạnh phục vụ lựa chọn máy nén và điều hòa:
$$P = \frac{V}{35 \div 40} \times 9000 \quad (\text{BTU/h})$$
Trong đó:
- $P$: Công suất lạnh yêu cầu ($\text{BTU/h}$).
- $V$: Thể tích phòng kho lưu trữ thuốc ($V = \text{Dài} \times \text{Rộng} \times \text{Cao}$, đơn vị $\text{m}^3$).
- Hệ số định mức tiêu chuẩn: Đối với phòng kho ít hấp thụ bức xạ mặt trời trực tiếp sử dụng hệ số chia $40$ (tương đương $600\text{ BTU/m}^2$ sàn); đối với phòng nhiều cửa kính hoặc nguồn nhiệt phụ tải cao sử dụng hệ số chia $35$ (tương đương $900\text{ BTU/m}^2$).
Phương pháp nghiên cứu và phát triển (Methodology)
Kế hoạch triển khai (Timeline)
- Tuần 1 – 2: Nghiên cứu tiêu chuẩn GSP, thông số linh kiện và xây dựng sơ đồ khối.
- Tuần 3 – 4: Thiết kế layout mạch in, ghép nối cảm biến DHT11, module I2C và Relay với NodeMCU.
- Tuần 5 – 6: Lập trình giải mã khung truyền DHT11, cấu hình WebServer nhúng và logic điều khiển.
- Tuần 7 – 8: Thử nghiệm đóng ngắt tải giả lập, hiệu chỉnh sai số và hoàn thiện mô hình thực tế.
Quản trị rủi ro phần cứng
- Rủi ro xung điện áp ngược (Inductive Kickback): Khi cuộn hút relay ngắt điện, từ trường cảm ứng tạo điện áp ngược có thể phá hủy GPIO của ESP8266.
- Giải pháp: Module relay được tích hợp sẵn Diode dập xung ngược (Flyback Diode) và cách ly quang hoàn toàn bằng IC Optocoupler PC817.
- Sụt áp nguồn khi kích đồng thời nhiều Relay: ESP8266 tiêu thụ dòng đỉnh lên tới $200\text{ mA}$ khi truyền phát WiFi; nếu nguồn $5\text{V}$ cấp qua cổng USB máy tính không đủ công suất sẽ gây reset vi điều khiển ngẫu nhiên (Brownout Reset).
- Giải pháp: Cấp nguồn ngoài $5\text{VDC} - 2\text{A}$ chuyên dụng vào chân
Vin và GND của Kit.
Triển khai và kết quả thực nghiệm
Quá trình phát triển và hiện thực hóa phần mềm
Sơ đồ kết nối phần cứng chi tiết
ESP8266 GPIO16 (D0) $\rightarrow$ Kích Relay Kênh 1 (Điều khiển Máy lạnh/Máy nén).
ESP8266 GPIO2 (D4) $\rightarrow$ Kích Relay Kênh 2 (Điều khiển Máy bơm phun sương).
ESP8266 GPIO12 (D6) $\rightarrow$ Chân SDA của Module I2C LCD 16x2.
ESP8266 GPIO13 (D7) $\rightarrow$ Chân SCL của Module I2C LCD 16x2.
ESP8266 GPIO4 (D2) $\rightarrow$ Chân Data của Cảm biến DHT11 (có trở kéo lên $4.7\text{ k}\Omega$ lên $3.3\text{V}$).
Cấu trúc mã nguồn điều khiển nhúng
Dưới đây là phần code cốt lõi triển khai trên ESP8266 NodeMCU bằng ngôn ngữ C++ (Arduino Framework), quản lý luồng đọc cảm biến, logic tự động đóng ngắt và WebServer:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <DHTesp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Khởi tạo đối tượng mạng và ngoại vi
const char* ssid = "Huynh Trung Van";
const char* pass = "606386899396";
DHTesp dht;
ESP8266WebServer server(80);
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Khai báo chân GPIO điều khiển Relay
const int Pump1 = D0; // Relay 1: Điều khiển máy lạnh
const int Pump2 = D4; // Relay 2: Điều khiển bơm phun sương
const int DHT_PIN = D2;
int status_p1 = 0; // Trạng thái máy lạnh: 0 = TẮT, 1 = BẬT
int status_p2 = 0; // Trạng thái máy phun sương: 0 = TẮT, 1 = BẬT
float Temp = 0.0;
float Humi = 0.0;
unsigned long timenow = 0;
// Giao diện Web HTML nhúng
void handleRoot() {
String html = "<!DOCTYPE html><html><head><meta charset='utf-8'>";
html += "<meta name='viewport' content='width=device-width, initial-scale=1'>";
html += "<title>GIÁM SÁT KHO THUỐC IoT</title>";
html += "<style>body{font-family:Arial;text-align:center;background:#f4f4f4;padding:20px;}";
html += ".card{background:white;padding:20px;border-radius:8px;box-shadow:0 2px 5px rgba(0,0,0,0.2);display:inline-block;margin:10px;}";
html += ".btn{padding:10px 20px;font-size:16px;margin:5px;border:none;border-radius:4px;cursor:pointer;}";
html += ".on{background-color:#4CAF50;color:white;} .off{background-color:#f44336;color:white;}</style></head>";
html += "<body><h2>HỆ THỐNG GIÁM SÁT NHIỆT - ẨM PHÒNG THUỐC</h2>";
html += "<div class='card'><h3>Nhiệt độ: " + String(Temp, 1) + " °C</h3></div>";
html += "<div class='card'><h3>Độ ẩm: " + String(Humi, 1) + " %</h3></div>";
html += "<div class='card'><h3>ĐIỀU KHIỂN CƠ CẤU CHẤP HÀNH</h3>";
html += "<p>Máy lạnh: " + String(status_p1 ? "<b style='color:green;'>ĐANG CHẠY</b>" : "<b style='color:red;'>ĐÃ TẮT</b>") + "</p>";
html += "<a href='/ac/on'><button class='btn on'>BẬT MÁY LẠNH</button></a>";
html += "<a href='/ac/off'><button class='btn off'>TẮT MÁY LẠNH</button></a>";
html += "<p>Máy phun sương: " + String(status_p2 ? "<b style='color:green;'>ĐANG CHẠY</b>" : "<b style='color:red;'>ĐÃ TẮT</b>") + "</p>";
html += "<a href='/pump/on'><button class='btn on'>BẬT PHUN SƯƠNG</button></a>";
html += "<a href='/pump/off'><button class='btn off'>TẮT PHUN SƯƠNG</button></a></div></body></html>";
server.send(200, "text/html", html);
}
void setup() {
Serial.begin(115200);
// Khởi tạo chân ngõ ra (Active LOW: HIGH là ngắt, LOW là đóng relay)
pinMode(Pump1, OUTPUT);
pinMode(Pump2, OUTPUT);
digitalWrite(Pump1, HIGH);
digitalWrite(Pump2, HIGH);
// Khởi tạo cảm biến và màn hình
dht.setup(DHT_PIN, DHTesp::DHT11);
Wire.begin(D6, D7);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("IoT Kho Thuoc");
// Kết nối mạng WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Đăng ký các Endpoint HTTP
server.on("/", handleRoot);
server.on("/ac/on", []() { digitalWrite(Pump1, LOW); status_p1 = 1; server.sendHeader("Location", "/"); server.send(303); });
server.on("/ac/off", []() { digitalWrite(Pump1, HIGH); status_p1 = 0; server.sendHeader("Location", "/"); server.send(303); });
server.on("/pump/on", []() { digitalWrite(Pump2, LOW); status_p2 = 1; server.sendHeader("Location", "/"); server.send(303); });
server.on("/pump/off", []() { digitalWrite(Pump2, HIGH); status_p2 = 0; server.sendHeader("Location", "/"); server.send(303); });
server.begin();
}
void loop() {
server.handleClient();
// Chu kỳ đọc cảm biến mỗi 2000ms
if (millis() - timenow >= 2000) {
timenow = millis();
Temp = dht.getTemperature();
Humi = dht.getHumidity();
if (!isnan(Temp) && !isnan(Humi)) {
// Logic điều khiển tự động theo ngưỡng cài đặt
if (Temp >= 32.0) {
digitalWrite(Pump1, LOW); // Bật máy lạnh
status_p1 = 1;
} else {
digitalWrite(Pump1, HIGH); // Tắt máy lạnh
status_p1 = 0;
}
if (Humi <= 72.0) {
digitalWrite(Pump2, LOW); // Bật bơm phun sương tạo ẩm
status_p2 = 1;
} else {
digitalWrite(Pump2, HIGH); // Tắt máy phun sương
status_p2 = 0;
}
// Cập nhật lên LCD 16x2
lcd.setCursor(0, 0);
lcd.print("T: " + String(Temp, 1) + (char)223 + "C P1:" + String(status_p1 ? "ON " : "OFF"));
lcd.setCursor(0, 1);
lcd.print("H: " + String(Humi, 1) + "% P2:" + String(status_p2 ? "ON " : "OFF"));
}
}
}
Thử nghiệm và đánh giá chất lượng (Testing & Validation)
Kịch bản kiểm thử chức năng và ngưỡng phản hồi
Hệ thống được đưa vào buồng thử nghiệm môi trường giả lập diện tích $15\text{ m}^3$ với các tình huống kích hoạt:
[Nhiệt độ T >= 32.0°C] [Độ ẩm H <= 72.0%]
Relay 1 kích đóng (LOW) Relay 2 kích đóng (LOW)
[Máy lạnh hạ nhiệt độ] [Bơm phun sương cấp ẩm]
[T < 32.0°C -> Tắt máy] [H > 72.0% -> Tắt bơm]
- Kịch bản 1 (Tăng nhiệt độ cưỡng bức): Dùng đèn sấy gia nhiệt môi trường lên $34.5^\circ\text{C}$ ($> 32^\circ\text{C}$). Relay 1 lập tức chuyển mức logic từ
HIGH sang LOW trong thời gian $< 50\text{ ms}$, kích hoạt động cơ máy làm lạnh. Khi nhiệt độ hạ về $31.2^\circ\text{C}$, Relay 1 tự động ngắt tải.
- Kịch bản 2 (Giảm độ ẩm nhân tạo): Thổi luồng khí khô đưa độ ẩm phòng xuống $65%$ ($< 72%$). Relay 2 đóng tiếp điểm kích máy bơm phun sương siêu âm hoạt động. Độ ẩm tăng dần lên $74%$, hệ thống tự động ngắt máy phun sương, không gây ngưng tụ đọng nước lên bao bì thuốc.
- Kịch bản 3 (Mất kết nối WiFi): Ngắt nguồn Router phát sóng. Vi điều khiển vẫn tiếp tục chạy độc lập vòng lặp
loop(), cập nhật dữ liệu nhiệt ẩm lên LCD 16x2 và duy trì logic điều khiển tự động relay bình thường.
Bảng thông số hiệu năng thực tế
| Thông số đo lường |
Giá trị thiết kế lý thuyết |
Kết quả đo đạc thực nghiệm |
Đánh giá sai số / Trạng thái |
| Độ trễ cập nhật cảm biến |
$2.000\text{ ms}$ |
$2.005\text{ ms}$ |
Sai số bộ đếm clock $< 0.25%$ |
| Thời gian phản hồi WebServer |
$< 300\text{ ms}$ |
$120\text{ ms} - 180\text{ ms}$ |
Đạt yêu cầu giao tiếp HTTP LAN |
| Tỷ lệ gói tin mất mát khi chạy 72h |
$0%$ |
$0.02%$ (1 gói/5000 request) |
Kết nối ổn định cao |
| Độ chính xác đo nhiệt độ |
$\pm 2^\circ\text{C}$ |
$\pm 1.4^\circ\text{C}$ (so chuẩn Fluke 971) |
Đạt tiêu chuẩn cảm biến DHT11 |
| Độ chính xác đo độ ẩm |
$\pm 5%\text{ RH}$ |
$\pm 3.8%\text{ RH}$ |
Đạt tiêu chuẩn cảm biến DHT11 |
Đổi mới và đóng góp kỹ thuật
Những cải tiến kỹ thuật nổi bật
- Kiến trúc WebServer không phụ thuộc Internet ngoài: Thay vì phải sử dụng các nền tảng trung gian có trả phí như Blynk Server thương mại hoặc AWS IoT Core vốn đòi hỏi đường truyền Internet cáp quang liên tục, hệ thống tích hợp trực tiếp WebServer vào vi điều khiển. Ngay cả khi mất kết nối mạng Internet ra ngoài, nhân viên y tế vẫn có thể truy cập IP nội bộ qua sóng WiFi cục bộ để giám sát.
- Tối ưu hóa bus giao tiếp màn hình thông qua I2C: Chuẩn LCD 16x2 HD44780 truyền thống cần tối thiểu 6 đến 7 chân GPIO ($RS, E, DB4 - DB7$). Bằng việc tích hợp IC giải mã I2C PCF8574, số đường tín hiệu giao tiếp với vi điều khiển giảm xuống chỉ còn 2 dây (
SDA và SCL), tiết kiệm tài nguyên chân GPIO của ESP8266 để mở rộng điều khiển rơ-le đa kênh.
- Cách ly hoàn toàn tầng công suất và tầng xử lý tín hiệu: Thiết kế mạch sử dụng optocoupler PC817 ngăn chặn triệt để hiện tượng xung điện áp cao từ cuộn hút của rơ-le hoặc động cơ máy nén $220\text{V}$ dội ngược về phá hủy chip xử lý ESP8266.
Đánh giá hiệu quả kinh tế và vận hành
- Cắt giảm 95% thời gian ghi chép thủ công: Loại bỏ hoàn toàn quy trình đo và ghi chép thủ công định kỳ, giải phóng thời gian cho dược sĩ tập trung vào công tác chuyên môn cấp phát thuốc.
- Tiết kiệm điện năng 15% – 20%: Cơ chế tự động ngắt máy nén lạnh và máy phun sương chính xác khi môi trường đạt ngưỡng cân bằng giúp loại bỏ tình trạng thiết bị chạy lãng phí liên tục không cần thiết.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Nhà thuốc đạt chuẩn GPP (Good Pharmacy Practice): Lắp đặt trạm giám sát nhỏ gọn ngay tại quầy thuốc tây tư nhân để giám sát các tủ thuốc kháng sinh, siro và thuốc hạ sốt.
- Kho lưu trữ dược liệu bệnh viện: Giám sát độ ẩm liên tục, ngăn ngừa hiện tượng nấm mốc phát triển trên các thang thuốc đông y và thảo dược sấy khô.
- Tủ lưu trữ vắc-xin và sinh phẩm: Kết hợp điều khiển các ngăn tủ bảo quản đặc biệt, đảm bảo chuỗi cung ứng lạnh không bị đứt gãy.
Hướng dẫn lắp đặt và triển khai (Deployment Guide)
- Chuẩn bị phần cứng:
- Nạp chương trình vào ESP8266 NodeMCU qua cổng MicroUSB bằng phần mềm Arduino IDE (chọn board
NodeMCU 1.0 (ESP-12E Module)).
- Cấp nguồn $5\text{VDC} - 2\text{A}$ ổn định qua bộ Adapter chuyển đổi AC-DC chuyên dụng.
- Cấu hình mạng:
- Cài đặt tên mạng WiFi (
ssid) và mật khẩu (pass) của phòng kho vào mã nguồn trước khi biên dịch.
- Cố định địa chỉ IP tĩnh cho ESP8266 trên Router (Static DHCP lease) để thuận tiện cho việc đánh dấu trang (bookmark) địa chỉ Web trên điện thoại của quản trị viên.
- Đấu nối tải công suất:
- Đấu nối dây pha ($L$) của nguồn $220\text{VAC}$ đi qua tiếp điểm thường hở (NO - Normally Open) và chân chung (COM) của Relay 1 dẫn tới máy làm lạnh, Relay 2 dẫn tới máy phun sương.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Giới hạn dải đo và độ chính xác của cảm biến DHT11: DHT11 chỉ hoạt động trong dải $0 - 50^\circ\text{C}$ với sai số $\pm 2^\circ\text{C}$ và $\pm 5%\text{ RH}$, không đáp ứng được yêu cầu hiệu chuẩn khắt khe của kho lạnh vắc-xin âm sâu (cần độ chính xác $\pm 0.1^\circ\text{C}$).
- Chưa có bộ nhớ đệm lưu trữ nhật ký ngoại tuyến (Offline Datalogging): Khi mất kết nối WiFi, dữ liệu tức thời không được lưu trữ vào bộ nhớ ngoài (như thẻ nhớ SD hoặc chip EEPROM/Flash chuyên dụng) để trích xuất báo cáo lịch sử sau đó.
- Giao thức truyền thông chưa mã hóa: Trang Web nhúng sử dụng giao thức HTTP thuần trên cổng 80, chưa tích hợp chứng chỉ bảo mật HTTPS/SSL.
Hướng nâng cấp và phát triển đề tài
- Thay thế cảm biến DHT11 bằng các dòng cảm biến công nghiệp độ chính xác cao như Sensirion SHT31 hoặc SHT35 (giao tiếp I2C, sai số nhiệt độ $\pm 0.1^\circ\text{C}$, độ ẩm $\pm 1.5%\text{ RH}$) hoặc đầu dò nhiệt điện trở bọc kim loại PT100/DS18B20 chống nước.
- Tích hợp module thời gian thực RTC DS3231 và khe cắm thẻ nhớ MicroSD để tự động ghi log dữ liệu định dạng
.csv phục vụ xuất báo cáo kiểm định GSP định kỳ.
- Nâng cấp giao thức truyền thông sang chuẩn MQTT/TLS kết nối về máy chủ trung tâm giám sát nhiều phòng kho tập trung thông qua nền tảng mã nguồn mở Home Assistant hoặc ThingsBoard.
Đối tượng hưởng lợi
mindmap
root((Hệ Thống IoT Kho Thuốc))
Sinh viên & Giảng viên
Tham khảo thiết kế vi điều khiển ESP8266
Học lập trình giao tiếp I2C, 1-Wire, WebServer nhúng
Ứng dụng chuyển đổi số trong điện tử công nghiệp
Kỹ sư & Lập trình viên IoT
Mẫu mã nguồn mở điều khiển vòng kín
Mẫu giao diện Web HTML5 tối ưu bộ nhớ Flash
Kỹ thuật chống nhiễu quang cho relay
Chủ nhà thuốc & Doanh nghiệp
Giải pháp chi phí thấp tuân thủ tiêu chuẩn GSP
Tự động hóa vận hành, giảm chi phí nhân công
Ngăn ngừa hư hại lô thuốc giá trị cao
- Sinh viên ngành Kỹ thuật Điện tử / Tự động hóa / CNTT: Là tài liệu tham khảo chi tiết về quy trình thiết kế mạch nhúng IoT từ sơ đồ nguyên lý đến lập trình firmware và thiết kế web nhúng.
- Kỹ sư phát triển hệ thống: Cung cấp mẫu mã nguồn và giải pháp phần cứng tin cậy để điều khiển tải công suất lớn mà không gây nhiễu loạn vi điều khiển.
- Cơ sở y tế và nhà thuốc tư nhân: Nhận được giải pháp thực tế có chi phí triển khai thấp (dưới 500.000 VNĐ), vận hành bền bỉ và đáp ứng các yêu cầu kiểm soát nhiệt ẩm cơ bản.
Câu hỏi thường gặp (FAQ)
1. Hệ thống yêu cầu cấu hình mạng và thiết bị như thế nào để triển khai?
Hệ thống chỉ yêu cầu một mạng WiFi nội bộ băng tần $2.4\text{ GHz}$ tiêu chuẩn 802.11 b/g/n (ESP8266 không hỗ trợ băng tần $5\text{ GHz}$). Thiết bị đầu cuối (Smartphone, Laptop, Tablet) chỉ cần có trình duyệt web tiêu chuẩn (Chrome, Safari, Firefox) kết nối chung mạng WiFi để truy cập địa chỉ IP của module.
2. Làm thế nào để điều chỉnh lại ngưỡng nhiệt độ và độ ẩm đóng ngắt theo yêu cầu riêng?
Trong mã nguồn firmware, các giá trị ngưỡng được định nghĩa tại điều kiện so sánh trong hàm loop():
if (Temp >= 32.0) { ... } // Ngưỡng nhiệt độ làm lạnh
if (Humi <= 72.0) { ... } // Ngưỡng độ ẩm kích hoạt bơm
Người vận hành có thể thay đổi các giá trị số này và nạp lại code thông qua cổng USB của Kit NodeMCU.
3. Khi mất điện lưới và có điện trở lại, hệ thống có tự khôi phục trạng thái hoạt động không?
Có. Firmware được lưu trữ trên bộ nhớ Flash Non-volatile của ESP8266. Khi có điện trở lại, vi điều khiển sẽ tự động chạy quy trình khởi động trong hàm setup(), tự động kết nối lại WiFi đã lưu và thiết lập lại các chân điều khiển Relay về trạng thái an toàn.
4. Relay 4 kênh có chịu tải trực tiếp được cho máy điều hòa công suất lớn (1.5 HP – 2 HP) không?
Tiếp điểm rơ-le định mức $250\text{VAC}/10\text{A}$ có thể đóng ngắt dòng liên tục cho các máy công suất nhỏ ($< 1000\text{W}$). Đối với máy điều hòa công suất lớn ($> 1.5\text{ HP}$, dòng khởi động máy nén cao), tiếp điểm rơ-le phải được sử dụng làm tín hiệu điều khiển cuộn hút của một Khởi động từ (Contactor AC) chuyên dụng để đảm bảo độ bền cơ điện.
5. Chi phí dự toán phần cứng cho một trạm giám sát này là bao nhiêu?
Tổng chi phí linh kiện phần cứng cho một trạm đo hoàn chỉnh ước tính khoảng $350.000 - 450.000\text{ VNĐ}$ (Bao gồm: Kit ESP8266 NodeMCU $\approx 75.000\text{ VNĐ}$, DHT11 $\approx 25.000\text{ VNĐ}$, Module Relay 4 kênh $\approx 45.000\text{ VNĐ}$, LCD 16x2 + Module I2C $\approx 55.000\text{ VNĐ}$, Nguồn $5\text{V}/2\text{A}$ và phụ kiện hộp vỏ $\approx 150.000\text{ VNĐ}$).
Kết luận
Đồ án tốt nghiệp "Điều khiển nhiệt độ, độ ẩm trong phòng bảo quản thuốc" của nhóm sinh viên Huỳnh Trung Vẫn và Nguyễn Văn Hiếu (Trường Đại học Bà Rịa – Vũng Tàu, 2020) đã chứng minh tính ứng dụng thực tiễn cao của công nghệ Internet of Things (IoT) vào bài toán quản trị vi khí hậu dược phẩm.
Bằng việc kết hợp hiệu quả giữa vi điều khiển WiFi ESP8266, cảm biến số DHT11, module truyền thông I2C và mạch rơ-le cách ly quang, đề tài đã xây dựng thành công một mô hình điều khiển vòng kín tự động hoàn chỉnh, có khả năng vận hành độc lập và cung cấp giao diện trực quan qua WebServer. Đây là giải pháp công nghệ giá thành tối ưu, có tiềm năng nhân rộng lớn cho hệ thống nhà thuốc bán lẻ và kho bảo quản y tế cơ sở trên cả nước.