Tại Project Manager các bạn đặt tên Project, nơi lưu trữ (lưu ý không sử dụng Tiếng Việt có dấu), và chọn Toolchain /IDE là MDK-ARM V5 nếu các bạn sử dụng Keil C IDE để code và debug. Sau khi cấu hình xong, các bạn bấm vào GENERATE CODE để sinh code. Sau khi đã sinh code thì sẽ có thơng báo các bạn Open Project. Lúc này Project sẽ được mở lên ở phần mềm Keil C với đầy đủ các cấu hình mà bạn đã thực hiện.
Hình 4. 15. Lưu thơng tin project và sinh code.
Sau khi cấu hình, sinh code từ phần mềm STM32CubeMX và mở Project Keil C, các bạn mở file main.c tại mục Application/User.
Các bạn nhấn vào biểu tượng Option for Target hoặc Project ➔ Option for Target để thực hiện 1 số cấu hình:
Tại cửa sổ Option for Target, các bạn chọn thẻ Debug và tick chọn Use ST-Link Debugger, để nạp chương trình xuống kit (nếu chọn Use Simulator thì sẽ ở chế độ mô phỏng).
Nhấn vào Settings tại Use: ST-Link Debugger, cửa sổ Cortex-M Target Driver Setup, các bạn chọn thẻ Flash Download, tại đây nếu tick chọn Reset and Run thì ngay sau khi nạp, chương trình sẽ chạy ngay. Nếu khơng tick chọn thì các bạn nạp code xong, nhấn vào nút reset trên board mạch thì chương trình mới chạy.
Hình 4. 17. Cấu hình cho mạch reset.
Cuối cùng có các biểu tượng Build (F7) để compile chương trình và Load (F8) để nạp chương trình.
Hình 4. 18. Tiến hành compile và nạp chương trình..
4.4. VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG
Bước 1: Cấm dây nguồn 5v từ nguồn Pin vào hệ thống. Lưu ý: Không được sử
dụng nguồn xung để cấp nguồn cho hệ thống, nguồn sẽ gây nhiễu cho mạch ECG và không thể đo ra kết quả chính xác.
Bước 2: Quan sát màn hình khởi động lên giao diện chính của hệ thống, đợi
cho cảm biến sáng lên tức là khi đó khởi động xong.
Bước 3: Gắn các điện cực lên cơ thể theo đạo trình mong muốn, đeo đầu dị
SpO2 vào đầu ngón tay trỏ.
Bước 4: Quan sát kết quả đo trên LCD và đồng thời có thể vào trang web có
CHƯƠNG 5: KẾT QUẢ THỰC TẾ
5.1. KẾT QUẢ ĐẠT ĐƯỢC TRONG QUÁ TRÌNH THỰC HIỆN
Nhờ các kiến thức đã tiếp thu được trong quá trình học tập tại trường cùng các kiến thức mà nhóm em tự mày mị, nghiên cứu từ các tài liệu chuyên ngành bằng tiếng Anh dưới sự hướng dẫn của thầy Võ Đức Dũng. Nhóm chúng em đã hoàn thành được đồ án tốt nghiệp với đề tài “THIẾT KẾ VÀ THI CÔNG MÁY ĐO ĐIỆN
TÂM ĐỒ ECG”. Sau quá trình thực hiện đề tài đồ án, nhóm chúng em đã nghiên
cứu và tích lũy được một số kiến thức mới như sau:
- Tìm hiểu được sâu về dịng vi điều khiển 32bit STM32F4, biết sử dụng các trình biên dịch, soạn thảo và các cơng cụ nạp chương trình thích hợp cho dịng vi điều khiển này.
- Nghiên cứu, tìm hiểu và nắm bắt được nguyên lý, hoạt động của bộ ngoại vi FSMC có trên dịng Vi điều khiển STM32F4, rất thích hợp để sử dụng cho các ứng dụng cần mở dụng bộ nhớ RAM cho Vi điều khiển và tiện dụng cho việc điều khiển LCD ở tốc độ cao.
- Nghiên cứu, tìm hiểu và nắm bắt được nguyên lý đo nhịp tim, SpO2 bằng phương pháp quang học và đo điện tâm đồ bằng cách đo lường, vẽ lại đồ thị về sự thay đổi điện áp ở các vị trí xác định trên cơ thể.
- Nghiên cứu, nắm rõ được nguyên lý của các dòng LCD, cấu tạo chung và phương thức điều khiển cho hầu hết các loại LCD kích thước lớn, độ phân giải cao. Nắm bắt được phương pháp lập trình để vẽ nên các đối tượng hình học cơ bản cho LCD từ đó phát triển đồ họa lên mức cao.
- Nghiên cứu và biết cách tạo ra một web server trên ESP8266, các kiến thức cơ bản về HTML, CSS, ...
- Nghiên cứu và biết sử dụng các công cụ vẽ 2D, 3D ở mức độ cơ bản bằng CorelDraw, SketUp.
Hình 5. 1. Hệ thống lắp đặt hồn chỉnh.
Tất cả các phần cứng module được kết nối lên board điều khiển trung tâm (Board xanh lá).
➢ Tiến hành đo:
Module nguồn LM317 Module nguồn AMS117
Module ECG AD8232
Board điều khiển LCD sử dụng driver RA8875 Board xử lý trung tâm
Module Esp8266 nodeMCU v1.0
- Đặt tay vào đầu dò cảm biến để tiến hành đo SpO2:
Hình 5. 2. Đầu dị cảm biến đo SpO2.
Chú thích:
o Khi đo SpO2, cơ thể nên giữ yên không hoạt động, đi lại, quơ tay, lắc cổ,.. vì các hành động của cơ thể sẽ thay đổi huyết áp, tuy rất nhỏ nhưng cũng đủ làm nhiễu đến tín hiệu mà cảm biến đọc được.
o Đặt tay ngay thẳng vào đầu dò, xoay mặt da ở đầu ngón tay vào cảm biến - Dán các điện cự lên đạo trình mong muốn đo
Hình 5. 3. Điện cực được dán lên cơ thể ở đạo trình Lead II (RA, LA, RL).
Đầu dị tín hiệu SpO2 Tay người Điện cực Cơ thể người
Chú thích:
o Khi dán các điện cực, cần đảm bảo độ dính và tiếp xúc của các điện cực lên cơ thể.
o Cách ly cơ thể với các nguồn điện xung quanh có thể gây nhiễu bằng các không cầm nắm, sờ vào bất kì dụng cụ, thiết bị điện, điện tử nào đặc biệt là các thiết bị có xử dụng nguồn xung và tốt nhất là nằm trên giường khi đo đạt.
- Tiến hành theo dõi kết quả đo đạt được trên LCD:
Hình 5. 4. Kết quả đo ecg Lead II, nhị tim và SpO2 trên màn hình LCD. Tín hiệu Tín hiệu ECG Nhịp tim đo được Nồng độ SpO2 đo được Đồ thị hấp thụ quang
- Theo dõi kết quả từ xa thông qua web server được đặt trên Esp8266:
Hình 5. 5. Kết quả đo đạt trên web server.
Kết quả hiển thị số nhịp tim trên phút và SpO2 đo đạt được trên webserver, tốc độ làm tươi kết quả trên web là rất nhanh hoàn toàn đáp ứng được yêu cầu về tốc độ
5.2. KẾT QUẢ ĐO TRÊN THIẾT BỊ CHUẨN Y KHOA
- Dạng sóng ECG từ thiết bị chuẩn:
Hình 5. 6. Dạng sóng ecg Lead II đo được từ máy chuẩn y khoa. Dạng sóng ECG của
đạo trình Lead I
Dạng sóng ECG của đạo trình Lead II
Dạng sóng ECG của đạo trình Lead III
Nhận xét: So sánh với dạng sóng ECG từ hệ thống của nhóm tự thiết kế và thiết
bị chuẩn tương đối giống nhau về tỉ lệ đỉnh các đỉnh sóng, tỉ về về thời gian các phức bộ PQRST, cho thấy thiết kế của nhóm đã hồn tồn đáp ứng được về độ chính xác
- Các kết quả, số liệu chi tiết của nhịp tim và SpO2
-
Hình 5. 7. Kết quả 1 nhịp tim và nồng độ SpO2 đo được từ máy chuẩn y khoa. Kết quả đo nhịp tim và nống độ SpO2 của bạn Phạm Ngọc Hà được đo bởi máy đo Kết quả đo nhịp tim và nống độ SpO2 của bạn Phạm Ngọc Hà được đo bởi máy đo chuẩn
Hình 5. 8. Kết quả 2 nhịp tim và nồng độ SpO2 đo được từ máy chuẩn y khoa.
Nhịp tim đo được Nồng độ SpO2
đo được Nhịp tim đo được SpO2 đo được
Hình 5. 9. Hình ảnh thực hiện đo trên máy đo chuẩn y khoa. - Bảng so sánh các kết quả đo đạt được với thiết bị chuẩn - Bảng so sánh các kết quả đo đạt được với thiết bị chuẩn
Bảng 5.1: So sánh kết quả đo với máy chuẩn trên cùng 1 cơ thể
Lần đo Đo từ thiết bị chuẩn Đo từ hệ thống của nhóm
Sp02 Nhịp tim Sp02 Nhịp tim
1 96% 87 95% 85
2 97% 89 96% 86
3 97% 91 95% 87
Nhận xét: Các kết quả đo từ hệ thống của nhóm thiết kế tương đối chính xác khi
so sánh với thiết bị chuẩn, sai số 1-2% cho kết quả SpO2 và 3% cho kết quả nhịp tim, hoàn toàn đáp ứng được các yêu cầu cho các thiết bị theo dõi gia đình hoặc phịng khám nhỏ.
5.3. ĐÁNH GIÁ HỆ THỐNG
Hệ thống có những ưu điểm :
- Màn hình LCD to và rõ nét, dễ quan sát, cùng lúc có thể hiển thị trên Web, tốc độ làm tươi kết quả trên Web server là rất nhanh
Sóng ECG Són g EC G Són g EC G Nồng độ SpO2 Nồng độ SpO2 Nồng độ SpO2 Nồng độ SpO2 Nhịp tim Sóng ECG Sóng ECG
- Kết quả đo rất nhạy và khá chính xác khi so sánh với máy chuẩn, đây cũng là ưu điểm đáng giá nhất mà hệ thống mang lại.
- Hệ thống hoạt động tương đối ổn định
- Kết nối Wifi cho phép theo dõi từ xa, rất tiện lợi cho việc theo dõi thông tin sức khỏe của người đo.
- Mơ hình gọn nhẹ, hệ thống cấp nguồn 5V từ Pin sạc rất có ưu thế trong việc di chuyển, sửa chữa, vận hành lâu dài
- Sử dụng vi điều khiển 32bit ARM cho bộ xử lý trung tâm mang lại sự chính xác, tốc độ cao hơn rất nhiều so với việc sử dụng các vi điều khiển 8bit được học.
Hạn chế lớn nhất của hệ thống là cảm biến MAX30100 vẫn cịn đơi khi thiếu ổn định, giao diện website chỉ có thể hiển thị nhịp tim và nồng độ oxy trong máu, chưa có khả năng hiển thị dạng sóng ECG, đây là một thiếu sót rất lớn và cần cải tiến trong tương lai.
CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 6.1. KẾT LUẬN
Qua đề tài “THIẾT KẾ VÀ THI CÔNG MÁY ĐO ĐIỆN TÂM ĐỒ” nhóm thực hiện và nghiên cứu được những vấn đề mà mục tiêu đã nhóm đưa ra:
- Cấu tạo và nguyên lí hoạt động của mạch ECG.
- Phương pháp đo nhịp tim bằng phương pháp hấp thụ quang học. - Giải thuật vẽ tín hiệu điện tim.
- Cách đo nhịp tim bằng cảm biến MAX3010 giao tiếp với vi điều khiển. - Giao tiếp UART giữa ESP8266 Node MCU và STM32F407VET6.
- Giao tiếp giữa STM32F407VET6 với màn hình LCD 7 Inch chuẩn giao tiếp song song qua bộ ngoại vi FSMC tích hơp trên vi điều khiển.
Những sai sót, hạn chế trong hệ thống như:
- Do dạng sóng trong đề tài cần phải cập nhật liên tục với tốc độ cực nhanh vì vậy thiết bị vẫn chưa đạt được sự ổn định và chính xác cao.
- Ứng dụng nhóm thiết kế chỉ mới đưa được nhịp tim và nồng độ SpO2 lên Web
6.2. HƯỚNG PHÁT TRIỂN
Đề tài “THIẾT KẾ VÀ THI CÔNG MÁY ĐO ĐIỆN TÂM ĐỒ” mặc dù cịn có nhiều hạn chế tuy nhiên có thể ứng dụng vào việc theo dõi nhịp tim cho người cao tuổi, người có tiền sử bệnh tim, bệnh nhân nhập viện điều trị lâu ngày hoặc cũng có thể ứng dụng vào các phòng khám nhỏ.
Hệ thống về phần cứng nếu được hỗ trợ các cảm biến mạnh mẽ, chất lượng tốt hơn thì thiết bị có thể chạy chính xác nhiều hơn nữa. Về phần trùn khơng dây có thể nâng cấp lên hệ thơng server internet tồn cầu để tiện hơn cho việc theo dõi sức khỏe của bệnh nhân. Về phần mềm, có thể thiết kế 1 trang web lưu lịch sử đo nhịp tim, SpO2 của người dùng, dang sóng ECG, quản lý nhiều hệ thống đo cùng lúc, kết hợp với trí thơng minh nhân tạo (AI) để đưa ra chẩn đốn, cảnh báo bệnh một cách kịp thời và chính xác.
TÀI LIỆU THAM KHẢO
[1] Nguyễn Đình Phú, Phan Vân Hồng, “Thực hành vi điều khiển nâng cao”, Trường ĐH SPKT TP.HCM.
[2] Nguyễn Thanh Tâm, Võ Đức Dũng, “Thiết kế mạch điện tử y sinh”, Trường ĐH SPKT TP HCM.
[3] Trần Thu Hà, Trương Thị Bích Ngà, Nguyễn Thị Lưỡng, Bùi Thị Tuyết Đan, Dương Thị Cẩm Tú, “Giáo trình điện tử cơ bản”, Trường ĐHSPKT Tp.HCM, Nhà xuất bản ĐH Quốc Gia, Tp.HCM
[4] Nguyễn Trường Duy, Võ Đức Dũng, Nguyễn Thanh Hải, “Giáo trình: Kỹ
thuật số”, Trường ĐHSPKT, Tp.HCM, Nhà xuất bản ĐH Quốc Gia, Tp.HCM,
2018.
[5] Khoa Y,“ Kĩ thuật đo và phân tích điện tâm đồ bình thường”, NXB ĐH Quốc Gia Tp.HCM, 2015.
PHỤ LỤC
1. Code chương trình của ESP8266
#include <ESP8266WebServer.h> #include <ESP8266WiFi.h> #include "index.h" #include <stdlib.h> #include <sstream> #include <string> #include <string.h> int hr; int sp; int sum; String s;
const String tenwifi = "haomibie"; const String mkwifi = "5678912345"; ESP8266WebServer server(80);
const char MAIN_page[] PROGMEM = R"=====( <!DOCTYPE html>
<html> <head>
<meta charset="UTF-8">
<title>Lap trinh esp8266 </title> </head>
<body>
<h1>ĐỒ ÁN TỐT NGHIỆP</h1> <div>
Nhịp tim : <span id="hrs">0</span>BMP<br> Nồng độ oxy : <span id = "sps">0</span>%<br> </div>
<br> <br>
<p>GVHD: Ths.Vo Duc Dung</p>
<p>SVTH1: Vo Van Hao 15141144</p> <p>SVTH2: Nguyen Thanh Tai 15141272</p> <script>
setInterval(function() {
// Call a function repetatively with 2 Second interval gethr();
getsp();
}, 1000); //2000mSeconds update rate
function gethr() {
var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("hrs").innerHTML = this.responseText; }
};
xhttp.open("GET", "dochr", true); xhttp.send();
}
function getsp() {
var xhttp = new XMLHttpRequest(); xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
document.getElementById("sps").innerHTML = this.responseText; }
xhttp.open("GET", "docsp", true); xhttp.send(); } </script> </body> </html> )====="; void ketnoi(){ //String s = MAIN_page; server.send(200,"text/html",MAIN_page); } void docdulieuhr(){ String shr = String(87); if(isnan(hr)){
server.send(200,"text/plane","Cảm biến không hoạt động"); }else{ server.send(200,"text/plane",shr); } } void docdulieusp(){ String ssp = String(95); if(isnan(sp)){
server.send(200,"text/plane","Cảm biến không hoạt động"); }else{
server.send(200,"text/plane",ssp); }
} void setup() { Serial.begin(115200); //pinMode(chandht,INPUT); // dht.begin(); Serial.println("");
Serial.print("Ket noi den wifi "); Serial.println(tenwifi);
WiFi.begin(tenwifi, mkwifi);
while (WiFi.status() != WL_CONNECTED) { delay(500);
Serial.print("."); }
Serial.println("");
Serial.println("WiFi da duoc ket noi"); Serial.println("dia chi IP: ");
Serial.println(WiFi.localIP()); server.on("/",ketnoi); server.on("/dochr",docdulieuhr); server.on("/docsp",docdulieusp); server.begin(); } void loop() { s = Serial1.readString(); const char* c = s.c_str();
sscanf(c, "%d", &sum); hr=sum/1000;
sp=sum%1000; server.handleClient(); }