Đặc trưng yêu cầu của nguồn hệ thống cần ba mức điện áp chính là 3 V để cấp cho khối ADXL345, khối nguồn 5 V cho vi điều khiển, khối nguồn 12 V cho giao tiếp RS 232. - Với khối nguồn 12V là lớn nhất sẽ làm nguồn cấp rồi hạ áp cho các khối nguồn khác. Do yêu cầu của mơ đun Sim548 khi gửi tin nhắn sẽ cần dịng xấp xỉ 2Ampe nên khối nguồn 12 V được chọn là một adaptor của hãng Rishe cĩ đầu ra 12V và dịng lớn nhất 3 A.
- Khối nguồn 5V cung cấp cho vi điều khiển được hạ áp từ khối nguồn 12V bằng IC L7805CV. Do IC L7805 chỉ cho dịng lớn nhất 1A nên để cấp nguồn cho mơ đun Sim548 sẽ dung IC LM2576T đây là nguồn xung cĩ khả năng cho dung lớn nhất qua 2A nên phù hợp với nhu cầu năng lượng của mơ đun Sim.
- Được nuơi bởi nguồn 5V kết nối với các thiết bị ngoại vi qua các cổng kết nối. Khối giao tiếp UART sẽ được kết nối với LCD, máy tính, Sim 458 qua hai chân truyền nhận. Cĩ thể lựa chọn bằng tay được trong các trường hợp muốn kết nối riêng từng mơ đun. Khối xử lí được cấp dao động từ thạch anh ngồi với tần số 8MHz đủ để lấy mẫu và xử lý tín hiệu.
3.2.3 Khối hiển thị
- Sử dụng LCD 16x2 để hiển thị giá trị tức thời của gia tốc. Giao tiếp với vi điều khiển qua giao tiếp UART. Giao diện trên máy tính sử dụng phần mềm Visual Basic để thu thập và hiển thị giá trị
Hình 3.15 Giao diện giao tiếp máy tính.
Giao diện cĩ khả năng hiển thị giá trị gia tốc tức thời và vẽ đồ thị gia tốc theo thời gian do đĩ ta cĩ thể quan sát được tín hiệu gia tốc trước và sau để tìm những đặc trưng của gia tốc
phục vụ cho việc nhận biết ngã. Tuy nhiên hạn chế là tốc độ truyền thấp vì thế khả năng hiển thị khơng đáp ứng và cập nhật được giá trị tức thời của gia tốc.
3.2.4 Khối mơ đun ADXL và Sim
- Khối ADXL345 dùng để đo gia tốc. Khối này cĩ khả năng giao tiếp với vi điều khiển qua hai chuẩn giao tiếp là I2C và SPI ở đây sử dụng giao tiếp SPI bốn dây. Đây là chuẩn giao tiếp cho tốc độ truyền nhanh và đơn giản.
Hình 3.16 Giao tiếp SPI của ADXL
- Mơ đun Sim ghép nối với vi điều khiển qua chuẩn giao tiếp UART. Trong đĩ vi điều khiển gửi các lệnh gửi tin nhắn và mơ đun Sim nhận tín hiệu và gửi tin nhắn đên thuê bao định trước.
3.3 Thiết kế chương trình phát hiện ngã 3.3.1 Quá trình phát hiện ngã. 3.3.1 Quá trình phát hiện ngã.
Trong chương trình luơn luơn quét các giá trị trả về của cảm biến. Bằng các lệnh thiết lập giao tiếp SPI trong đĩ vi xử lý đống vai trị là Mater cịn mơ đun Adxl đĩng vai trị là Chíp tớ. Các giá trị trong các thanh ghi chứa gia tốc. Thanh ghi 50-51 chứa gia tốc theo trục x. Thanh ghi 52-53 chứa gia tốc theo trục Y và thanh ghi 54-55 chứa gia tốc theo trục Z.
Các thanh ghi 8 bít gia tốc trả về dưới dạng 10 bit được ghép từ 2 thanh.
Sau khi quy đổi từ giá trị LSB sang giá trị gia tốc chương trình sẽ luơn tính những giá trị sau:
Giá trị gia tốc di chuyển tổng cộng:
(3.14) Giá trị các gĩc của gia tốc so với trục tọa độ cố định
Trong đĩ là gia tốc thành phần theo các trục của gia tốc di chuyển tổng cộng
, là các giá trị gĩc lệch của gia tốc di chuyển so với các trục.
Ở phương pháp pháp hiện đởn giản chỉ cần đưa giá trị gia tốc đi chuyển tổng cộng vào vịng lặp so sánh với giá trị 3G.
Ở phương pháp phát hiện ngã dựa vào định hướng sau khi phát hiện được a>=3G tại thời điểm t0 cần xét thêm các giá trị sau:
(3.16)
(3.17)
(3.18)
Các giá trị , sẽ chỉ ra gĩc lệch của gia tốc tại 2 thời điểm. Nếu gĩc lệnh này lớn hơn 350 thì kết luận là ngã.
Ở phương pháp phát hiện ngã dựa vào định hướng đầu cuối và định hướng quá trình sau khi phát hiện được chấn động và kiểm tra các giá trị , vẫn chưa kết luận được cần xét thêm các biến sau trong quá trình khảo sát 3s.
(3.19)
(3.20)
(3.21)
Nếu các , thay đổi một lượng >= 1G cũng xác định đây là ngã và gửi tin nhắn.
3.3.2 Quá trình hiển thị
Do mơ hình cĩ hai kiểu hiển thị là trên LCD 16x2 và trên máy tính nên chương trình trên vi xử lý cần cĩ hai hàm hiển thị riêng biệt đĩ là hàm hiển thị trên LCD và hàm giao tiếp rs232 với máy tính. Do cùng sử dụng đường truyền trên giao tiếp UART nên cần cĩ cách định hướng đối tượng truyền đến vì truyền đi những giá trị khác nhau. Giao diện trên VB phải lựa chọn dữ liệu trên đường truyền để hiển thị và vẽ biểu đồ cho các quá trình thử nghiệm.
3.3.3 Quá trình gửi tin nhắn.
Khi vi xử lý đã hồn tất quá trình tính tốn và nhận ra ngã nĩ sẽ ra lệnh cho modul Sim gửi tin nhắn. Sự kiện này cĩ thể xảy ra bất cứ lúc nào vị vậy trong chương trình chính luơn phải quét quá trình này.
Hàm reset sim:
printf("ATZ\n\r") ta gửi liên tiếp các lệnh ATZ tới Sim để reset. Và chờ đến khi nào mơ đun sim trả về chuỗi Ok là mơ đun đã sẵn sang làm việc.
while(i++) { A[i]=getchar(); if((A[0]=='\n')&&(A[1]=='O')&&(A[2]=='K')&&(A[3]=='\r')&&(A[4]=='\n'))brea ; } lcd_gotoxy(4,0);//lcd_putsf("Reset Sim"); Hàm gửi tin nhắn: void gui_tn()
{ printf("AT+CMGS=\""); Gửi lệnh cho mơ đun chuẩn bị viết tin nhắn printf("0979317151"); Số điện thoại cần gửi
printf("\"\r\n"); i=0;
while(i++) //Chờ xác nhận từ mơ đun Sim là chuỗi OK {
A[i]=getchar();
if((A[0]=='\n')&&(A[1]=='O')&&(A[2]=='K')&&(A[3]=='\r')&&(A[4]=='\n'))break; } printf(" Bi nga roi"); // Nội dung tin nhắn
putchar(0x1A); // Kỹ tự kết thúc
Hàm khởi động mơ đun Sim sẽ được khởi tạo ngay khi vào chương trình, hàm gửi tin nhắn sẽ được đưa vào vịng lặp cùng với chu kì quét gia tốc và phát hiện ngã. Khi nào cĩ điều kiện ngã thỏa mãn chỉ cần gọi hàm gửi tin nhắn tự động mơ đun Sim sẽ gửi tin nhắn đến thuê bao đã được chọn sẵn.
Sau khi thiết kế xong mơ hình trên các phần mềm đã tiến hành hồn thành trên mơ hình thực với các khối chức năng như mơ hình lý thuyết.
4.1.1 Khối modul Sim
Khối mơ đun Sim là khối được tích hợp sẵn hầu hết các chuẩn giao tiếp và cổng kết nối. Đây là mơ đun bán sẵn trên thị trường. Khi làm việc với mơ đun này ta chỉ cần gắn Sim vào khay sim, kết nối nguồn cho mơ đun và nối 2 đầu dây giao tiếp UART với vi điều khiển là cĩ thể thực hiện quá trình điều khiển truyền nhận dữ liệu và thu phát tin.
Hình 4.1 Khối modul Sim 458
Nhược điểm của khối này là:
- Tích hợp nhiều cổng kết nối khơng dung - Khối lượng và kích thước lớn
- Cơng suất tiêu hao năng lượng lớn - Kết cấu đĩng nên khả năng mở rộng khĩ
Hình 4.2 Khối điều khiển trung tâm
Đây là khối được thiết kế và làm bằng tay. Trên một bo mạch 10x10 cm. Cĩ tích hợp đầy đủ các cổng nạp cho chương trình, cổng Com để kết nối máy tính. Mạch này cĩ thể được cấp nguồn từ adaptor hoặc từ pin.
a. Khối mạch tích hợp
Sau khi thiết kế phiên bản một cịn một số hạn chế về nguồn, kích thước, khả năng linh hoạt cĩ thể mang trên cơ thể. Phiên bản hai được thiết kế lại giảm bớt các khối chức năng nhưng cĩ thể gần giống hơn một thiết bị cĩ khả năng mang theo người.
Hình 4.4 Khối mạch tích hợp mặt sau
b. Giao diện trên máy tính.
Đã được hồn thành từ chương trình Visual Basic cĩ khả năng kết nối và nhận dữ liệu từ cổng Com trên mơ đun phát hiện ngã và truyền về máy tính thơng qua cáp kết nối Usb to Com.
4.2 Khả năng hoạt động
a. Khả năng hiển thị gia tốc đối tượng trên LCD
- Khi modul nhận dạng nằm ngang với mặt đất gia tốc theo trục Z
Hình 4.5 Khi modul nhận dạng nằm ngang với mặt đất gia tốc theo trục Z - Khi modul nằm nghiêng gia tốc theo trục X
Hình 4.8 - Khi modul nằm nghiêng gia tốc theo trục X
- Khi modul nằm nghiêng gia tốc theo trục Y
Hình 4.6 - Khi modul nằm nghiêng gia tốc theo trục Y
b. Khả năng khảo sát trên giao diện máy tính
Do khả năng lọc nhiễu cịn hạn chế và đặc tính khơng ổn định của linh kiện cũng như đường truyền mà tín hiệu nhận được cịn chưa đúng với tính tốn lý thuyết.
Hình 4.7 Tín hiệu cảm biến giám sát khi đứng im
Hình 4.9 Tín hiệu cảm biến giám sát trạng thái đi
Hình 4.10 Tín hiệu gia tốc trạng thái ngã, chấn động
Hệ thống hoạt động giao tiếp với các thiết bị ngoại vi tốt. Trong quá trình thử nghiệm khả năng nhận đúng của hệ thống là trên 75%.
phát triển và thương mại hĩa. Luận văn này thể hiện một cơng việc được thực hiện xuyên suốt từ nghiên cứu lý thuyết, thực thi phần cứng và lập trình nhúng dù chương trình cịn khá đơn giản. Để thực hiện được đề tài cần ứng dụng khá nhiều các cơng nghệ liên quan như sử dụng và xử lý tín hiệu từ cảm biến gia tốc vi cơ điện tử, nghiên cứu các chuẩn và quy tắc truyền thơng: SPI, UART, truyền tin nhắn SMS. Ngồi ra cần phải nghiên cứu động lực học cũng như nghiên cứu thực nghiệm đối với hiện tượng ngã ở người cao tuổi. Sau khi hồn thành đề tài, học viên đã chế tạo ra một hệ thống prototype cảnh báo ngã. Luận văn cĩ đề cập tới 3 giải thuật phát hiện ngã khác nhau là: 1) Phát hiện tác động đơn giản; 2) Phát hiện ngã dựa vào định hướng; 3) Phát hiện ngã dựa vào định hướng đầu cuối và định hướng quá trình. Trong đĩ giải thuật thứ 3 là do tác giả đề xuất trên cơ sở giải thuật 2) đã được đề cập trong tài liệu [9] nhằm khắc phục những hạn chế của nhĩm tác giả. Trong quá trình thực hiện, chương trình đã hoạt động tốt với giải thuật 1 (xem phụ lục), cịn các giải thuật nâng cao hơn vẫn chưa hoạt động ổn định.
Đề tài thực hiện được giải thuật phát hiện ngã dựa vào gia tốc của người mang thiết bị và gĩc di chuyển của người mang. Đồng thời, cĩ thể nghiên cứu được chuyển động của đối tượng một cách trực quan dựa vào giao diện máy tính được thiết kế cùng. Đây là một đề tài mang tính thực tiễn cao vì vậy khi tiến hành nghiên cứu thiết kế học viên cũng gặp nhiều khĩ khăn tuy nhiên cũng đã hồn thành được các cơng việc đề ra trong đề cương luận văn.
Bước tiếp theo của luận văn, học viên sẽ đi sâu vào việc cải thiện độ chính xác của thuật tốn nhằm từng bước đưa vào ứng dụng thực tiễn.
TÀI LIỆU THAM KHẢO
1. Nguyễn Quốc Trung (2002), Xử lý tín hiệu số và lọc số, Nhà xuất bản Đại học Quốc gia Hà Nội.
2. Nguyễn Văn Hịa (2005), Giáo trình đo lường điện và cảm biến đo lường, Nhà xuất bản giáo dục.
3. Nguyễn Văn Khang (2007), Động lực học hệ nhiều vật, Nhà xuất bản khoa học và kỹ thuật.
4. Clark, Russell D., Stephen R. Lord, and Ian W. Webster. "Clinical parameters associated with falls in an elderly population." Gerontology 39.2 (2009): 117-123. 5. Phillips, Lisa RS, Gaynor Parfitt, and Alex V. Rowlands. "Calibration of the
GENEA accelerometer for assessment of physical activity intensity in children." Journal of Science and Medicine in Sport (2012).
6. Liu, Jiayang, et al. "uWave: Accelerometer-based personalized gesture recognition and its applications." Pervasive and Mobile Computing 5.6 (2009): 657-675. 7. Tudor-Locke, Catrine, et al. "Accelerometer profiles of physical activity and
inactivity in normal weight, overweight, and obese US men and women." Int J Behav Nutr Phys Act 7.1 (2010): 60.
8. Lai, Chin, et al. "Adaptive body posture analysis using collaborative multi-sensors for elderly falling detection." IEEE Intell Syst 25.2 (2010): 20-30.
9. Jey Chen (2005), Wearable Sensors for Reliable Fall Detection, Proceedings of the IEEE.
Chip type : ATmega8 Program type : Application Clock frequency : 8.000000 MHz Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/ #include <mega8.h> #asm .equ __lcd_port=0x1B ;PORTA #endasm #include <lcd.h> #include <delay.h> #include <stdio.h> #include <math.h> #define SS PORTB.4 #define THRESH_TAP 29 #define DUR 33 #define THRESH_FF 40 #define TIME_FF 41 #define TAP_AXES 42 #define BW_RATE 44 #define POWER_CTL 45 #define DATA_FORMAT 49 #define FIFO_CTL 56 #define FIFO_STATUS 57 #define OFSX 30 #define OFSY 31
#define OFSZ 32
#define numberr 10 // number times of getting sample for calibration .... // USART Receiver buffer
//volatile unsigned long int sx,sy,sz; //volatile int data[6],x,y,z,x0,y0,z1,z0; char rx_buffer[8];
unsigned char rx_wr,rx_rd,counter;
char A[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};//mang de kiem tra du lieu tu modul sim tra ve
bit over; int i;
interrupt [USART_RXC] void ngatUART(void) { char data; data=UDR; if ((UCSRA&28)==0) { rx_buffer[rx_wr]=data; if (++rx_wr == 8) rx_wr=0; if (++counter == 8) { counter=0; over=1; }; }; } #ifndef _DEBUG_TERMINAL_IO_ #define _ALTERNATE_GETCHAR_ #pragma used+ char getchar(void) { char data;
#asm("cli") --counter; #asm("sei") return data; } #pragma used- #endif void reset_sim() {
//gui lien tiep lenh ATZ de reset sim printf("ATZ\n\r"); printf("ATZ\n\r"); printf("ATZ\n\r"); printf("ATZ\n\r"); printf("ATZ\n\r"); i=0;
//Cho den khi modul tra ve chuoi 'OK' while(i++) { A[i]=getchar(); if((A[0]=='\n')&&(A[1]=='O')&&(A[2]=='K')&&(A[3]=='\r')&&(A[4]=='\n'))break; } lcd_gotoxy(4,0);//lcd_putsf("Reset Sim"); lcd_putchar(A[0]); lcd_putchar(A[1]); lcd_putchar(A[2]); lcd_putchar(A[3]); delay_ms(500);//lcd_clear(); } void gui_tn()
{
printf("AT+CMGS=\""); //gui cho modul lenh viet tin nhan printf("0979317151"); //so dien thoai can gui
printf("\"\r\n"); i=0;
while(i++) //cho khi nao co chuoi 'OK' gui ve tu modul {
A[i]=getchar();
if((A[0]=='\n')&&(A[1]=='O')&&(A[2]=='K')&&(A[3]=='\r')&&(A[4]=='\n'))break; }
printf("xe bi do"); //noi dung tin nhan putchar(0x1A); //ky tu ket thuc noi dung printf("\"\r\n"); putchar(0x0D); putchar(0x0A); delay_ms(1000); putchar(0x0A); lcd_clear(); lcd_gotoxy(5,0); lcd_putsf("Okie"); lcd_gotoxy(3,1);
lcd_putsf("DA GUI TIN"); delay_ms(200);lcd_clear(); }
/*****SPI dung cho ADXL******/ unsigned char spi(unsigned char x) {
SPDR=x; while ((SPSR&128)==0); return SPDR;
}
spi(dia_chi); //goi dia chi ra de ghi
spi(gia_tri); //ghi gia tri vao dia chi vua goi delay_us(10);
SS=1; //keo chan CS len 1 de ket thuc truyen delay_us(100);
}
unsigned char read(unsigned char dia_chi) {
unsigned char x=0;
SS=0; //keo chan CS cua ADXL xuong 0 bat dau truyen delay_us(10);
spi((128|dia_chi)); //goi dia chi can doc
x=spi(0); //truyen byte trong de nhan duoc du lieu cua dia chi vua goi delay_us(10);
SS=1; //keo chan CS len 1 de ket thuc truyen delay_us(10);
return x; }
void khoitao_adxl() {
write(FIFO_CTL,0x9F); // promance in stream_mode and data is storeed in limit of 32 samples.
write(DATA_FORMAT,0); // data is ringht_justified,range +/-2g,resolution 10 bits. write(BW_RATE,13); // set outputing data rate that is 800hz...
write(OFSX,0); write(OFSY,0); write(OFSZ,18); write(TAP_AXES,6);
write(THRESH_TAP,4); write(DUR,50);
write(THRESH_FF,0x2B); // 450mg.... write(TIME_FF,0x10); // 100ms....
write(POWER_CTL,0x2D); // into bybass mode... delay_us(10);
write(POWER_CTL,8); // into measure mode }
// hien thi so tren LCD
void hienthi(long so,char h,char c) { long number; long ng, tr,ch,dv,p1; if(so<0) { number=-so;
lcd_gotoxy(c,h); //vi tri hien thi,cot, hang lcd_putchar('-');
} else {
number= so;
lcd_gotoxy(c,h); //vi tri hien thi,cot, hang lcd_putchar('+');
}
ng=number/1000;
tr=(number%1000)/100; //lay hang tram ch=((number%1000)%100)/10; //hang chuc dv=(((number%1000)%100)%10)/1; //hang don vi //p1=((number-(tr*100+ch*10+dv))*10)/10;
p1=(((number%100)%10)%1)*10/10; lcd_putchar(ng+48);
//lcd_putchar(','); //lcd_putchar(p1+48); }
//void hienthi2(long kt,char r,char l) //{
//lcd_gotoxy(r,l); //lcd_putchar(kt); //lcd_putchar(':') ; //}
void hienthi2(long so) {
long number;
long ng, tr,ch,dv,p1; //if(so<0)
{
number=-so; //vi tri hien thi,cot, hang //putchar('-');
} //else {
number= so;
//vi tri hien thi,cot, hang