CHƯƠNG 4. GIẢI THUẬT VÀ THUẬT TOÁN 4.1. Nguyên lý hoạt động của hệ thống
Sử dụng nguồn điện 12VDC-3A để cấp cho hệ thống, sau đó qua module LM2596 hạ áp xuống 5VDC -3A để cấp nguồn cho khối xử lý vi điều khiển PIC16F877A và khối cảnh báo, khối hiển thị. Sau đó nguồn 5VDC – 3A qua diode để còn điện áp 4.2V cung cấp cho module SIM800L. Cùng lúc đó nguồn 5VDC – 3A qua LM1117 – 3.3V để tạo điện áp 3V cung cấp cho cảm biến nhịp tim.
Sau khi cấp nguồn xong màng hình LCD16x2 sẽ xuất hiện dòng chữ là “ KHOI DONG SIM….,VUI LONG CHO…..” sau khoảng 10s để module sim kiểm tra sim nếu sim hoạt động sẽ gửi về số điện thoại 1 tin nhắn là “ KHOI DONG THANH CONG”.
Tiếp theo để đo nhịp tim ta nhấn nút Start lúc này màng hình LCD16x2 sẽ hiển thị dòng chữ là “ BAT DAU DO…..,KHONG BO TAY RA” và người dùng cầm cảm biến nhịp tim bằng ngón tay cái và ngón tay chỏ một cách thoải mái trong 20s. Cảm biến nhịp tim sẽ đo được nhịp tim của người dùng và trả về tính hiệu analog từ đó qua bộ so sánh thành tín hiệu digital . Nhịp tim sẽ được so sánh với giá trị đặt trước là nhỏ hơn 40bmp và lớn hơn 110bmp.
Sau khi đi đo nhịp tim xong sẽ hiển kết quả lên màng hình LCD16x2 “NHIP TIM,….(BMP)” nếu nhịp tim vượt ngưỡng đã đặt trước thì sẽ gửi về điện thoại 1 tin nhắn “VUOT NGUONG CHO PHEP, NHIP TIM:……” đồng thời còi cảnh báo sẽ được kích hoạt
4.2. Lưu đồ giải thuật
Begin
Khởi tạo phần cứng
Kiểm tra nút start
Sai Biến tt = 0 Đúng Tắt LED Báo nhịp tim Bắt đầu Sai Biến tt1 = 1 Đúng Biến tt1 = 0 Sai Vượt ngưỡng Đúng Bật loa Gửi tin nhắn Tắt loa
CHƯƠNG 5. THỰC NGHIỆM 5.1. Tiến trình thực nghiệm
Hình 5.41 Mạch cảm biến nhịp tim hoàn chỉnh
Hình 5.43 Nhịp tim đo được vào hiển thị lên LCD16x2
Hình 5.45 Tin nhắn được gửi từ module sim khi khởi động thành công và nhịp tim lớn hơn 110bmp
Hình 5.46 Tin nhắn được gửi từ module sim khi tay không chạm cảm biến nhịp tim bằng 0
5.2. Kết quả thực nghiệm Số lần đo Nhịp tim đo bằng mạch thiết kế(bmp) Nhịp tim đo bằng thủ công(bmp) Độ chênh lệch(bmp) 1 90 87 3 2 93 90 3 3 87 87 0 4 96 93 3 5 84 86 2 6 90 91 1 7 90 88 2 8 86 86 0 9 88 88 0 10 87 89 2
Bảng 2 số liệu thống kê nhịp tim sau 10 lần đo 5.3. Kết luận thực nghiệm
- Mạch truyền tín hiệu tốt và tốc độ xử lý nhanh - Độ sai số không qua lớn
- Người dùng dễ thao tác và sử dụng - Module Sim hoạt động ổn định - Có tính ứng dụng vào thực tế cao
CHƯƠNG 6. KẾT LUẬN 6.1. Ưu điểm
- Nhịp tim đo khá chính xác
- Module sim 800L giao tiếp đúng và nhanh chóng gửi tin nhắn gửi về điện thoại - Pic 16f877A xử lý nhanh hoạt động tốt
6.2. Nhược điểm
- Cảm biến nhịp tim lấy dữ liệu chưa được tốt, độ sai số tương đối - Linh kiện sử dụng rẻ dẫn đến hoạt động lâu ngày sai số hoặc hư hỏng - Khối cảnh báo kêu to
6.3. Hướng phát triển
- Đề tài chưa được hoàn thiện tốt nhất do sử dụng linh kiện còn rẻ tiền, có thể khắc phục bằng cách thay thế bằng các linh kiện khác và bổ sung thêm cảm biến oxy trong máu đo nồng độ bão hòa oxy trong máu, cảnh báo té ngã, thêm các thông số y sinh khác như huyết áp, điện nhiệt, điện tâm đồ.
- Có thể phát triển thêm cảnh báo và giám sát qua máy tính, internet, lưu trữ dữ liệu áp dụng trong lĩnh vực y tế ,hay cho người thân và gia đình.
TÀI LIỆU THAM KHẢO
[1]Nguyễn Đình Phú – Nguyễn Trường Duy, Giáo trình kỹ thuật số, Nhà xuất bản Đại học Quốc gia Tp Hồ Chí Minh
[2]Nguyễn Hữu Phương, Xử lý tín hiệu số, Nhà xuất bản Đại học Quốc gia Tp Hồ Chí Minh [3] https://circuitdigest.com/microcontroller-projects/heartbeat-monitoring-using-pic- microcontroller-and-pulse-sensor [4] https://dongtay.net.vn/vi/benh-hoc/roi-loan-nhip-tim/1445-nhip-tim-bao-nhieu-la- binh-thuong.html [5] https://mobitool.net/mach-so-sanh-dien-ap-op-amp.html [6] https://circuitdigest.com/microcontroller-projects/gsm-interfacing-with-pic16f877a
PHỤC LỤC
#INCLUDE <16F877a.H> #FUSES HS #USE DELAY(CLOCK=20M)
#use rs232(baud=9600,xmit=PIN_C6,rcv=PIN_C7)
#define LCD_ENABLE_PIN PIN_b2 // dinh nghia theo lcd (phan cung) #define LCD_RS_PIN PIN_b4
#define LCD_RW_PIN PIN_b3
#define LCD_DATA4 PIN_D7 #define LCD_DATA5 PIN_D6 #define LCD_DATA6 PIN_D5 #define LCD_DATA7 PIN_D4
#include <lcd.c>
#define cb pin_d3 #define led pin_c0 #define loa pin_e0 #define nn pin_a0
signed int32 xung,luu,bmp,bdn; int1 tt,tt1;
#int_timer1 // tran thi ngat 1 lan. khi tran la dat gia tri 65535 void ngat_timer() // ngat timer moi lan 100ms
{
if(tt==1) // co nhan bat dau do {
bdn++; // sau 100ms no tang len 1 don vi set_timer1(3036); // gia tri bat dau if(input(cb)==1) // co nhip tim
{
output_high(led); // bat led
delay_ms(50); // chong nhieu cam bien
xung++; // tang xung
while(input(cb)==1); // cho xung xuong muc 0 }
else output_low(led); // khong co nhip
if(bdn>=200) // 200*100ms = 20000ms = 20s {
bdn=0;
setup_timer_1(T1_DISABLED); // khong cho dem
xung=0;
tt=0; // chot trang thai tt1=1; bmp=luu*3; // 20s quy 1p = 60s output_low(led); setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); // mo timer } } } void xoa_tin_nhan() {
printf("AT+CMGD=1,4\r\n"); // xoa tin nhan delay_ms(500);
}
void gui_tin_nhan(unsigned char tn) {
printf("AT+CMGS=\"+84768882367\"\r\n"); delay_ms(500);
switch(tn) {
case 1: printf("KHOI DONG THANH CONG "); break;
case 2: printf("VUOT NGUONG CHO PHEP, NHIP TIM:%ld ",bmp); break;
}
delay_ms(500);
putc(26); // xuong dong nhan nut gui delay_ms(500);
}
void khoi_dong_sim() {
lcd_gotoxy(1,1);
lcd_putc("KHOI DONG SIM..."); lcd_gotoxy(1,2);
lcd_putc("VUI LONG CHO....");
delay_ms(1000); // cho 10s de module sim hoat dong
printf("AT\r\n"); delay_ms(1000); // kiem tra có sim khong
printf("ATE1\r\n"); delay_ms(1000); // cho phep ket noi module sim voi pic printf("AT+IPR=9600\r\n"); delay_ms(1000); // toc do truyen 9600
printf("AT&W\r\n"); delay_ms(1000); // luu lai gia tri cai
printf("AT+CMGF=1\r\n"); delay_ms(1000); // chuyen tin nhan tu string sang text va nguoc lai
printf("AT+CNMI=2,2,0,0,0\r\n"); delay_ms(1000); // doc cac tin nhan chua duoc doc printf("AT+CMGD=1,4\r\n"); delay_ms(1000); // xoa cac tin nhan da doc
delay_ms(200);
gui_tin_nhan(1); // gui tin nhan bao khoi dong thanh cong delay_ms(500);
xoa_tin_nhan(); }
void nn_start() {
if(input(nn)==0) // co nhan khong {
delay_ms(20); // chong doi if(input(nn)==0) // con nhan {
tt=1; // bat dau dem xung=0;
bdn=0;
while(input(nn)==0); // cho nha }
} }
VOID MAIN() {
set_tris_b(0x01); set_tris_d(0x0f); set_tris_a(0x01); bdn=0; luu=0; xung=0;
lcd_init(); // khoi tao lcd
setup_timer_1(t1_internal|t1_div_by_8); // khoi tao timer set_timer1(3036);
enable_interrupts(global);
enable_interrupts(int_timer1); // khoi tao ngat timer
khoi_dong_sim(); // khoi tao module sim lcd_gotoxy(1,1); lcd_putc(" "); lcd_gotoxy(1,2); lcd_putc(" "); output_low(led);
output_low(loa); tt=0; tt1=1; bmp=0; while(true) { nn_start(); if(tt==0) { output_low(led); lcd_gotoxy(1,1); lcd_putc(" NHIP TIM "); lcd_gotoxy(1,2); // cot 1 hang 2 lcd_putc(" "); lcd_putc(bmp/100+0x30); lcd_putc(bmp/10%10+0x30); lcd_putc(bmp%10+0x30); lcd_putc("(BMP) "); } else { lcd_gotoxy(1,1); lcd_putc("BAT DAU DO...");
lcd_gotoxy(1,2); // cot 1 hang 2 lcd_putc("KHONG BO TAY RA "); } if(tt1==1) { tt1=0; if((bmp>110 || bmp<40)) {
output_high(loa); // bat loa delay_ms(500);
gui_tin_nhan(2); // gui khoi dong xong delay_ms(500); xoa_tin_nhan(); } } delay_ms(100); } }