1. Trang chủ >
  2. Thạc sĩ - Cao học >
  3. Khoa học xã hội >

Hình 4.8 Tín hiệu cảm biến khi ngồi xuống đứng lên nhanh

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.12 MB, 54 trang )


39



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%.



40



KẾT LUẬN

Thiết bị cảnh báo ngã ở người cao tuổi là một ứng dụng mới mẻ trong nước, có tiềm năng

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. Ngoà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 hoà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 đã hoà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

toán nhằm từng bước đưa vào ứng dụng thực tiễn.



41



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.



42

PHỤ LỤC

1. Code Atmega

/*****************************************************

Chip type



: ATmega8



Program type



: Application



Clock frequency



: 8.000000 MHz



Memory model



: Small



External RAM size : 0

Data Stack size



: 256



*****************************************************/

#include

#asm

.equ __lcd_port=0x1B ;PORTA

#endasm

#include

#include

#include

#include

#define SS PORTB.4

#define THRESH_TAP

#define DUR



29



33



#define THRESH_FF



40



#define TIME_FF



41



#define TAP_AXES



42



#define BW_RATE



44



#define POWER_CTL



45



#define DATA_FORMAT

#define FIFO_CTL



56



#define FIFO_STATUS

#define OFSX



49



30



57



43

#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)

{



44

char data;

while (counter==0);

data=rx_buffer[rx_rd];

if (++rx_rd == 8) rx_rd=0;

#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();

}



45

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;

}



46

void write(unsigned char dia_chi,unsigned char gia_tri)

{

SS=0;



//keo chan CS cua ADXL xuong 0 bat dau truyen



delay_us(10);

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);

32 samples.

write(DATA_FORMAT,0);

write(BW_RATE,13);

write(OFSX,0);

write(OFSY,0);

write(OFSZ,18);



// promance in stream_mode and data is storeed in limit of

// data is ringht_justified,range +/-2g,resolution 10 bits.

// set outputing data rate that is 800hz.....



47

write(TAP_AXES,6);

write(THRESH_TAP,4);

write(DUR,50);

write(THRESH_FF,0x2B);

write(TIME_FF,0x10);



// 450mg....

// 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);



48

lcd_putchar(tr+48);

lcd_putchar(',');



/******cong them 48



*****/



lcd_putchar(ch+48);



/******trong bang ma ASCI *****/



lcd_putchar(dv+48);



/******de doi ra so



//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

//putchar('+');

}

ng=number/1000;



*****/



49

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(tr+48);



/******cong them 48



*****/



putchar(ng+48);

putchar(tr+48);

putchar(',');

/******trong bang ma ASCI *****/

putchar(ch+48);

/******de doi ra so



*****/



putchar(dv+48);

delay_ms(100);

}

long g1,g2,g3, g;

void htg()

{

int datax,datay,dataz;

datax=((read(51)<<8)|read(50));

delay_ms(10);



//du lieu tu truc x(DATAX0+DATAX1)



datay=((read(53)<<8)|read(52));

delay_ms(10);



//du lieu tu truc y



dataz=((read(55)<<8)|read(54));

delay_ms(10);



//du lieu tu truc z



g1=((datax)*3.9); //tinh gia toc theo truc x

g2=((datay)*3.9); //tinh gia toc theo truc y

g3=((dataz)*3.9); //tinh gia toc theo truc z

g=sqrt((g1*g1)+(g2*g2)+(g3*g3));

//hienthi2(88,0,0);



Xem Thêm
Tải bản đầy đủ (.doc) (54 trang)

×