2020-09-02 11:59:38分類(lèi):軟件開(kāi)發(fā)14850
生活節(jié)奏的加快,人們更多的依賴(lài)智能產(chǎn)品,除了能幫減輕生活繁雜的智能洗衣機(jī),智能電飯鍋等外,還注重在自身健康上的智能檢測(cè)產(chǎn)品,智能手環(huán)就作為中的一種代表性產(chǎn)物。其主要應(yīng)用于運(yùn)動(dòng)顯示比如顯示行走及跑步的步數(shù),距離,速度。同時(shí)可以實(shí)時(shí)健康監(jiān)測(cè)比如心率,血氧,體溫等。那么智能手環(huán)是如何實(shí)現(xiàn)的呢,下面我們來(lái)看看嵌入式智能手環(huán)系統(tǒng)方案設(shè)計(jì)的整體流程。
目錄
一、系統(tǒng)方案的設(shè)計(jì)
1.1系統(tǒng)功能分析
1.2系統(tǒng)總體結(jié)構(gòu)
二、硬件電路的搭建
2.1STM32最小系統(tǒng)組成部分
2.2S硬件引腳連接
2.2S實(shí)物連接圖
三、軟件設(shè)計(jì)
3.1系統(tǒng)流程圖
3.2主函數(shù)代碼
四、系統(tǒng)測(cè)試
五、總結(jié)
一、系統(tǒng)方案的設(shè)計(jì)
系統(tǒng)功能分析
本設(shè)計(jì)是由STM32F103C8T6最小系統(tǒng)電路,DS3231時(shí)鐘模塊,ADXL345計(jì)步模塊,MAX30100血氧心率模塊,DS18B20溫度模塊,MPU6050體位檢測(cè)模塊,寸TFT彩色液晶屏顯示模塊組成的嵌入式智能手環(huán)系統(tǒng)。
(1)通過(guò)DS3231時(shí)鐘模塊實(shí)現(xiàn)日期顯示的功能
(2)使用傳感器ADXL345檢測(cè)人步數(shù)
(3)通過(guò)MAX30100傳感器實(shí)時(shí)檢測(cè)血氧心率;
(4)通過(guò)傳感器DS18B20進(jìn)行溫度測(cè)量。
(5)通過(guò)MPU6050體位檢測(cè)臥床病人是否跌倒或可以通過(guò)此功能蜂鳴器警報(bào)呼叫。
(6)通過(guò)寸TFT彩色液晶屏實(shí)時(shí)顯示日期,步數(shù),距離,心率,血氧,跌倒?fàn)顟B(tài)以及溫度值。
系統(tǒng)總體結(jié)構(gòu)
二、硬件電路的搭建
最小系統(tǒng)組成部分
2.2硬件引腳連接
手工焊接是一種常見(jiàn)的原始焊接方法。
實(shí)物連接圖(1)STM32單片機(jī)實(shí)物圖如下圖所示。(2)DS3231實(shí)物圖(3)ADXL345模塊實(shí)物圖如下圖所示(4)MAX30100實(shí)物圖(5)MPU6050實(shí)物圖(6)DS18B20溫度傳感器的實(shí)物圖(7)寸TFT顯示模塊。
整體系統(tǒng)實(shí)物圖
三、軟件設(shè)計(jì)
本設(shè)計(jì)采用輪詢(xún)的操作方式,首先在系統(tǒng)中斷中間隔不同的時(shí)間給相應(yīng)的標(biāo)志位置一,比如:計(jì)步每隔計(jì)步標(biāo)志位置一,時(shí)鐘每隔1s置一一次。然后在主循環(huán)中檢測(cè)標(biāo)志位,如果標(biāo)志位置一。刷新相應(yīng)的值。
系統(tǒng)流程圖
下面是更為詳細(xì)的流程圖
主函數(shù)代碼
#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""#include""
u8 ReadAdxl345;
u8 ErrorNum=0;
u16 Normal_num=0;
u16 Error_num=0;
u16 BuShu=0;
u16 step_num =0;float disJuLi =0;signedshort HeartRate_val=0;
u8 SPO2_val =0;
u8 mpu_count =0;
u8 STAP_FLAG =0;
u8 mpu_flag =0;_Bool mpu_1_flag =0;_Bool mpu_2_flag =0;_Bool mpu_temp =0;_Bool temp_flag =0;_Bool max_flag =0;_Bool time_flag =0;_Bool MPU_flag =0;_Bool MAX_flag =0;_Bool ADXL_flag =0;int SVM;intmain(void){float pitch,roll,yaw;short aacx,aacy,aacz;
u8 t =0;
u16 z =0;
u16 temp_BuShu;SysTick_Config(SystemCoreClock/1000);Delay_Ms(100);Lcd_Init();UART1_Init();DS18B20_Init();Gpio_Init();EXTI_KEY_Config();MPU_Init();DS3231_Init();Delay_Ms(100);IIC_Init();TIM3_Init();SPO2_Init();boot_Demo();Delay_Ms(1000);Init_ADXL345();if(Single_Read_ADXL345(0X00)==0xe5){Delay_Ms(5);}else{Delay_Ms(3);}while(mpu_dmp_init()){Delay_Ms(200);}main_Demo();
STAP_FLAG =1;while(1){if(temp_flag){
z =(ds18b20_read()&0x07FF);
temperature = z/16.0;
temp_flag =0;snprintf((char*)str,sizeof(str)," % ", temperature);Gui_DrawFont_GBK16(40,64,WHITE, BLACK,str);}if(MAX_flag){POupdate();if(max_flag){
max_flag =0;show_max30100(HeartRate_val,SPO2_val);}}if((!MPU_flag)&&(!MAX_flag)){if(ReadAdxl345 ==1){
ReadAdxl345=0;ReadData_x();if((temp_Y>450)||(temp_Y<-450)){
Normal_num++;}else{
Error_num++;}if((Error_num!=0)&&(Normal_num!=0)){
BuShu++;
Error_num=0;
Normal_num=0;}
step_num = BuShu/2;
disJuLi = step_num*0.45;if(BuShu != temp_BuShu){snprintf((char*)str,sizeof(str),"%u", step_num);Gui_DrawFont_GBK16(48,16,WHITE, BLACK,str);snprintf((char*)str,sizeof(str),"%", disJuLi);Gui_DrawFont_GBK16(48,96,WHITE, BLACK,str);
temp_BuShu = BuShu;}}}if(time_flag){
time_flag =0;get_show_time();sprintf((char*)str,"%u:%u:%urn",calendar.hour,calendar.min,calendar.sec);Gui_DrawFont_GBK16(48,112,WHITE, BLACK,str);printf("%u-%u-%ut",calendar.w_year+2000,calendar.w_month,calendar.w_date);printf("%u:%u:%urn",calendar.hour,calendar.min,calendar.sec);}if(MPU_flag){
t++;if(t>=10){
t=0;if(mpu_dmp_get_data(&pitch,&roll,&yaw)==0){MPU_Get_Accelerometer(&aacx,&aacy,&aacz);
SVM =sqrt(pow(aacx,2)+pow(aacy,2)+pow(aacz,2));if(fabs(pitch)>40||fabs(roll)>40||fabs(yaw)>40)
mpu_1_flag =1;else
mpu_1_flag =0;if( SVM>23000|| SVM<12000)
mpu_2_flag =1;else
mpu_2_flag =0;if( mpu_2_flag || mpu_1_flag ){
mpu_flag =1;show_mpu(1);}}}}Delay_Ms(10);}}voidSysTick_Handler(void){
TimingDelay--;if(STAP_FLAG){
led_count++;if(led_count%200==0){
ReadAdxl345 =1;}if(led_count ==1000){
led_count =0;
temp_flag =1;
max_flag =1;
time_flag =1;if(mpu_flag){
mpu_count++;if(mpu_count ==1)BEEP_ON;elseif(mpu_count ==2)BEEP_OFF;}if(mpu_count ==3){
mpu_count =0;
mpu_flag =0;show_mpu(0);}}}}
代碼結(jié)構(gòu)如圖
四、系統(tǒng)測(cè)試
五、總結(jié)
想要實(shí)現(xiàn)更多的研究,就要深入的理解它,如果我們可以在智能手環(huán)中,我們可以引入操作系統(tǒng),使用一些可以跑操作系統(tǒng)(Android)的處理器,可以讓多功能的實(shí)現(xiàn)不是那么的有難度。
來(lái)源于網(wǎng)絡(luò)侵刪