嵌入式智能手環系統方案設計

                                                                        2020-09-02 11:59:38分類:軟件開發7869

                                                                          生活節奏的加快,人們更多的依賴智能產品,除了能幫減輕生活繁雜的智能洗衣機,智能電飯鍋等外,還注重在自身健康上的智能檢測產品,智能手環就作為中的一種代表性產物。其主要應用于運動顯示比如顯示行走及跑步的步數,距離,速度。同時可以實時健康監測比如心率,血氧,體溫等。那么智能手環是如何實現的呢,下面我們來看看嵌入式智能手環系統方案設計的整體流程。

                                                                          目錄

                                                                          一、系統方案的設計

                                                                          1.1系統功能分析

                                                                          1.2系統總體結構

                                                                          二、硬件電路的搭建

                                                                          2.1STM32最小系統組成部分

                                                                          2.2S硬件引腳連接

                                                                          2.2S實物連接圖

                                                                          三、軟件設計

                                                                          3.1系統流程圖

                                                                          3.2主函數代碼

                                                                          四、系統測試

                                                                          五、總結
                                                                         


                                                                          一、系統方案的設計

                                                                          系統功能分析

                                                                          本設計是由STM32F103C8T6最小系統電路,DS3231時鐘模塊,ADXL345計步模塊,MAX30100血氧心率模塊,DS18B20溫度模塊,MPU6050體位檢測模塊,寸TFT彩色液晶屏顯示模塊組成的嵌入式智能手環系統。

                                                                          (1)通過DS3231時鐘模塊實現日期顯示的功能

                                                                          (2)使用傳感器ADXL345檢測人步數

                                                                          (3)通過MAX30100傳感器實時檢測血氧心率;

                                                                          (4)通過傳感器DS18B20進行溫度測量。

                                                                          (5)通過MPU6050體位檢測臥床病人是否跌倒或可以通過此功能蜂鳴器警報呼叫。

                                                                          (6)通過寸TFT彩色液晶屏實時顯示日期,步數,距離,心率,血氧,跌倒狀態以及溫度值。

                                                                          系統總體結構


                                                                        系統總體結構

                                                                          二、硬件電路的搭建

                                                                          最小系統組成部分


                                                                        最小系統組成部分

                                                                          2.2硬件引腳連接


                                                                        硬件引腳連接

                                                                          手工焊接是一種常見的原始焊接方法。

                                                                          實物連接圖(1)STM32單片機實物圖如下圖所示。(2)DS3231實物圖(3)ADXL345模塊實物圖如下圖所示(4)MAX30100實物圖(5)MPU6050實物圖(6)DS18B20溫度傳感器的實物圖(7)寸TFT顯示模塊。

                                                                          整體系統實物圖


                                                                        整體系統實物圖

                                                                          三、軟件設計

                                                                          本設計采用輪詢的操作方式,首先在系統中斷中間隔不同的時間給相應的標志位置一,比如:計步每隔計步標志位置一,時鐘每隔1s置一一次。然后在主循環中檢測標志位,如果標志位置一。刷新相應的值。

                                                                          系統流程圖


                                                                        系統流程圖

                                                                          下面是更為詳細的流程圖


                                                                        更為詳細的流程圖

                                                                          主函數代碼

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

                                                                          代碼結構如圖


                                                                        代碼結構圖

                                                                          四、系統測試


                                                                        系統測試

                                                                          五、總結

                                                                          想要實現更多的研究,就要深入的理解它,如果我們可以在智能手環中,我們可以引入操作系統,使用一些可以跑操作系統(Android)的處理器,可以讓多功能的實現不是那么的有難度。

                                                                        來源于網絡侵刪

                                                                        上一篇:下一篇:
                                                                        久精品视频免费观看_久久男人的天堂av_夜夜被两个男人玩得死去活来_国产精品自在线拍国产手青青机版