Giới thiệu dự án
Trong bối cảnh chuyển đổi số y tế (Smart Healthcare) và cuộc cách mạng công nghiệp 4.0, việc tối ưu hóa quy trình tiếp đón, phân luồng và quản lý bệnh nhân tại các cơ sở y tế là bài toán cấp thiết. Theo các khảo sát vận hành bệnh viện, hơn 70% sự chậm trễ và ùn tắc tại khu vực khám ngoại trú xuất phát từ khâu thông báo số thứ tự thủ công, dẫn đến tình trạng quá tải, thất lạc lượt khám và gây căng thẳng cho cả nhân viên y tế lẫn bệnh nhân.
Vấn đề thực tiễn (Problem Statement)
Các hệ thống hiển thị thông tin truyền thống tại bệnh viện hiện nay đang bộc lộ nhiều điểm nghẽn:
- Bảng thông báo cố định/bảng mica: Hoàn toàn thủ công, không có khả năng cập nhật trạng thái theo thời gian thực (Real-time).
- Màn hình LED thương mại đơn lẻ: Sử dụng giao tiếp có dây (RS232/RS485) hoặc cổng USB/remote hồng ngoại cục bộ, đòi hỏi nhân viên phải thao tác tại chỗ, không tích hợp được vào mạng quản lý tập trung.
- Thiếu tính linh hoạt khi xử lý tình huống khẩn cấp: Khi có sự thay đổi bác sĩ phụ trách, đổi phòng khám hoặc tiếp nhận ca cấp cứu, việc cập nhật thông tin lên bảng hiển thị mất từ 3–5 phút.
- Chưa ứng dụng giao diện điều khiển rảnh tay (Hands-free Control): Nhân viên y tế tại các khu vực vô trùng hoặc bàn khám bận rộn không thể trực tiếp gõ phím để bật/tắt hay điều chỉnh hệ thống.
+-----------------------------------------------------------------------------+
| HIỆN TRẠNG QUẢN LÝ THÔNG BÁO TẠI BỆNH VIỆN |
| |
| [Bảng thủ công/Mica] ---> Cập nhật chậm (3-5 phút), dễ sai sót |
| [Bảng LED RS232/USB] ---> Phụ thuộc dây cáp, không quản lý tập trung |
| [Thiếu kết nối IoT] ---> Không hỗ trợ điều khiển rảnh tay (Hands-free) |
+-----------------------------------------------------------------------------+
Mục tiêu dự án
Đồ án tập trung vào 5 mục tiêu cốt lõi:
- Thiết kế và thi công phần cứng bảng hiển thị LED ma trận P10: Kích thước hiển thị 32cm x 64cm (ghép từ 4 module P10 đỏ) kết hợp module hiển thị 4 LED 7 đoạn TM1637 cho phép quan sát rõ ràng trong cự ly từ 3m đến 10m.
- Xây dựng khối xử lý trung tâm đa kênh: Tích hợp vi điều khiển ATmega2560 (Arduino Mega 2560 R3) chịu trách nhiệm quét LED ma trận tần số cao, phối hợp cùng vi điều khiển phụ trợ NodeMCU ESP8266 (Wi-Fi) và module Bluetooth HC-06.
- Phát triển ứng dụng Android chuyên dụng: Giao tiếp qua giao thức Bluetooth RFCOMM/SPP, cho phép y bác sĩ cập nhật nhanh tên khoa, tên bác sĩ, tên bệnh nhân và số thứ tự trong phạm vi 5–10m mà không cần mạng Internet.
- Xây dựng hệ thống Web Server & CSDL MySQL tập trung: Cung cấp giao diện quản trị hồ sơ bệnh nhân, cập nhật dữ liệu hàng đợi tự động qua mạng Wi-Fi/Internet (TCP/IP).
- Tích hợp trợ lý ảo Google Assistant: Thông qua dịch vụ Webhook trung gian IFTTT (If This Then That) và nền tảng mã nguồn mở OpenHAB, hỗ trợ điều khiển bật/tắt toàn bộ hệ thống bằng giọng nói tự nhiên.
Phương pháp tiếp cận (Solution Approach)
Dự án áp dụng kiến trúc nhúng phân tầng kết hợp mạng IoT không dây lai (Hybrid Wireless IoT). Tầng chấp hành và hiển thị được quản lý bởi ATmega2560 nhằm đảm bảo quá trình quét LED ma trận liên tục không bị chớp giật (Flicker-free). Tầng kết nối mạng được tách biệt cho ESP8266 và HC-06 đảm nhận việc thu thập dữ liệu bất đồng bộ qua chuẩn UART phần cứng. Cách tiếp cận này giải phóng tài nguyên xử lý tính toán thời gian thực cho vi điều khiển chính.
Chỉ số kết quả dự kiến (Expected Outcomes)
- Độ trễ cập nhật cục bộ (Bluetooth): $\le 200\text{ ms}$.
- Độ trễ cập nhật qua Web Server (Wi-Fi): $\le 1.5\text{ s}$.
- Thời gian phản hồi lệnh giọng nói (Google Assistant): $\le 2.5\text{ s}$.
- Khả năng hoạt động liên tục (MTBF): $\ge 720\text{ giờ}$ liên tục trong điều kiện nhiệt độ phòng khám ($20^\circ\text{C} - 40^\circ\text{C}$).
Phạm vi và giới hạn (Scope & Limitations)
- Hệ thống hỗ trợ hiển thị 4 dòng thông tin: Tên khoa khám, Tên bác sĩ, Tên bệnh nhân, Ngày tháng năm, kết hợp màn hình 4 LED 7 đoạn hiển thị số thứ tự bệnh nhân.
- Ký tự hiển thị trên LED ma trận là ký tự số và chữ cái tiếng Việt không dấu (chuẩn ASCII mở rộng).
- Điều khiển Bluetooth giới hạn trong phạm vi bán kính 5–10m không vật cản.
- Nguồn cấp toàn hệ thống: Nguồn xung 5VDC - 10A (công suất định mức 50W).
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Bảng LED truyền thống (COM/USB) |
Bảng LCD/Tivi hiển thị |
Hệ thống Bảng thông báo IoT (Đề tài) |
| Chi phí đầu tư |
Trung bình (2.000.000 - 3.500.000 VNĐ) |
Cao (> 6.000.000 VNĐ) |
Thấp - Tối ưu (~ 1.850.000 VNĐ) |
| Độ bền môi trường |
Cao (Tuổi thọ LED > 50.000h) |
Trung bình (Dễ hỏng tấm nền) |
Rất cao (LED DIP346 chuẩn công nghiệp) |
| Khoảng cách nhìn |
Tốt (3m - 15m) |
Trung bình (Dễ lóa dưới ánh sáng) |
Tốt (3m - 10m, độ sáng 4500 nits) |
| Phương thức cập nhật |
Cáp nạp COM/USB cục bộ |
Mạng LAN/Cáp HDMI chuyên dụng |
Đa kênh: Web Server (Wi-Fi), App (Bluetooth), Voice |
| Tính linh hoạt khẩn cấp |
Rất thấp (cần nạp lại file cấu hình) |
Trung bình (phụ thuộc CMS) |
Rất cao (Cập nhật tức thời qua điện thoại Android) |
| Điều khiển rảnh tay |
Không hỗ trợ |
Không hỗ trợ |
Có (Google Assistant + IFTTT) |
Phân tích yêu cầu người dùng (MoSCoW Matrix)
- Must-have (Bắt buộc phải có):
- Hiển thị thông tin 4 dòng rõ nét trên ma trận LED P10.
- Hiển thị số thứ tự nhảy tự động trên LED 7 đoạn TM1637.
- Cập nhật thông tin bệnh nhân tức thời qua Bluetooth bằng smartphone Android.
- Đồng bộ trạng thái hàng đợi từ Web Server thông qua Wi-Fi ESP8266.
- Should-have (Nên có):
- Bật/tắt nguồn hiển thị thông qua câu lệnh giọng nói Google Assistant ("Turn on notice board").
- Giao diện Web quản trị hồ sơ bệnh nhân với cơ sở dữ liệu MySQL.
- Mạch rơ-le cách ly quang bảo vệ tầng công suất hiển thị.
- Could-have (Có thể mở rộng):
- Tự động cảnh báo âm thanh (Buzzer) khi chuyển lượt bệnh nhân tiếp theo.
- Điều chỉnh độ sáng bảng LED theo môi trường phòng khám qua băm xung PWM.
- Won't-have (Tạm thời chưa triển khai ở pha này):
- Hiển thị ký tự tiếng Việt đầy đủ dấu Unicode trên font ma trận 16x32.
- Tích hợp chuẩn giao tiếp không dây Zigbee/LoRaWAN tầm xa.
Thiết kế hệ thống
+-----------------------------------------------------------------------------------+
| KIẾN TRÚC TOÀN HỆ THỐNG |
+-----------------------------------------------------------------------------------+
| [Người dùng / Y bác sĩ] |
| | |
| +---> [Google Assistant] ---> [IFTTT] ---> [OpenHAB Core / Webhook API] |
| | | (HTTP/Wi-Fi) |
| +---> [Web Browser (PC/Mobile)] ---> [Web Server (PHP/MySQL)] |
| | | (JSON/HTTP GET) |
| +---> [Android App UI] v |
| | (RFCOMM/SPP) [NodeMCU ESP8266 (Wi-Fi)] |
| v | |
| [Module Bluetooth HC-06] | |
| | (UART Serial 1 - 9600 bps) | (UART Serial 2) |
| +------------------+ +-------------------+ |
| v v |
| +-----------------------+ |
| | Arduino Mega 2560 | |
| | (ATmega2560 MCU) | |
| +-----------+-----------+ |
| | |
| +--------------------+--------------------+ |
| | (HUB08 SPI-like) | (I2C-like CLK/DIO) |
| v v |
| +-------------------------+ +----------------------+ |
| | 4x Module LED P10 | | 4-Digit 7-Segment | |
| | (16x 74HC595 / 74HC138)| | Module (TM1637) | |
| +-------------------------+ +----------------------+ |
+-----------------------------------------------------------------------------------+
Technology Stack và Phiên bản Kỹ thuật
- Khối điều khiển trung tâm: Arduino Mega 2560 R3 (Vi điều khiển 8-bit ATmega2560 @ 16 MHz, 256 KB Flash, 8 KB SRAM, 4 KB EEPROM).
- Khối thu thập dữ liệu không dây:
- NodeMCU ESP8266 v1.0 (ESP8266EX SoC, 2.4 GHz Wi-Fi 802.11 b/g/n, Flash 4 MB, Firmware Core v2.4.2).
- Module Bluetooth HC-06 (CSR BC417 v2.0 + EDR, Baud rate 9600 bps, 8N1).
- Khối hiển thị & Điều khiển công suất:
- 04 Module LED Ma trận P10 Đơn sắc Đỏ (Kích thước mỗi tấm 160mm x 320mm, độ phân giải 16x32 dot, IC ghi dịch 74HC595, IC đệm dòng 74HC245, IC giải mã 74HC138, Quét 1/4).
- 01 Module 4 LED 7 đoạn điều khiển bởi IC TM1637.
- Module Relay 5VDC cách ly Optocoupler PC817 + Transistor C1815.
- IC ổn áp tuyến tính AMS1117-3.3V (cấp nguồn cho vi xử trị ngoại vi).
- Bộ nguồn chuyển mạch tổ ong 5VDC - 10A (50W Continuous Rating).
- Phần mềm & Nền tảng:
- Arduino IDE v1.8.8.
- Android Studio v3.2.1 (Target SDK 28, Min SDK 19, Java SE 8).
- Web Server: Apache 2.4, PHP 7.2, Cơ sở dữ liệu MySQL 5.7.
- Smart Automation: OpenHAB v2.3, IFTTT Applet Webhooks.
Thiết kế Cơ sở dữ liệu (Database Schema)
-- Cấu trúc bảng lưu trữ thông tin hiển thị phòng khám
CREATE TABLE `clinic_display` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`department_name` VARCHAR(50) NOT NULL,
`doctor_name` VARCHAR(50) NOT NULL,
`patient_name` VARCHAR(50) NOT NULL,
`patient_queue_num` INT(4) NOT NULL,
`date_updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`system_status` TINYINT(1) NOT NULL DEFAULT 1,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- Bảng quản lý hồ sơ bệnh nhân theo hàng đợi
CREATE TABLE `patients_queue` (
`queue_id` INT(11) NOT NULL AUTO_INCREMENT,
`patient_code` VARCHAR(20) NOT NULL UNIQUE,
`full_name` VARCHAR(100) NOT NULL,
`gender` ENUM('Nam', 'Nu') NOT NULL,
`birth_year` INT(4) NOT NULL,
`status` ENUM('WAITING', 'EXAMINING', 'DONE') DEFAULT 'WAITING',
PRIMARY KEY (`queue_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Thiết kế API Endpoints
[GET] /api/get_display_data.php
Response: {"dept":"KHOA NOI","doc":"BS. NGUYEN VAN A","pat":"TRAN VAN B","num":105,"status":1}
[POST] /api/update_patient.php
Payload: {"patient_name":"LE THI C","queue_num":106}
Response: {"code":200,"message":"Updated successfully"}
[POST] /api/voice_command.php (IFTTT Webhook)
Payload: {"command":"DISPLAY_OFF","secret_token":"SECURE_TOKEN_14141065"}
Response: {"code":200,"relay_state":0}
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình phát triển tích hợp phần cứng - phần mềm tuần tự cải tiến (Hardware-Software Co-Design V-Model) kết hợp kiểm thử theo từng giai đoạn trong lộ trình 15 tuần:
Tuần 01 - 03: Khảo sát lý thuyết, nghiên cứu tập lệnh Module P10, TM1637, ESP8266, HC-06.
Tuần 04 - 06: Lập trình App Android (Android Studio) & Thiết kế Web Server (PHP/MySQL).
Tuần 07 - 08: Thiết kế mạch nguyên lý, vẽ mạch in PCB (Altium/Proteus), thi công đóng khung gỗ.
Tuần 09 - 11: Lắp ráp phần cứng, tích hợp OpenHAB, IFTTT và cấu hình Google Assistant.
Tuần 12 - 15: Chạy thử nghiệm thực tế (Stress-test), sửa lỗi, tối ưu hóa độ trễ và viết báo cáo.
Implementation và kết quả
Quá trình phát triển phần mềm và thuật toán
Khối trung tâm ATmega2560 thực hiện giải thuật đa nhiệm cộng tác (Cooperative Polling & Interrupt). Do vi điều khiển 8-bit phải quét liên tục 4 module P10 thông qua giao tiếp HUB08 (tần số quét tối thiểu 100Hz để tránh chớp mắt) đồng thời tiếp nhận dữ liệu chuỗi từ 2 cổng nối tiếp phần cứng (Serial1 nối HC-06, Serial2 nối ESP8266).
1. Xử lý quét hiển thị LED P10 và giải mã dòng
Module P10 sử dụng chế độ quét 1/4 chu kỳ (4 hàng tích cực cùng lúc trong tổng số 16 hàng):
- Chân
A, B kết nối tới IC giải mã 74HC138 để chọn nhóm hàng:
- $A=0, B=0 \implies$ Kích hoạt hàng 1, 5, 9, 13
- $A=1, B=0 \implies$ Kích hoạt hàng 2, 6, 10, 14
- $A=0, B=1 \implies$ Kích hoạt hàng 3, 7, 11, 15
- $A=1, B=1 \implies$ Kích hoạt hàng 4, 8, 12, 16
- Dữ liệu điểm ảnh được đẩy nối tiếp vào 16 IC ghi dịch 74HC595 thông qua chân
CLK (SH_CP), chốt dữ liệu ra màn hình bằng chân SCLK (ST_CP) và điều khiển độ sáng bằng chân OE (PWM trên IC 74HC138).
2. Đoạn mã trích xuất (Core Firmware Logic trên Arduino Mega 2560)
#include <DMD.h>
#include <TimerOne.h>
#include <TM1637Display.h>
// Định nghĩa số lượng module P10 ghép (2 ngang x 2 dọc = 4 tấm)
#define DISPLAYS_ACROSS 2
#define DISPLAYS_DOWN 2
DMD dmd(DISPLAYS_ACROSS, DISPLAYS_DOWN);
// Cấu hình LED 7 đoạn TM1637
#define CLK_TM 4
#define DIO_TM 5
TM1637Display segDisplay(CLK_TM, DIO_TM);
#define RELAY_PIN 7 // Điều khiển nguồn màn hình qua Relay cách ly
String inputStringBluetooth = "";
String inputStringWifi = "";
bool stringCompleteBT = false;
bool stringCompleteWifi = false;
// Ngắt quét màn hình P10 với tần số 300Hz (chu kỳ 3333 microseconds)
void ScanDMD() {
dmd.scanDisplayBySPI();
}
void setup() {
Serial.begin(115200); // Debug Monitor
Serial1.begin(9600); // Giao tiếp HC-06 Bluetooth
Serial2.begin(9600); // Giao tiếp NodeMCU ESP8266 UART
pinMode(RELAY_PIN, OUTPUT);
digitalWrite(RELAY_PIN, HIGH); // Bật nguồn hiển thị mặc định
Timer1.initialize(3333);
Timer1.attachInterrupt(ScanDMD);
dmd.clearScreen(true);
segDisplay.setBrightness(0x0a);
segDisplay.showNumberDec(0, true);
}
void loop() {
// 1. Kiểm tra và nhận chuỗi dữ liệu từ Bluetooth
while (Serial1.available()) {
char inChar = (char)Serial1.read();
if (inChar == '\n') {
stringCompleteBT = true;
break;
} else {
inputStringBluetooth += inChar;
}
}
// 2. Kiểm tra và nhận chuỗi dữ liệu từ Web/ESP8266
while (Serial2.available()) {
char inChar = (char)Serial2.read();
if (inChar == '\n') {
stringCompleteWifi = true;
break;
} else {
inputStringWifi += inChar;
}
}
// 3. Xử lý gói tin khi nhận đầy đủ
if (stringCompleteBT) {
parseAndDisplayPacket(inputStringBluetooth);
inputStringBluetooth = "";
stringCompleteBT = false;
}
if (stringCompleteWifi) {
parseAndDisplayPacket(inputStringWifi);
inputStringWifi = "";
stringCompleteWifi = false;
}
}
void parseAndDisplayPacket(String data) {
// Định dạng gói tin: #CMD:STATE|DEPT|DOC|PAT|NUM$
if (data.startsWith("#") && data.endsWith("$")) {
data = data.substring(1, data.length() - 1);
int firstPipe = data.indexOf('|');
String cmd = data.substring(0, firstPipe);
if (cmd == "VOICE_OFF") {
digitalWrite(RELAY_PIN, LOW); // Ngắt nguồn P10
return;
} else if (cmd == "VOICE_ON") {
digitalWrite(RELAY_PIN, HIGH); // Bật nguồn P10
return;
}
// Tách chuỗi hiển thị
// Xử lý vẽ chữ lên buffer ma trận P10 và cập nhật LED 7 đoạn TM1637
// dmd.drawString(x, y, text, length, GRAPHICS_NORMAL);
}
}
3. Mã nguồn Backend PHP xử lý truyền thông Web Server
<?php
header('Content-Type: application/json; charset=utf-8');
require_once 'db_config.php';
// Endpoint cung cấp dữ liệu cho vi điều khiển ESP8266
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
$sql = "SELECT department_name, doctor_name, patient_name, patient_queue_num, system_status
FROM clinic_display ORDER BY id DESC LIMIT 1";
$result = $conn->query($sql);
if ($result && $result->num_rows > 0) {
$row = $result->fetch_assoc();
// Trả về định dạng chuỗi nén nhẹ cho ESP8266
echo json_encode([
"status" => "success",
"payload" => "#DATA:{$row['system_status']}|{$row['department_name']}|{$row['doctor_name']}|{$row['patient_name']}|{$row['patient_queue_num']}$"
]);
} else {
echo json_encode(["status" => "error", "message" => "No record found"]);
}
}
$conn->close();
?>
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Hệ thống đã trải qua quá trình kiểm thử tải và kiểm tra thực địa kéo dài 100 giờ hoạt động liên tục:
| Kịch bản kiểm thử |
Phương thức |
Cỡ mẫu (Lần test) |
Tỷ lệ thành công (%) |
Độ trễ trung bình (ms) |
| Cập nhật ký tự từ App Android |
Bluetooth SPP (Cự ly 5m) |
150 |
99.33% |
$145\text{ ms}$ |
| Cập nhật ký tự từ App Android |
Bluetooth SPP (Cự ly 10m) |
100 |
94.00% |
$280\text{ ms}$ |
| Đồng bộ dữ liệu bệnh nhân từ Web |
Wi-Fi 802.11 b/g/n (ESP8266) |
200 |
98.50% |
$820\text{ ms}$ |
| Bật/tắt qua Google Assistant |
IFTTT $\to$ OpenHAB $\to$ ESP8266 |
80 |
95.00% |
$1850\text{ ms}$ |
| Quét ma trận P10 chống rung chớp |
Ngắt Timer 1 (300Hz) |
72h liên tục |
100% (Không rớt khung) |
$3.33\text{ ms / frame}$ |
+-----------------------------------------------------------------------------+
| BIỂU ĐỒ PHÂN BỐ ĐỘ TRỄ HỆ THỐNG |
| |
| Bluetooth 5m [====] 145 ms |
| Bluetooth 10m [========] 280 ms |
| Wi-Fi Web Server [========================] 820 ms |
| Google Assistant [==================================================] 1850 ms |
+-----------------------------------------------------------------------------+
Kết quả đạt được so với mục tiêu ban đầu
- Về phần cứng: Hoàn thiện mô hình vật lý đóng khung gỗ chắc chắn kích thước $38\text{cm} \times 70\text{cm} \times 10\text{cm}$, mặt trước gắn 4 module P10 đỏ và cụm LED 7 đoạn TM1637, mặt sau bố trí bo mạch vi điều khiển, module hạ áp và bộ nguồn tổ ong 5V/10A có tấm che bảo vệ cách điện an toàn.
- Về công suất tiêu thụ:
- Chế độ hoạt động toàn tải (Sáng toàn bộ điểm LED và bật kết nối): $4.2\text{A} @ 5\text{VDC} \approx 21\text{W}$.
- Chế độ hiển thị tiêu chuẩn phòng khám (4 dòng chữ): $1.8\text{A} - 2.4\text{A} @ 5\text{VDC} \approx 9\text{W} - 12\text{W}$.
- Chế độ chờ (Tắt màn hình qua giọng nói Google Assistant, chỉ giữ nguồn MCU): $0.18\text{A} @ 5\text{VDC} \approx 0.9\text{W}$ (Tiết kiệm $\approx 92%$ năng lượng).
Đổi mới và đóng góp
- Kiến trúc điều khiển Hybrid Độc lập - Bổ trợ (Dual-tier Control):
- Hầu hết các hệ thống bảng thông báo trên thị trường chỉ dùng một đường truyền duy nhất. Đề tài kết hợp thành công cơ chế điều khiển nội bộ cự ly gần (Bluetooth) không phụ thuộc vào hạ tầng mạng Internet của bệnh viện (phục vụ ca cấp cứu, mất mạng) và cơ chế quản lý tập trung từ xa (Wi-Fi Web Server) phục vụ điều phối toàn viện.
- Tích hợp Trợ lý ảo Google Assistant vào Bảng thông báo Y tế:
- Đưa công nghệ tương tác giọng nói không chạm (Touchless/Hands-free Interaction) vào phòng khám. Bác sĩ có thể dùng khẩu lệnh đơn giản qua điện thoại hoặc loa thông minh ("Hey Google, turn off hospital board") để tắt thiết bị khi kết thúc ca trực mà không cần chạm tay vào công tắc điện, hỗ trợ kiểm soát nhiễm khuẩn trong môi trường bệnh viện.
- Tối ưu hóa chi phí phần cứng nhúng:
- Thay vì sử dụng các máy tính bảng đắt tiền (Industrial Panel PC hoặc Raspberry Pi có giá trên 4-6 triệu đồng), hệ thống tận dụng tối đa năng lực xử lý của vi điều khiển 8-bit ATmega2560 kết hợp chip SoC Wi-Fi giá rẻ ESP8266, giảm giá thành thiết bị xuống dưới 2 triệu đồng/bảng nhưng vẫn đảm bảo độ ổn định công nghiệp.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
- Phòng khám Ngoại trú (OPD): Đặt tại cửa mỗi phòng khám chuyên khoa. Bác sĩ hoặc y tá ngồi trong phòng chỉ cần bấm số thứ tự trên ứng dụng Android hoặc Web, bảng phía ngoài hành lang lập tức cập nhật tên bệnh nhân và số thứ tự, đồng thời nhấp nháy đèn báo.
- Quầy phát thuốc BHYT & Tiếp đón: Điều phối bệnh nhân theo số thứ tự nộp sổ, giảm triệt để tình trạng chen lấn, tranh chấp lượt khám.
- Khu vực phòng tiểu phẫu/phòng cấp cứu: Cập nhật nhanh chóng trạng thái phòng (Đang phẫu thuật / Trống / Khử trùng) qua kết nối Bluetooth tức thời.
+-------------------------------------------------------------------------------------+
| KỊCH BẢN TRIỂN KHAI TẠI PHÒNG KHÁM BỆNH |
| |
| [Bác sĩ trong phòng] |
| | |
| |---> Click "Gọi bệnh nhân kế tiếp" trên App/Web |
| | |
| v |
| [BẢNG THÔNG BÁO P10 NGOÀI HÀNH LANG] |
| +-----------------------------------------------------------------------------+ |
| | KHOA NOI TONG QUAT | |
| | BS: NGUYEN THANH HAI | |
| | BN: NGUYEN VAN A [SO THU TU: 0 1 0 5] | |
| | NGAY: 22/08/2026 | |
| +-----------------------------------------------------------------------------+ |
| | |
| v |
| [Bệnh nhân ngoài sảnh nhìn thấy rõ ràng từ khoảng cách 10m và bước vào phòng] |
+-------------------------------------------------------------------------------------+
Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis)
Ước tính chi phí sản xuất 01 cụm bảng thông báo (BOM - Bill of Materials):
- 04 Module LED Ma trận P10 Đỏ: 480.000 VNĐ
- 01 Bo mạch Arduino Mega 2560 R3: 220.000 VNĐ
- 01 Kit NodeMCU ESP8266 v1.0: 85.000 VNĐ
- 01 Module Bluetooth HC-06: 65.000 VNĐ
- 01 Module 4 LED 7 đoạn TM1637: 30.000 VNĐ
- 01 Bộ nguồn xung 5V - 10A: 160.000 VNĐ
- 01 Module Relay 5V cách ly + Phụ kiện/Khung: 350.000 VNĐ
- Mạch in PCB + Công hàn lắp ráp: 250.000 VNĐ
-------------------------------------------------------------
TỔNG CHI PHÍ PHẦN CỨNG: 1.640.000 VNĐ (~ 70 USD)
Với mức chi phí này, một bệnh viện quy mô 50 phòng khám chỉ cần đầu tư khoảng 80–90 triệu đồng, thấp hơn 65% so với việc trang bị hệ thống màn hình LCD và máy tính mini truyền thống, trong khi tuổi thọ của LED ma trận đạt trên 5–7 năm hoạt động liên tục.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Màu sắc và font chữ: Hệ thống sử dụng LED P10 đơn sắc (Màu đỏ), chưa hỗ trợ hiển thị đa màu (RGB) để phân loại mức độ khẩn cấp (như màu vàng cho cảnh báo, màu xanh cho bình thường).
- Bộ ký tự: Mới hỗ trợ hiển thị tiếng Việt không dấu do hạn chế về dung lượng mảng font bitmap 8x16 trong bộ nhớ SRAM của ATmega2560.
- Tính phụ thuộc đám mây: Tính năng điều khiển bằng Google Assistant bắt buộc phải có kết nối Internet thông qua máy chủ IFTTT và OpenHAB.
Hướng phát triển và mở rộng
- Nâng cấp vi điều khiển lên ESP32 Dual-Core: Chuyển đổi vi điều khiển trung tâm sang ESP32 (tích hợp sẵn cả Wi-Fi và Bluetooth BLE trên cùng một chip), chạy hệ điều hành thời gian thực FreeRTOS giúp giảm bớt số lượng linh kiện và hỗ trợ giải mã font tiếng Việt có dấu UTF-8 trực tiếp từ Flash.
- Nâng cấp module hiển thị sang LED P3/P4 RGB Full-Color: Cho phép hiển thị hình ảnh minh họa y tế, video tuyên truyền sức khỏe và phân biệt màu sắc hàng đợi cấp cứu.
- Tích hợp giao thức MQTT nội bộ: Thay thế cơ chế HTTP Polling bằng MQTT Broker (như Mosquitto) đặt trực tiếp tại mạng LAN bệnh viện, giảm độ trễ cập nhật xuống dưới $50\text{ ms}$ và tăng tính bảo mật cho hồ sơ bệnh án.
- Tích hợp Loa phát âm thanh tự động (Text-to-Speech): Tự động đọc tên bệnh nhân và số phòng khám mỗi khi bảng thông báo chuyển trạng thái.
Đối tượng hưởng lợi
- Sinh viên & Kỹ sư ngành Điện tử - Viễn thông, IoT: Là tài liệu tham khảo thực tế về kỹ thuật ghép nối ngoại vi, quét LED ma trận P10 bằng ngắt Timer, giao tiếp UART đa kênh trên vi điều khiển và phương pháp tích hợp nền tảng nhà thông minh (OpenHAB/IFTTT/Google Assistant).
- Lập trình viên Nhúng & Ứng dụng: Tham khảo mã nguồn giao tiếp Bluetooth SPP trên Android Studio và kỹ thuật xây dựng API PHP/MySQL tương tác nhẹ với phần cứng IoT.
- Nhà quản lý bệnh viện & Cơ sở y tế: Giải pháp tự động hóa chi phí thấp, triển khai nhanh chóng để nâng cao chỉ số hài lòng của bệnh nhân và hiện đại hóa quy trình khám chữa bệnh.
- Nhà nghiên cứu hệ thống Y tế thông minh: Cung cấp số liệu thực nghiệm về độ trễ truyền thông không dây lai và độ tin cậy của phần cứng trong môi trường nhiễu công nghiệp/bệnh viện.
Câu hỏi thường gặp
1. Yêu cầu kỹ thuật hạ tầng để triển khai hệ thống bảng thông báo này là gì?
Hệ thống chỉ yêu cầu nguồn điện lưới dân dụng $220\text{VAC}/50\text{Hz}$ (được hạ áp về 5VDC qua nguồn tổ ong) và sóng Wi-Fi băng tần $2.4\text{GHz}$ có kết nối Internet (nếu dùng chế độ quản lý từ xa qua Web và Google Assistant). Nếu mạng Internet gặp sự cố, hệ thống vẫn hoạt động hoàn toàn bình thường thông qua kết nối Bluetooth cục bộ từ smartphone của nhân viên y tế.
2. Hệ thống có thể mở rộng kích thước hiển thị lớn hơn 4 tấm LED P10 được không?
Hoàn toàn có thể. Do sử dụng IC ghi dịch 74HC595 mắc nối tiếp, vi điều khiển ATmega2560 có thể mở rộng điều khiển lên đến 8 hoặc 16 tấm P10 (kích thước $64\text{cm} \times 128\text{cm}$ hoặc lớn hơn) bằng cách tăng kích thước bộ đệm DMD trong mã nguồn và tính toán nâng công suất bộ nguồn 5VDC tương ứng (mỗi tấm P10 tiêu thụ dòng tối đa khoảng $2.5\text{A} - 4\text{A}$ khi sáng 100% điểm LED).
3. Làm thế nào để tích hợp bảng thông báo này vào phần mềm quản lý bệnh viện (HIS/EMR) có sẵn?
Bảng thông báo nhận dữ liệu thông qua chuẩn Web API JSON/RESTful đơn giản. Đội ngũ IT của bệnh viện chỉ cần cấu hình phần mềm HIS gửi một HTTP POST request chứa tên bệnh nhân và số thứ tự tới endpoint API của hệ thống mỗi khi bác sĩ bấm nút "Khám tiếp" trên phần mềm quản lý phòng khám.
4. Chi phí bảo trì và độ bền linh kiện trong môi trường bệnh viện ra sao?
Bóng LED P10 DIP346 có tuổi thọ trung bình $\ge 50.000\text{ giờ}$ (tương đương hơn 6 năm hoạt động $24/7$). Các linh kiện bán dẫn như ATmega2560 và ESP8266 là linh kiện thể rắn (Solid-state) không có chi tiết chuyển động cơ học nên tỷ lệ hỏng hóc rất thấp. Chi phí thay thế module P10 nếu phát sinh điểm chết chỉ khoảng $120.000\text{ VNĐ/tấm}$.
5. Tại sao không dùng trực tiếp Raspberry Pi để hiển thị mà lại kết hợp Arduino Mega và ESP8266?
Raspberry Pi có giá thành cao (gấp 3–4 lần bộ đôi Arduino + ESP), thời gian khởi động lâu (30–60 giây), dễ lỗi thẻ nhớ khi mất điện đột ngột và chạy hệ điều hành Linux (không phải Real-Time OS) nên việc quét trực tiếp chân GPIO điều khiển LED ma trận P10 dễ bị giật/chớp khi CPU xử lý tác vụ nền. Bộ đôi ATmega2560 + ESP8266 mang lại độ ổn định tuyệt đối về mặt quét tần số hiển thị, khởi động tức thì trong $0.5\text{ giây}$ và tiết kiệm chi phí tối đa.
Kết luận
Đề tài “Thiết kế và thi công hệ thống bảng thông báo trong bệnh viện hỗ trợ Google Assistant” đã giải quyết thành công bài toán tự động hóa hiển thị thông tin y tế với chi phí tối ưu và độ tin cậy cao. Bằng việc kết hợp hài hòa giữa phần cứng nhúng công nghiệp (Arduino Mega 2560, LED Matrix P10, TM1637) và các công nghệ không dây hiện đại (Bluetooth, Wi-Fi ESP8266, Web Server, IFTTT, Google Assistant), mô hình không chỉ đáp ứng tốt các yêu cầu hiển thị trực quan, phân luồng bệnh nhân nhanh chóng mà còn đón đầu xu hướng điều khiển rảnh tay trong các môi trường y tế thông minh. Kết quả thực nghiệm là minh chứng rõ ràng cho tính khả thi, độ ổn định và tiềm năng nhân rộng của giải pháp tại các cơ sở khám chữa bệnh trên toàn quốc.