一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

聚豐項(xiàng)目 > 老人健康監(jiān)測(cè)儀

老人健康監(jiān)測(cè)儀

隨著我國(guó)老齡化的逐步加劇,老年人的健康安全問(wèn)題成為當(dāng)今社會(huì)首要解決的問(wèn)題,該項(xiàng)目主要是實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)中老年人生理狀態(tài)可穿戴的便捷醫(yī)療系統(tǒng)。其系統(tǒng)是以STM32作為主控芯片,功能包括:老人跌倒檢測(cè)、自動(dòng)報(bào)警、體溫檢測(cè)、心率檢測(cè),實(shí)現(xiàn)通過(guò)手機(jī)APP進(jìn)行遠(yuǎn)程管理監(jiān)測(cè)查看信息人體生理數(shù)據(jù)的采集和人體生理健康的監(jiān)測(cè)。

木木_11a 木木_11a

分享
6 喜歡這個(gè)項(xiàng)目
團(tuán)隊(duì)介紹

木木_11a 木木_11a

團(tuán)隊(duì)成員

林偉 電子發(fā)燒友

分享
項(xiàng)目簡(jiǎn)介
隨著我國(guó)老齡化的逐步加劇,老年人的健康安全問(wèn)題成為當(dāng)今社會(huì)首要解決的問(wèn)題,該項(xiàng)目主要是實(shí)現(xiàn)實(shí)時(shí)監(jiān)測(cè)中老年人生理狀態(tài)可穿戴的便捷醫(yī)療系統(tǒng)。其系統(tǒng)是以STM32作為主控芯片,功能包括:老人跌倒檢測(cè)、自動(dòng)報(bào)警、體溫檢測(cè)、心率檢測(cè),實(shí)現(xiàn)通過(guò)手機(jī)APP進(jìn)行遠(yuǎn)程管理監(jiān)測(cè)查看信息人體生理數(shù)據(jù)的采集和人體生理健康的監(jiān)測(cè)。
硬件說(shuō)明

1 、系統(tǒng)分析 
  本系統(tǒng)以STM32片機(jī)作為控制核心。對(duì)于人體跌倒監(jiān)測(cè)的實(shí)現(xiàn),采用MEMS傳感器,通過(guò)加速度傳感器將得到的信息轉(zhuǎn)換成模擬電壓信號(hào),經(jīng)前置放大用的儀器放大器實(shí)現(xiàn)差值放大。然后進(jìn)行濾波等一系列中間信號(hào)處理,用A/D轉(zhuǎn)換器將模擬電壓信號(hào)轉(zhuǎn)換成數(shù)字信號(hào)。心電及脈搏生理信號(hào)的監(jiān)測(cè)為單導(dǎo)心電圖采集模塊,模擬信號(hào)輸出,內(nèi)部包含了前置放大電路、濾波電路、工頻濾波等電路。該紅外脈搏傳感器是一款利用紅外光透射手指指尖部位,輸出反應(yīng)血管末稍血容積變化的脈搏傳感器,其輸出電壓形式的模擬信號(hào)。本裝置主要任務(wù)是完成對(duì)目標(biāo)群體的跌倒檢測(cè)及生理健康監(jiān)測(cè)。整體邏輯結(jié)構(gòu)圖如下圖

框架圖.jpg

所示,主要組成部分包括主控模塊(CPU)、生理信號(hào)采集模塊、姿態(tài)監(jiān)測(cè)模塊、數(shù)據(jù)處理模塊、電源模塊。通過(guò)MEMS傳感器對(duì)人體姿態(tài)信息進(jìn)行采集,通過(guò)數(shù)據(jù)分析完成跌倒判定,通過(guò)連續(xù)血壓檢測(cè)完成對(duì)使用對(duì)象的生理信號(hào)采集,并通過(guò)數(shù)據(jù)分析處理完成對(duì)跌倒的輔助判定以及健康監(jiān)測(cè),以便于對(duì)跌倒者采取相關(guān)的醫(yī)療救援。 

 

2、硬件組成部分:

2.1、NUCLEO-F401RE 開(kāi)發(fā)板

2.2、 2.2寸 220*176分辨率TFT觸摸顯示屏

2.3、MPU6050陀螺儀感應(yīng)器

2.4、慶科EMW3080 WIFI模塊

2.5、DB18B20溫度傳感器
2.6、pulse sensor心率傳感器
2.7、TP4056電源芯片

2.8、光敏傳感器

2.9、YKB1712血壓傳感器

 


軟件說(shuō)明

1、 軟件整體原理框架圖:

原理圖.jpg


界面使用的是EmWin,手機(jī)APP和服務(wù)器,使用的是JAVA編寫。

2、 跌倒判定 
  由于人體跌倒時(shí)身體加速度,傾斜度會(huì)產(chǎn)生較大變化,故采用MEMS傳感器對(duì)目標(biāo)群體跌倒時(shí)產(chǎn)生的加速度及傾斜角度進(jìn)行測(cè)量,通過(guò)數(shù)據(jù)分析完成對(duì)跌倒動(dòng)作的判定。由于此裝置為穿戴式設(shè)備,故安置在佩戴者的重心處,主要作用是將檢測(cè)到的運(yùn)動(dòng)信號(hào),包括角加速度、角速度和傾角信息,發(fā)送至主控模塊,即系統(tǒng)CPU。又因?yàn)槿梭w跌倒時(shí)會(huì)引起血壓等眾多生理因素的變化。因此,對(duì)人體血壓的連續(xù)檢測(cè)及分析可以完成對(duì)跌倒的輔助判定,使判定結(jié)果更加準(zhǔn)確。 


STM32 和 MPU6050 的 I2C 通信:


1、配置 STM32 (用I2C1:PB6——SCL;PB7——SDA)

 1)時(shí)鐘 RCC 

   CC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);

   RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 , ENABLE);

 2)GPIO 配置

   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD;       //兩個(gè)引腳都加 4.7K 上拉電阻

    GPIO_Init(GPIOB, &GPIO_InitStructure); 

 3)I2C 配置

  void I2C_Configuration(void)

    {

     2C_InitTypeDef  I2C_InitStructure;

     I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;

     I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;

     I2C_InitStructure.I2C_OwnAddress1 =0xc0; 

     I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;

     I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;

     I2C_InitStructure.I2C_ClockSpeed = 100000;  

     2C_Init(I2C1, &I2C_InitStructure);

     I2C_Cmd(I2C1, ENABLE);

           }



2、初始化 MPU6050


void MPU6050_Initialize()   

   {        

    MPU6050_I2C_ByteWrite(0xd0,0x00,MPU6050_RA_PWR_MGMT_1);      // 8M內(nèi)部時(shí)鐘源

    MPU6050_I2C_ByteWrite(0xd0,0x07,MPU6050_RA_SMPLRT_DIV);         //采用頻率 1000

    MPU6050_I2C_ByteWrite(0xd0,0x06,MPU6050_RA_CONFIG);                 

    MPU6050_I2C_ByteWrite(0xd0,0x01,MPU6050_RA_ACCEL_CONFIG);     //加速度量程 2g

    MPU6050_I2C_ByteWrite(0xd0,0x18,MPU6050_RA_GYRO_CONFIG);         //角速度量程 2000度/s

         }


3、I2C 核心程序 ( 讀/寫)


1)寫入寄存器

一次寫操作分為幾個(gè)步驟: 發(fā)送開(kāi)始信號(hào) -> 起始成功? -> 發(fā)送 MPU6050 地址、狀態(tài)(寫)-> 寫地址成功? -> 發(fā)送 MPU6050內(nèi)部某個(gè)待寫寄存器地址 -> 發(fā)送成功? -> 發(fā)送要寫入的內(nèi)容 -> 發(fā)送成功? -> 發(fā)送結(jié)束信號(hào)


void MPU6050_I2C_ByteWrite(u8 slaveAddr, u8 pBuffer, u8 writeAddr)

{

  I2C_GenerateSTART(I2C1, ENABLE);          //發(fā)送開(kāi)始信號(hào)

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));


  I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Transmitter);          // 發(fā)送 MPU6050 地址、狀態(tài)(寫)

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

  I2C_SendData(I2C1, writeAddr);                   //發(fā)送 MPU6050內(nèi)部某個(gè)待寫寄存器地址

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));


  I2C_SendData(I2C1, pBuffer);                     //發(fā)送要寫入的內(nèi)容

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

  I2C_GenerateSTOP(I2C1, ENABLE);          //發(fā)送結(jié)束信號(hào)

}


2)讀寄存器

  MPU6050_I2C_BufferRead(0xd0, receive_data, MPU6050_RA_WHO_AM_I, 1);   //讀 WHO_AM_I 寄存器的值(0x68)

 void MPU6050_GetRawAccelGyro(s16* AccelGyro)        //讀加速度值 和 角速度值

      {

      u8 tmpBuffer[14],i; 

      MPU6050_I2C_BufferRead(0xd0, tmpBuffer, MPU6050_RA_ACCEL_XOUT_H, 14); 

      for(i=0; i<3; i++)                              

      AccelGyro=((s16)((u16)tmpBuffer[2*i] << 8) + tmpBuffer[2*i+1]);

      for(i=4; i<7; i++)                                             

      AccelGyro[i-1]=((s16)((u16)tmpBuffer[2*i] << 8) + tmpBuffer[2*i+1]);      

       }


注:

#define MPU6050_RA_ACCEL_XOUT_H     0x3B

#define MPU6050_RA_ACCEL_XOUT_L     0x3C

#define MPU6050_RA_ACCEL_YOUT_H     0x3D

#define MPU6050_RA_ACCEL_YOUT_L     0x3E

#define MPU6050_RA_ACCEL_ZOUT_H     0x3F

#define MPU6050_RA_ACCEL_ZOUT_L     0x40

#define MPU6050_RA_TEMP_OUT_H        0x41

#define MPU6050_RA_TEMP_OUT_L        0x42

#define MPU6050_RA_GYRO_XOUT_H      0x43

#define MPU6050_RA_GYRO_XOUT_L      0x44

#define MPU6050_RA_GYRO_YOUT_H      0x45

#define MPU6050_RA_GYRO_YOUT_L      0x46

#define MPU6050_RA_GYRO_ZOUT_H      0x47

#define MPU6050_RA_GYRO_ZOUT_L      0x48



I2C 讀核心程序:


void MPU6050_I2C_BufferRead(u8 slaveAddr, u8* pBuffer, u8 readAddr, u16 NumByteToRead)

{

  while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));

  I2C_GenerateSTART(I2C1, ENABLE);

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));

  I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Transmitter); 

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

  I2C_Cmd(I2C1, ENABLE);

  I2C_SendData(I2C1, readAddr);

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));

  I2C_GenerateSTART(I2C1, ENABLE);

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));



  I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Receiver);

  while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

  while(NumByteToRead)

  {

    if(NumByteToRead == 1)

    {

      I2C_AcknowledgeConfig(I2C1, DISABLE);

      I2C_GenerateSTOP(I2C1, ENABLE);

    }


    if(I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED))

    {


      pBuffer++;


      NumByteToRead--;

    }

  }


  I2C_AcknowledgeConfig(I2C1, ENABLE);

}


3、心率信號(hào)采集 

  由于生理信號(hào)對(duì)跌倒檢測(cè)及生理健康監(jiān)測(cè)重要作用,對(duì)其精確檢測(cè)尤為關(guān)鍵。故采用心電傳感單導(dǎo)心電信號(hào)采集模塊,輸出電壓信號(hào)供AD采樣,使用時(shí)需通過(guò)紅外脈搏傳感器利用特定波長(zhǎng)紅外線對(duì)血管末端血液微循環(huán)產(chǎn)生的血液溶劑變化的敏感特性,來(lái)對(duì)由于心臟的跳動(dòng),引起血管血容積發(fā)生相應(yīng)的變化進(jìn)行檢測(cè)。當(dāng)人體發(fā)生跌倒時(shí)紅外脈搏傳感器能夠輸出經(jīng)過(guò)電路調(diào)理后的反應(yīng)血容積變化的完整脈搏波電壓信號(hào),進(jìn)而可測(cè)量出脈率,監(jiān)測(cè)脈搏波的變化。最后經(jīng)過(guò)數(shù)據(jù)處理便得到使用者的心率及血壓數(shù)據(jù)。同時(shí)附加溫度傳感器實(shí)時(shí)監(jiān)測(cè)用戶體溫情況并予以顯示。

void Time_1_Init(u16 arr,u16 psc)

{

/*端口設(shè)置*/ 

GPIO_Clock_Set(IOPAEN);

GPIO_Set(GPIOA,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//復(fù)用功能,下拉

GPIO_AF_Set(GPIOA,8,1); //PA0,AF2

/*使能時(shí)鐘*/

RCC->APB2ENR |=1<<0;                           //使能定時(shí)器1時(shí)鐘;

TIM1->PSC =psc;                                 //預(yù)分頻;

TIM1->ARR =arr;                                 //自動(dòng)重裝載;

                                           /*輸入捕獲設(shè)置此處M3與M4相同*/

TIM1->CCMR1 |=1<<0;                            //01:CC1通道配置為輸入,IC1映射到TI1上

TIM1->CCMR1 &= ~((1<<3)|(1<<2)); //不分頻;                      

TIM1->CCMR1 |=(0<<4);                            //fDTS/32 N=8


TIM1->CCER &=~(1<<1);                         //非反相上升沿觸發(fā)

TIM1->CCER &= ~(1<<3);

TIM1->CCER |=(1<<0);                            //允許計(jì)數(shù)器值到輸入捕捉寄存器中;


TIM1->EGR=1<<0;

//TIM1->DIER |=1<<0;                              //允許更新中斷(溢出中斷);

TIM1->DIER |=1<<1;                              //允許1捕獲中斷;

TIM1->SR =0;  

TIM1->CR1 |=1<<0;                               //使能定時(shí)器1;


/*中斷優(yōu)先級(jí)設(shè)置*/



* 功能說(shuō)明:定時(shí)器1比較捕獲中斷服務(wù)函數(shù);

void TIM1_CC_IRQHandler(void)

{

u16 buf = TIM1->CCR1;

TIM1->CNT=0;

if((read_flag&0x01) == 0)

{

if((buf>4600)&&(buf<12000)) // 這個(gè)范圍內(nèi)的心跳才是有效心跳

{

hear_rising[cnt]=buf; //獲取上一次心跳的計(jì)數(shù)值

cnt++;

}

else

{

cnt = 0;

}

}

if(cnt==3) //連續(xù)拿了6次數(shù)據(jù)

{read_flag|=(1<<0);cnt=0;}

TIM1->SR =0;   //中斷標(biāo)志位清0

}

* 功能說(shuō)明:讀心率數(shù)據(jù);

u8 Get_Haer_Rate(void)

{

u32 temp = 0;

u8 i;

if((read_flag&0x01) == 0x01)                                              //讀允許;

{

for(i=0;i<3;i++)

{

temp += hear_rising[i];

}


temp = temp/3;

temp=CNT_FREQUENCY/temp;                                  //得到心率;

last_data = temp;

read_flag &= ~(1<<0);

read_flag |= (1<<1); //測(cè)量完成標(biāo)志位

return temp;

}

read_flag &= ~(1<<1);

return 0; //讀取三次不夠,返回上一次的值

}


4、網(wǎng)絡(luò)部分

  由于大都老年人都在有WIFI覆蓋的房子內(nèi)活動(dòng),所以可采用慶科的EMW3080 WIFI模塊,鏈接是使用smartlink功能,通過(guò)手機(jī)APP來(lái)進(jìn)行鏈接的,與服務(wù)器通信部分采用的websocket協(xié)議,實(shí)現(xiàn)了全雙工實(shí)時(shí)通信。


5、報(bào)警部分

 通過(guò)對(duì)手機(jī)APP設(shè)置報(bào)警功能觸發(fā)功能,一旦手表判斷體征異常就會(huì)發(fā)出報(bào)警信息,當(dāng)佩戴者點(diǎn)擊確定后,手機(jī)APP端會(huì)自動(dòng)報(bào)警。為了防止誤判,體征異常是否發(fā)出報(bào)警信息這里需要點(diǎn)擊確定或者取消。當(dāng)佩戴者一定時(shí)間內(nèi)都沒(méi)有點(diǎn)擊確認(rèn)或者取消時(shí),手表會(huì)認(rèn)為佩戴者已經(jīng)無(wú)法正常操作,并自動(dòng)向APP發(fā)送報(bào)警信息,通知手機(jī)端。


6、體溫心率血壓方面部分進(jìn)行實(shí)時(shí)的采樣設(shè)定每隔30s進(jìn)行傳送。

演示效果

907885234.jpg

附件

(0.15 MB)下載

評(píng)論區(qū)(1 )
  • 11291067: 你好,對(duì)你這個(gè)項(xiàng)目感興趣,方便進(jìn)一步溝通嗎

    回復(fù)