Kết quả thi công của bộ vi điều khiển và LCD được thể hiện trong hình 5.4. LCD thì hiển thị tốt, rõ ràng và gọn gàn trong board ECG. Vi điều khiển thì hoạt động tốt, ổn định và hiệu quả. Nhưng về mặt thiết kế thì chưa hồn chỉnh nhất có
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 77 thể. Khoảng cách giữa chúng còn rộng và cản trở về mặt thao tác bằng tay với từng phần vì LCD nằm phủ trên vi điều khiển.
5.2 LỌC THÔNG THẤP VÀ THÔNG CAO
Hình 5.5: Bộ lọc thơng thấp và thơng cao trong mạch.
Bộ lọc thông cao và lọc thông thấp hoạt động trong mạch rất tốt và khơng có sự cố, thiết bị của phần này có ưu điểm là rẻ tiền và phổ biến trên thực tế. Thế nhưng bộ lọc vẫn chưa tốt nhất có thể vì cịn một vài nhiễu tần số cao nhưng khơng đáng kể.
5.3 BỘ LẤY TÍN HIỆU VÀ KHUẾCH ĐẠI
BỘ MƠN ĐIỆN TỬ CÔNG NGHIỆP 78 Bộ lấy tín hiệu và khuếch đại đầu vào hoạt động tương đối ổn định, tín hiệu được truyền tải liên tục và duy trì tốt. Chức năng khuếch đại tương đối chính xác và hiệu quả. Do sử dụng linh kiện rẻ tiền nên ngõ vào bị nhiễu tương đối nhiều nhưng các tín hiệu nhiễu đó ta có thể dễ dàng xác định và loại bỏ.
5.4 LỌC DẢI TRIỆT KHUẾCH ĐẠI VÀ BÙ ĐIỆN ÁP
Hình 5.7: Lọc dải triệt khuếch đại và bù điện áp trong mạch.
Với IC TL074 ta có 4 Op-amp bên trong [11] vì vậy bộ này tích hợp nhiều chức năng cụ thể là hai mạch lọc dải triệt, 1 mạch khuếch đại không đảo, mạch khuếch đại đảo với độ lợi bằng 1 và bù điện áp. Các chức năng này hoạt động khá tốt và ổn định. Thế nhưng do sử dụng các linh kiện rẻ tiền và có sai số cao vậy nên sai số của các mạch cũng có nhưng khơng đáng kể.
5.5 KẾT QUẢ MÔ PHỎNG
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 79
Hình 5.8: Tín hiệu ECG trước khi đi xử lý.
Hình 5.9: Tín hiệu ECG đã qua xử lý. 5.5.2 Kết quả thống kê
Kết quả thống kê của cả hệ thống được thể hiện qua các bước cũng như là q trình xử lý tín hiệu trong mơ hình thiết bị y tế dàn trải đo điện tim. Cụ thể các bước đó được đo trên máy oscilloscope điện tử:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 80
Hình 5.10: Vị trí test points trong mạch.
- TP 0: Ngõ ra của INA114. - TP 1: Ngõ ra mạch khuếch đại thứ 1. - TP 2: Ngõ ra mạch khuếch đại thứ 2. - TP 3: Ngõ ra mạch lọc thông cao (Fc = 0.5Hz). - TP 4: Ngõ ra mạch lọc thông thấp thứ 1 (Fc = 100Hz). - TP 5: Ngõ ra mạch lọc thông thấp thứ 2 (Fc = 100Hz). - TP 6: Ngõ ra mạch dải triệt thứ 1 (Fc = 50Hz). - TP 7: Ngõ ra mạch dải triệt thứ 2 (Fc = 50Hz). - TP 8: Ngõ ra mạch khuếch đại. - J 25: Ngõ ra mạch đảo và nâng dạng sóng.
BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP 81 Quan sát hình 5.11 chúng ta có thể dễ dàng thấy rằng tín hiệu điện trong người chúng ta khi đi qua INA114 có rất nhiều dạng sóng với tần số khác nhau và giá trị biên độ rất nhỏ chỉ khoảng 40-50mV.
Hình 5.11: Dạng sóng tín hiệu tại ngõ ra của INA114 (TP 0).
Sau khi qua bộ khuếch đại đầu vào thì ta có thể thấy biên độ dạng sóng lúc đầu đã tăng lên gấp 100 lần (từ 40-50mV lên đến 4-5V). Ta có thể dễ dàng quan sát việc này dựa vào ơ “2.00V/div” ở góc trái bên trên. Xem hình 5.12.
BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP 82 Qua dạng sóng ở hình 5.13 chúng ta có thể thấy các tín hiệu có tần số thấp hơn 0.5Hz đã bị lượt bỏ bớt.
Hình 5.13: Dạng sóng tín hiệu tại ngõ ra của bộ lọc thơng cao (TP 3).
Tiếp đến là việc lọc thơng thấp 100Hz (bỏ các tín hiệu có tần số trên 100Hz). Xem hình 5.14.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 83 Kế đến là lọc triệt dải để bỏ tín hiệu có tần số 50Hz. Lúc này chúng ta có thể nhìn thấy dạng sóng điện tim nhưng biên độ tương đối nhỏ và bị ngược. Hình 5.15.
Hình 5.15: Dạng sóng tín hiệu tại ngõ ra của bộ lọc triệt dải (TP 7).
Để nhìn rõ hơn dạng sóng chúng ta cần đưa tín hiệu qua mạch khuếch đại để dễ dàng quan sát hơn. Hình 5.16.
BỘ MƠN ĐIỆN TỬ CƠNG NGHIỆP 84 Để thuận tiện cho việc quan sát và đo kết quả ADC ở vi điều khiển chúng ta
sẽ đảo dạng sóng và nâng dạng sóng lên (nằm trong khoảng 0 -5V). Xem hình 5.17.
Hình 5.17: Dạng sóng tín hiệu ECG (J 25).
Sau khi đã qua các khâu xử lý để ra được hình ảnh cuối cùng (Hình 5.17), nhìn bằng mắt chúng ta dễ dàng thấy rằng tín hiệu cuối cùng vẫn cịn đang bị nhiễu bởi các tín hiệu có tần số cao nên dạng sóng hiển thị khơng được rõ ràng. Việc này cũng ảnh hưởng rất nhiều đến kết quả ADC được đo từ vi điều khiển qua đó làm cho việc hiển thị dạng sóng điện tim trên labview cũng bị ảnh hưởng.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 85
Chương 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
6.1 KẾT LUẬN
Sau khi kết thúc q trình làm đồ án nhóm em đã thu được kết quả như sau:
- Đã đo được dạng sóng điện tim trong cơ thể người.
- Xây dựng được mơ hình để mọi người có thể nhìn thấy và biết được hình dạng của sóng điện tim khi đi qua các khối sẽ như thế nào.
- Đã truyền được tín hiệu từ mạch đo điện tâm đồ để hiển thị trên máy tính thơng qua giao tiếp UART và wifi.
Trong suốt thời gian nghiên cứu thực hiện đồ án, nhóm của em đã thiết kế và thi cơng xong mạch đo điện tâm đồ và đã truyền được tín hiệu ở ngõ ra cuối cùng lên máy tính. So với mục tiêu ban đầu thì đạt 90%. Mặc dù đã có dạng sóng điện tim ở ngõ ra cuối cùng, nhưng so với mục tiêu ban đầu thì tín hiệu sóng điện tim ở ngõ ra cuối cùng chưa được hồn thiện, vẫn cịn bị nhiễu nhiều nên khi hiển thị trên máy tính dạng sóng khơng được đẹp và thiếu chính xác. Việc bị nhiễu này có thể ảnh hưởng rất nhiều cho người nhìn để chuẩn đốn bệnh của một người nào đó.
Qua những kết quả đạt được và chưa đạt được như trên có thể kết luận rằng mạch của nhóm em chỉ đạt ở mức khá. So với các yêu cầu đặt ra ngay từ ban đầu thì dạng sóng cuối cùng cịn bị nhiễu chưa được hồn thiện, thiếu chính xác.
6.2 HƯỚNG PHÁT TRIỂN
Do thời gian thực hiện đề tài có hạn và lượng kiến thức cá nhân là nhất định nên đề tài thực hiện xong chỉ đáp ứng được một phần nhỏ của một hệ thống hồn chỉnh. Vì vậy, để đề tài này thêm phong phú hơn, mang nhiều tính thực tế hơn nữa, có khả năng ứng dụng cao hơn thì đề tài cần phải phát triển theo hướng như sau:
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 86
- Ngồi việc hiển thị tín hiện điện tâm đồ trên máy tính thì ta có thể hiển thị trên điện thoại, máy tính bảng… và cập nhật dữ liệu lên internet để những ai cần truy cập xem tín hiệu điện tim của người được giám sát.
- Ngoài ra chúng ta cũng có thể kết hợp với 1 số thiết bị đo khác như đo nhịp tim, nồng độ oxy trong máu… để người đo có thể có thêm nhiều thơng tin hơn qua đó có thể biết rõ tình hình sức khỏe của bản thân. Hy vọng với những hướng phát triển nêu trên cùng với những ý tưởng khác của các bạn, của người đọc, những người đi sau, sẽ phát triển hơn nữa đề tài này, khắc phục những hạn chế, tồn tại của đề tài, làm cho đề tài trở nên phong phú hơn, mang tính ứng dụng cao hơn vào trong thực tế cuộc sống, phục vụ cho những lợi ích của con người trong tương lai.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 87
TÀI LIỆU THAM KHẢO
[1] TS. Cao Trường Sinh, “Giáo trình điện tâm đồ cơ bản”, NXB ĐH Vinh, 2015. [2] GS. Trần Đỗ Trinh, “Hướng dẫn đọc điện tim”, Đại học y dượt Huế, 2008. [3] PGS.TS Phạm Nguyễn Vinh, “Căn bản về ECG và một số bệnh tim”, viện tim mạch TP.HCM, 2014.
[4] PGS.TS Phạm Nguyễn Vinh,”Bệnh học tim mạch”, Nhà xuất bản đại học Y. [5] Nguyễn Đình Phú, “Giáo trình vi xử lý II”, NXB ĐH Quốc Gia Tp.HCM, 2007. [6] TS. Nguyễn Bá Hải,” Lập trình LABVIEW”, Đại học Quốc gia Tp.HCM, 2013. [7] PGS.TS Trần Thu Hà; ThS. Trương Thị Bích Ngà; TS. Nguyễn Thị Lưỡng; ThS. Bùi Thị Tuyết Đan; ThS. Phù Thị Ngọc Hiếu; ThS. Dương Thị Cẩm Tú, “Giáo trình điện tử cơ bản”, Đại học Quốc gia Tp.HCM, 2013.
[8] PGS.TS. Phạm Hồng Liên, “Giáo Trình điện tử thơng tin”, Đại học Tôn Đức Thắng, 2008.
[9] Datasheet INA114AP, BURR-BROWN. [10] Datasheet dsPIC30F4013, Microchip. [11]DatasheetTL074, ST.
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 88
PHỤ LỤC Code vi điều khiển: #include <30F4013.h> #device adc=12 //Use ADC as 12 Bits #include <stdlib.h> //Include Serial functions #FUSES NOWDT //No Watch Dog Timer #FUSES NOBROWNOUT //No brownout reset #FUSES NOPROTECT //Code not protected from reading #FUSES NODEBUG //No Debug mode for ICD #FUSES HS2_PLL8 //Crystal: 20M with PLLx8 /2 => 80M Hz #use delay(clock=80Mhz) #use fast_io (B) #use fast_io (D) #use rs232(UART1,baud=256000,parity=N,bits=8,stream=A) #use rs232(UART2,baud=256000,parity=N,bits=8,stream=WIFI_ESP) #define ADC_CLOCK_DIV_40 40 //LCD #define LCD_ENABLE_PIN PIN_D2
#define LCD_RS_PIN PIN_D0
#define LCD_RW_PIN PIN_D1
#define LCD_DATA4 PIN_B12 #define LCD_DATA5 PIN_B11
#define LCD_DATA6 PIN_B10 #define LCD_DATA7 PIN_B9 #include <lcd.c>
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 89
//--------Khai Bao BIen---------------// signed int16 adc=0,i=0,tam=0,j=0; char *s1= "OK";
char *ten= "TEN"; char *mk= "MK"; char *ip= "IP";
#define buffer_size 60 //Buffer size you can adjust this size char buffer[buffer_size]; // SAVE SMS MESSAGE int xbuff=0x00; //
char c=0x00; // the first characters recived of SMS message short sms_mode=false;// //It's a flag when is true, call read_sms(); short sms_mode1=false;
//***********************Chuong trinh Ngat********************************* #int_RDA
RDA_isr() {
c=fgetc(A);
if (c=='\n' ) // the end character OR the first character { sms_mode1=true; } if (xbuff >= buffer_size) {xbuff=0;} else{ buffer[xbuff++]=c;
} // save character of SMS message return 0;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 90 } #int_RDA2 RDA_isr2() { c=fgetc(WIFI_ESP);
if (c=='\n' ) // the end character OR the first character {
tam ++;
sms_mode=true; //It's a flag when is true, call read_sms(); }
if (xbuff >= buffer_size) {xbuff=0;}
else{ buffer[xbuff++]=c;
} // save character of SMS message return 0;
}
//********Xoa Bien**********
//************************** erase character in buffer[]*********************** void erase_buffer() { int n; for(n=0;n<buffer_size;n++){ buffer[n]=0x00;} xbuff=0x00; c=0x00; c1=0x00; sms_mode=false; }
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 91
//******** Xoa LCD********** void lcd_clear()
{ //lcd_gotoxy(cot,hang);
lcd_gotoxy(1,1); lcd_putc(" "); delay_ms(200); lcd_gotoxy(1,2); lcd_putc(" "); delay_ms(200); } void main() { //float e; set_tris_b(0x00ff); output_b(0x0000); set_tris_d(0x0000); output_d(0x0000); //LCD lcd_init(); lcd_clear(); lcd_gotoxy(1,2);
printf(LCD_PUTC, "SET_UP WIFI"); delay_ms(1000); lcd_clear(); enable_interrupts (INT_RDA); enable_interrupts (INT_RDA2); enable_interrupts (GLOBAL); while (strstr(buffer, s1) == 0) { if (strstr(buffer, IP) != 0)
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 92 { lcd_clear(); tam=0; } if (sms_mode==true) { if (tam >= 2) { tam = 0; lcd_clear(); } if(tam == 0) { lcd_gotoxy(1,1); printf(LCD_PUTC,buffer); } if(tam == 1) { lcd_gotoxy(1,2); printf(LCD_PUTC,buffer); }
if ((strstr(buffer, mk) != 0)||(strstr(buffer, ten) != 0)) {
erase_buffer();
while (sms_mode1==false); fprintf(WIFI_ESP,buffer); sms_mode1=false;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 93 } erase_buffer(); } } erase_buffer(); disable_interrupts ( global ); setup_adc(ADC_CLOCK_DIV_16 | ADC_TAD_MUL_2); setup_adc_ports(sAN3|sAN5 | VSS_VDD); set_adc_channel(5);
read_adc(ADC_START_ONLY); //make sure the ADC has acquired before while(TRUE)
{
for (j=0; j<20; j++) {
for (i=0; i<200; i++) { adc=read_adc(); delay_us(2500); fprintf(A,"%Ld\r\n ",adc); if(j<15) fprintf(WIFI_ESP,"%Ld ",adc); adc=0; } if(j<15) fprintf(WIFI_ESP,"\r\n"); } }
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 94 } Code ESP 8266: #include <ESP8266WiFi.h> char* ssid=" "; char* password=" "; String inString = ""; String bien= ""; char tam1[100],tam2[100]; int dk = 0; WiFiServer server(80); void setup() { Serial.begin(256000); delay(50);
// Connect to WiFi network //Serial.println();
Serial.println(" "); delay(500);
Serial.println("WIFI KET NOI"); delay(1000);
Serial.println("TEN: "); delay(1000);
//Doi nhap ten while (dk < 1){
while (Serial.available() > 0) { int inChar = Serial.read(); bien += (char)inChar;
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 95
if (inChar == '\n' ) {//Một ký tự ta dùng dấu ' (nháy đơn) còn một chuỗi ta dùng " (dấu nháy kép)
bien.toCharArray(tam1,bien.length()-1); // lay den ky tu cuoi( tru ky tu \r ) ssid = tam1; Serial.println(ssid); bien.remove(0); dk += 1; } } } dk=0; delay(1000); Serial.println("MK: "); delay(1000); //Doi nhap MK while (dk < 1){ while (Serial.available() > 0) { int inChar = Serial.read(); bien += (char)inChar;
// Nếu inChar là một ký tự xuống dòng. Ta in kết quả ra
if (inChar == '\n' ) {//Một ký tự ta dùng dấu ' (nháy đơn) còn một chuỗi ta dùng " (dấu nháy kép)
bien.toCharArray(tam2,bien.length()-1); // lay den ky tu cuoi( tru ky tu \r ) password = tam2;
Serial.println(password); bien.remove(0);
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 96 } } } delay(1000); WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); delay(500); Serial.println("WiFi connected"); delay(500);
// Start the server server.begin();
Serial.println("Server: 80"); delay(3000);
// Print the IP address Serial.println("IP: "); delay(500); Serial.println(WiFi.localIP()); delay(500); Serial.println("OK"); } void loop() { // Đọc giá trị từ Serial while (Serial.available() > 0) {
BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP 97
int inChar = Serial.read(); inString += (char)inChar;
// Nếu inChar là một ký tự xuống dòng. Ta in kết quả ra
if (inChar == '\n' ) {//Một ký tự ta dùng dấu ' (nháy đơn) còn một chuỗi ta dùng " (dấu nháy kép)
//truyen qua wifi
// Check if a client has connected WiFiClient client = server.available(); if (!client) {
return; }
// Send the response to the client client.print(inString); delay(1); inString = ""; } } }