Giới thiệu dự án

Theo thống kê của Tổ chức Y tế Thế giới (WHO), các bệnh lý tim mạch và tăng huyết áp là nguyên nhân gây tử vong hàng đầu toàn cầu, ảnh hưởng đến hơn 1,28 tỷ người trưởng thành. Việc theo dõi chỉ số huyết áp thường xuyên đóng vai trò then chốt trong chẩn đoán sớm và phòng ngừa các biến chứng nguy hiểm như đột quỵ hay nhồi máu cơ tim. Tuy nhiên, các phương pháp đo truyền thống tại cơ sở y tế thường gặp phải hiện tượng "tăng huyết áp áo choàng trắng" (white-coat hypertension) và không cung cấp được dữ liệu liên tục theo thời gian thực.

Vấn đề cốt lõi (Problem Statement) mà đề tài giải quyết là sự thiếu hụt các thiết bị đo huyết áp cá nhân có chi phí thấp, vận hành tự động và tích hợp khả năng truyền - lưu trữ dữ liệu y tế từ xa (Telemedicine). Đa số máy đo huyết áp điện tử thương mại trên thị trường hoạt động độc lập, không tự động đồng bộ hóa lịch sử đo về máy chủ trung tâm hoặc đòi hỏi hạ tầng kết nối phức tạp, đắt đỏ.

Mục tiêu cụ thể của dự án:

  1. Thiết kế và chế tạo phần cứng máy đo huyết áp bắp tay tự động dựa trên vi điều khiển ATmega328P (Arduino Nano V3.0) và cảm biến áp suất dải rộng MPX5050GP (0 - 50 kPa).
  2. Xây dựng thuật toán xử lý tín hiệu áp suất, tự động đóng ngắt động cơ bơm khí và van xả điện từ để xác định chính xác huyết áp tâm thu (Systolic Blood Pressure - SBP), huyết áp tâm trương (Diastolic Blood Pressure - DBP) và huyết áp trung bình (Mean Arterial Pressure - MAP).
  3. Tích hợp module thời gian thực RTC DS1307 và màn hình hiển thị OLED SH1106 (128x64 pixels) giao tiếp I2C hiển thị thông số trực quan.
  4. Phát triển giải pháp truyền thông không dây qua Module WiFi ESP8266, đẩy dữ liệu tự động lên đám mây thông qua ThingSpeak (ThingHTTP) và đồng bộ vào Google Sheets, hiển thị trên ứng dụng Android (AppSheet) và Web Dashboard.

Giải pháp được lựa chọn kết hợp nguyên lý dao động kế (Oscillometric method) và phương pháp Korotkoff, tận dụng nền tảng vi xử lý mã nguồn mở giúp giảm giá thành phần cứng xuống dưới 30 USD trong khi vẫn đảm bảo độ tin cậy y sinh với sai số trong ngưỡng cho phép ($\pm 3$ mmHg đến $\pm 5$ mmHg).

Phạm vi và giới hạn của đề tài:

  • Thiết bị dạng hộp điều khiển cầm tay kích thước $11 \times 8 \times 5\text{ cm}$, sử dụng nguồn 4 pin AA 1.5V (800 mAh có thể sạc).
  • Đo huyết áp gián tiếp qua vòng bít bắp tay (cuff), ngưỡng áp suất bơm tối đa định mức 170 mmHg.
  • Hệ thống yêu cầu môi trường mạng WiFi chuẩn 802.11 b/g/n băng tần 2.4 GHz để đồng bộ dữ liệu đám mây.

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

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

Tiêu chí Huyết áp kế thủy ngân (Cổ điển) Máy đo điện tử độc lập (Omron/Microlife) Hệ thống IoT Arduino (Đề tài)
Cơ chế đo Thủ công (Ống nghe Korotkoff + Cột thủy ngân) Tự động (Cảm biến áp suất số) Tự động (MPX5050GP + Bơm/Van xả điện từ)
Độ tiện dụng Phức tạp, cần nhân viên y tế thao tác Đơn giản, người dùng tự thao tác Đơn giản (1 nút nhấn khởi động đo)
Lưu trữ dữ liệu Ghi chép sổ tay thủ công Bộ nhớ cục bộ (30 - 100 bản ghi) Lưu trữ không giới hạn trên Cloud (Google Sheets)
Giám sát từ xa Không hỗ trợ Không hỗ trợ (hoặc qua Bluetooth giá cao) Tự động đồng bộ WiFi lên Web Dashboard & Android App
Chi phí chế tạo Trung bình ($40 - $70) Cao ($50 - $120) Thấp ($25 - $30)

Yêu cầu kỹ thuật theo mô hình MoSCoW:

  • Must have: Đo chính xác SBP, DBP, MAP; đóng mở bơm/van xả theo ngưỡng áp suất; hiển thị màn hình OLED; lưu trữ thời gian thực (RTC).
  • Should have: Tự động kết nối WiFi qua ESP8266 và gửi dữ liệu lên ThingSpeak / Google Sheets qua giao thức HTTP; ứng dụng Android giám sát.
  • Could have: Cảnh báo ngưỡng huyết áp cao/thấp trực tiếp bằng còi báo buzzer; chức năng vẽ biểu đồ trực quan trên di động.
  • Won't have (lần này): Kết nối Bluetooth Low Energy (BLE), phân tích AI chẩn đoán bệnh lý tim mạch nâng cao.

Thách thức kỹ thuật chính: Xử lý nhiễu tín hiệu tương tự (Analog noise) từ cảm biến áp suất do rung động cơ học của động cơ bơm; sụt áp tức thời khi khởi động tải cảm ứng (động cơ DC 6V, van điện từ); và giải quyết xung đột mức logic giữa Arduino Nano (5V) và ESP8266 (3.3V).

Thiết kế hệ thống

Kiến trúc phần cứng và luồng dữ liệu hệ thống:

+-------------------------------------------------------------------------------+
|                             HỆ THỐNG PHẦN CỨNG                                 |
|                                                                               |
|  [Cảm biến MPX5050GP] ----(Analog A0)----+                                    |
|                                          |                                    |
|  [RTC DS1307 (32.768kHz)] --(I2C: A4/A5)-+---> [Arduino Nano]                 |
|                                          |     (ATmega328P @ 16MHz)           |
|  [OLED 0.96" SH1106] ------(I2C: A4/A5)-+      |            |                 |
|                                                |            |                 |
|  [Nút nhấn: Đo / Send] --(Digital D5/D7)-------+            |                 |
|                                                             |                 |
|  [Driver IC ULN2803] <---(Digital D14/D15)------------------+                 |
|         |                                                   |                 |
|         +---> [Bơm DC 6V] & [Van xả Solenoid]               | (UART: D11/D12) |
+-------------------------------------------------------------|-----------------+
                                                              v
                                                    [Module WiFi ESP8266]
                                                              | (802.11 b/g/n)
                                                              v
+-------------------------------------------------------------------------------+
|                             HẠ TẦNG ĐÁM MÂY & ỨNG DỤNG                         |
|                                                                               |
|  [ThingSpeak Platform] ---> [ThingHTTP Gateway] ---> [Google Spreadsheet]     |
|                                                             |                 |
|                                                             v                 |
|                                                    [AppSheet Android App]     |
|                                                    [Web Browser Dashboard]    |
+-------------------------------------------------------------------------------+

Stack công nghệ chi tiết:

  • Vi điều khiển: Atmel ATmega328P 8-bit RISC, tần số 16 MHz, 32KB Flash, 2KB SRAM, 1KB EEPROM, 8 kênh ADC 10-bit.
  • Cảm biến áp suất: Freescale MPX5050GP (0 – 50 kPa / 0 – 375 mmHg), độ nhạy $90\text{ mV/kPa}$, điện áp ngưỡng 4.5V, thời gian đáp ứng $1.0\text{ ms}$.
  • IC điều khiển công suất: ULN2803 (mảng 8 cặp Transistor Darlington cực góp hở tích hợp diode triệt tiêu xung ngược, chịu dòng tối đa $500\text{ mA/kênh}$, điện áp 50V).
  • Module truyền thông: AI-Thinker ESP8266-01 (WiFi 2.4 GHz, WPA/WPA2, tập lệnh AT Command qua UART, tốc độ baud 9600/115200 bps).
  • Mạch nguồn: 4 cell pin AA NiMH nối tiếp ($6\text{V}$, dung lượng $800\text{ mAh}$), qua IC ổn áp tuyến tính AMS1117-3.3V cấp riêng cho ESP8266.
  • Phần mềm & Nền tảng: Arduino IDE 1.8.x, Thư viện Wire.h, Adafruit_GFX / Adafruit_SH1106, RTClib, ThingSpeak API, Google Forms/Spreadsheet, AppSheet Platform.

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

Tên trường Kiểu dữ liệu Mô tả Ví dụ
Timestamp DateTime Thời gian ghi nhận từ RTC DS1307 2026-08-20 09:30:15
Device_ID String Mã định danh phần cứng máy đo AGY-BP-001
Systolic Integer Huyết áp tâm thu (mmHg) 118
Diastolic Integer Huyết áp tâm trương (mmHg) 78
MAP Float Huyết áp trung bình tính toán (mmHg) 91.33
Status String Đánh giá phân loại theo chuẩn y tế Bình thường (Normal)

Methodology

Quy trình phát triển áp dụng mô hình V-Model cải tiến, kết hợp giữa thiết kế phần cứng tuyến tính và phát triển phần mềm lặp (iterative prototyping):

  1. Giai đoạn 1 (Tuần 1 - 3): Khảo sát lý thuyết đo huyết áp Oscillometric/Korotkoff, tính toán điện áp tham chiếu ADC, thiết kế sơ đồ nguyên lý mạch (Schematic) trên Altium Designer.
  2. Giai đoạn 2 (Tuần 4 - 6): Thi công bo mạch in (PCB Layout), hàn gắn linh kiện dán SMD và linh kiện xuyên lỗ DIP, lập trình driver giao tiếp I2C cho DS1307 và màn hình OLED.
  3. Giai đoạn 3 (Tuần 7 - 9): Phát triển thuật toán điều khiển động cơ bơm, van xả và bộ lọc số tín hiệu ADC cảm biến áp suất; thiết lập cầu nối truyền nhận ESP8266 UART sang ThingHTTP.
  4. Giai đoạn 4 (Tuần 10 - 12): Kiểm chuẩn sai số với huyết áp kế chuẩn y tế, đóng gói vỏ hộp cơ khí $11 \times 8 \times 5\text{ cm}$, phát triển giao diện người dùng trên AppSheet và nghiệm thu hệ thống.

Ma trận quản trị rủi ro kỹ thuật:

  • Rủi ro sụt áp reset vi điều khiển khi bật bơm: Giải quyết bằng cách bố trí tụ lọc nguồn hóa $100\mu\text{F}$ song song tụ gốm $0.1\mu\text{F}$ tại chân nguồn vi điều khiển và tải động cơ.
  • Rủi ro mất gói tin khi truyền WiFi: Bổ sung cơ chế timeout 4000ms, retry tối đa 3 lần và lưu trữ đệm biến tạm thời trong RAM vi điều khiển trước khi gửi thành công.

Implementation và kết quả

Development process

Quá trình thi công phần cứng tối ưu hóa diện tích bo mạch 2 lớp (Double-layer PCB). Khối công suất điều khiển bơm/van sử dụng ULN2803 được cách ly đường mass tín hiệu analog để giảm thiểu hiện tượng nhiễu vòng lặp mass (ground loop noise).

Thuật toán chuyển đổi tín hiệu áp suất: Điện áp ngõ ra từ cảm biến $V_{out}$ đưa vào chân Analog A0 của ATmega328P với bộ chuyển đổi ADC 10-bit ($2^{10} - 1 = 1023$), điện áp tham chiếu $V_{REF} = 5000\text{ mV}$. Độ nhạy MPX5050GP là $90\text{ mV/kPa}$, hệ số quy đổi đơn vị $1\text{ kPa} = 7.5061\text{ mmHg}$.

Công thức toán học tính áp suất tức thời: $$P\ (\text{mmHg}) = \frac{\text{ADC_Value} \times 5000 \times 7.5061}{1023 \times 90}$$

Công thức tính huyết áp trung bình (MAP): $$\text{MAP} = \frac{2 \times \text{DBP} + \text{SBP}}{3}$$

Snippet triển khai thuật toán đọc lọc nhiễu trung bình (10-point moving average filter) và tính toán huyết áp:

#include <Wire.h>
#include <SoftwareSerial.h>
#include "RTClib.h"
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>

#define SENSOR_PIN A0
#define MOTOR_PIN 15
#define VALVE_PIN 14
#define BTN_START 5
#define BTN_SEND  7

SoftwareSerial espSerial(11, 12); // RX, TX
RTC_DS1307 rtc;
Adafruit_SH1106 display(4);

int readFilteredPressure() {
  long sum = 0;
  for (int i = 0; i < 10; i++) {
    sum += analogRead(SENSOR_PIN);
    delay(2); // Giảm nhiễu chuyển mạch ADC
  }
  float avgRaw = (float)sum / 10.0;
  // Áp dụng công thức chuyển đổi từ điện áp sang mmHg
  float pressureMmHg = (avgRaw * 5000.0 * 7.5061) / (1023.0 * 90.0);
  return (int)pressureMmHg;
}

void sendDataToCloud(int sbp, int dbp, float mapVal) {
  espSerial.println("AT+CIPSTART=\"TCP\",\"api.thingspeak.com\",80");
  if (espSerial.find("OK")) {
    String postStr = "GET /apps/thinghttp/send_data?api_key=YOUR_API_KEY";
    postStr += "&field1=" + String(sbp);
    postStr += "&field2=" + String(dbp);
    postStr += "&field3=" + String(mapVal);
    postStr += "\r\n\r\n";

    String sendCmd = "AT+CIPSEND=" + String(postStr.length());
    espSerial.println(sendCmd);
    delay(100);
    if (espSerial.find(">")) {
      espSerial.print(postStr);
      delay(4000); // Chờ ThingHTTP xử lý chuyển tiếp sang Google Spreadsheet
    }
    espSerial.println("AT+CIPCLOSE");
  }
}

Testing và validation

Hệ thống được thử nghiệm thực nghiệm qua 30 chu kỳ đo liên tục trên các tình nguyện viên ở các độ tuổi khác nhau, đối chiếu trực tiếp với máy đo huyết áp điện tử bắp tay Omron HEM-7120 đã qua kiểm định y tế.

Kết quả đo đạc và kiểm chuẩn:

Thông số kiểm tra Thiết bị tham chiếu (Omron) Thiết bị Arduino (Thực nghiệm) Độ lệch trung bình Độ lệch tương đối (%)
Huyết áp tâm thu (SBP) $120.4\text{ mmHg}$ $124.2\text{ mmHg}$ $+3.8\text{ mmHg}$ $3.15%$
Huyết áp tâm trương (DBP) $78.6\text{ mmHg}$ $81.5\text{ mmHg}$ $+2.9\text{ mmHg}$ $3.68%$
Thời gian đo trung bình $38\text{ giây}$ $42\text{ giây}$ $+4.0\text{ giây}$ $10.5%$
Độ trễ truyền WiFi Cloud N/A $3.82\text{ giây}$ N/A Độ tin cậy gói tin $98.6%$

Dòng điện và công suất tiêu thụ của hệ thống:

  • Trạng thái chờ (OLED + RTC + Vi điều khiển): $5\text{V} \times 140\text{ mA} = 0.70\text{ W}$.
  • Trạng thái bơm khí (Motor DC 6V + Van điện từ + MCU): $6\text{V} \times 470\text{ mA} = 2.82\text{ W}$.
  • Trạng thái phát WiFi (ESP8266 truyền dữ liệu đỉnh): $3.3\text{V} \times 300\text{ mA} = 0.99\text{ W}$.
  • Bộ nguồn pin 4 cell AA 800 mAh đáp ứng liên tục hơn 50 lần đo hoàn chỉnh trước khi cần sạc lại.

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

  1. Kiến trúc phần cứng tối ưu chi phí thấp: Kết hợp cảm biến công nghiệp MPX5050GP độ nhạy cao với vi điều khiển ATmega328P giá rẻ, sử dụng IC đệm ULN2803 thay thế các khối rơ-le cơ học cồng kềnh, giảm 65% chi phí sản xuất phần cứng so với các thiết bị đo huyết áp thông minh thương mại.
  2. Chuỗi cung ứng dữ liệu đám mây phi máy chủ (Serverless IoT Data Pipeline): Đề xuất mô hình chuyển tiếp dữ liệu trung gian thông minh: ESP8266 -> ThingSpeak (ThingHTTP) -> Google Sheets -> AppSheet. Mô hình này hoàn toàn miễn phí, loại bỏ nhu cầu thuê máy chủ backend chuyên dụng, đơn giản hóa tối đa quy trình bảo trì cho người dùng phổ thông.
  3. Đa dạng hóa giao diện giám sát: Người dùng có thể xem kết quả trực tiếp tại chỗ trên màn hình OLED độ tương phản cao, hoặc theo dõi biểu đồ xu hướng dài hạn qua ứng dụng Android AppSheet và giao diện Web thời gian thực.

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

  • Bệnh viện và Phòng khám vệ tinh: Tự động hóa quá trình ghi nhận chỉ số sinh tồn của bệnh nhân tại buồng bệnh, hỗ trợ điều dưỡng cập nhật trực tiếp vào bệnh án điện tử mà không cần nhập liệu thủ công.
  • Chăm sóc sức khỏe gia đình cho người cao tuổi: Con cái hoặc bác sĩ gia đình có thể theo dõi biến thiên huyết áp của người thân từ xa theo thời gian thực qua điện thoại thông minh; hệ thống phát cảnh báo khi chỉ số vượt ngưỡng nguy hiểm ($>140/90\text{ mmHg}$).

Hướng dẫn triển khai hệ thống:

  1. Thiết lập kết nối: Cấp nguồn hệ thống bằng 4 pin AA hoặc adapter $5\text{V}-2\text{A}$.
  2. Cấu hình mạng: Thiết lập SSID và Password WiFi gia đình cố định cho firmware ESP8266.
  3. Thao tác đo: Quấn vòng bít bắp tay ngang vị trí tim, cách nếp gấp khuỷu tay 1-2 cm. Nhấn nút "Huyết áp" (Pin D5) để máy tự động bơm khí và đo đạc.
  4. Đồng bộ: Nhấn nút "Send" (Pin D7) sau khi quá trình đo hoàn tất để đẩy dữ liệu lên máy chủ.

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

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

  • Dung lượng pin $800\text{ mAh}$ còn hạn chế do dòng tiêu thụ của khối động cơ bơm và module ESP8266 tương đối lớn trong chu kỳ hoạt động.
  • Dễ bị nhiễu do cử động (Motion artifacts) nếu người đo di chuyển cánh tay trong quá trình xả van lấy áp suất.
  • Module ESP8266 thế hệ cũ chưa hỗ trợ cấu hình SmartConfig/BLE trực tiếp từ điện thoại.

Hướng phát triển trong tương lai:

  • Nâng cấp vi điều khiển trung tâm lên dòng SoC tích hợp ESP32, hỗ trợ đồng thời WiFi và Bluetooth Low Energy 5.0, tích hợp chế độ ngủ sâu (Deep Sleep) giảm dòng chờ xuống dưới $15\mu\text{A}$.
  • Tích hợp thêm cảm biến quang học PPG (như MAX30102) để đo đồng thời nhịp tim, nồng độ oxy trong máu ($SpO_2$) và áp dụng thuật toán học máy (Machine Learning) ước tính độ xơ cứng động mạch.

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

  • Sinh viên & Nghiên cứu sinh: Nguồn tài liệu thực nghiệm giá trị về thiết kế thiết bị y sinh nhúng, xử lý tín hiệu analog từ cảm biến áp suất và kỹ thuật tích hợp truyền thông IoT.
  • Kỹ sư nhúng & Nhà phát triển: Cung cấp kiến trúc mẫu hoàn chỉnh kết hợp vi điều khiển 8-bit với module WiFi, kỹ thuật lọc số và các giao thức điều khiển ngoại vi I2C/UART/PWM.
  • Cơ sở y tế & Doanh nghiệp Telehealth: Giải pháp tham khảo với chi phí sản xuất thấp, dễ dàng nhân rộng quy mô triển khai cho các dự án y tế cộng đồng và chăm sóc sức khỏe ban đầu.

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

  1. Yêu cầu phần cứng và phần mềm để triển khai lại dự án này là gì? Hệ thống yêu cầu bo mạch Arduino Nano V3.0 (ATmega328P), cảm biến MPX5050GP, module ESP8266-01, IC RTC DS1307, IC ULN2803, màn hình OLED SH1106, động cơ bơm 6V và van xả solenoid. Về phần mềm, cần môi trường Arduino IDE 1.8.x cùng các thư viện chuẩn Wire, SoftwareSerial, RTClib và tài khoản miễn phí trên ThingSpeak, Google Drive.

  2. Độ chính xác của thiết bị so với thiết bị y tế chuyên dụng như thế nào? Thực nghiệm 30 lần đo đối chứng với máy đo Omron tiêu chuẩn cho thấy sai số trung bình của thiết bị đạt $+3.8\text{ mmHg}$ đối với huyết áp tâm thu ($3.15%$) và $+2.9\text{ mmHg}$ đối với huyết áp tâm trương ($3.68%$), nằm trong ngưỡng chấp nhận được đối với thiết bị theo dõi sức khỏe cá nhân.

  3. Làm thế nào để cấu hình lại WiFi cho thiết bị khi thay đổi mạng? Trong phiên bản hiện tại, thông tin SSID/Password WiFi được nạp tĩnh trong mã nguồn vi điều khiển. Để đổi mạng, người dùng kết nối cổng Mini-USB với máy tính và cập nhật tham số mạng qua Arduino IDE hoặc cấu hình lại qua tập lệnh AT Command.

  4. Hệ thống xử lý vấn đề sụt áp và nhiễu từ động cơ bơm như thế nào? Mạch sử dụng IC đệm công suất ULN2803 với diode triệt tiêu dòng cảm ứng ngược từ cuộn dây động cơ và van điện từ. Đồng thời, đường nguồn cấp được phân tách độc lập qua IC ổn áp AMS1117-3.3V và hệ thống tụ gốm/tụ hóa lọc nhiễu tần số cao.

  5. Chi phí sản xuất một thiết bị là bao nhiêu và thời gian hoàn vốn (ROI) thế nào? Tổng chi phí linh kiện phần cứng (BOM) khoảng $25 - $30 USD. So với việc mua máy đo thông minh thương mại có tính năng truyền dữ liệu đám mây (giá từ $80 - $150 USD), thiết bị giúp tiết kiệm hơn $60%$ chi phí đầu tư ban đầu, mang lại hiệu quả kinh tế rõ rệt khi triển khai diện rộng.


Kết luận

Đề tài "Hệ thống đo đạc, theo dõi huyết áp cơ thể sử dụng kit Arduino" đã nghiên cứu, thiết kế và thi công thành công một giải pháp thiết bị y tế cá nhân toàn diện, kết hợp chặt chẽ giữa kỹ thuật điện tử nhúng và công nghệ truyền thông IoT. Hệ thống đáp ứng đầy đủ các tiêu chuẩn kỹ thuật đề ra: đo đạc tự động, hiển thị thời gian thực chính xác, điều khiển bơm - xả khí an toàn và đồng bộ dữ liệu liên tục lên đám mây phục vụ giám sát y tế từ xa. Dự án khẳng định tính khả thi cao trong việc ứng dụng các nền tảng phần cứng mã nguồn mở chi phí thấp vào giải quyết các bài toán chăm sóc sức khỏe cộng đồng thiết thực và bền vững.