基于运动手环的生命健康检测系统研究_第1页
基于运动手环的生命健康检测系统研究_第2页
基于运动手环的生命健康检测系统研究_第3页
基于运动手环的生命健康检测系统研究_第4页
基于运动手环的生命健康检测系统研究_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

[20]。在计步时,通过MPU6050加速度传感器检测手环的倾斜角度和运动加速度,当这些数值超过设定的阈值时,就认为用户走了一步。系统会累计步数并计算行走距离;测心率时,核查指定时段内心率数据采集进度,采集操作完结后,若PA0端口的输出模式为上升沿触发,转入中断处理模块,实现心率数据运算,计算心率值;通过OLED显示步数,距离,心率以及温度值;采用串口将GPS获取的经纬度位置信息进行显示。程序总体流程图如图4.2所示。图4.2系统总体程序流程图蜂鸣器报警功能程序设计本次设计的报警模块使用蜂鸣器和发光二极管来实现声光报警功能。按以下步骤完成硬件互联:把蜂鸣器正极接到三极管上,同时串联接入1K限流电阻,这样的目的是为了防止三极管出现直通现象,采用单片机端口进行电平输出管理,若IO引脚输出为高电平状态,晶体管开关闭合,电路连通驱动蜂鸣器发出警报声,且发光二极管即刻呈现闪烁现象,实现声音与光信号报警;若IO管脚检测到低电平,开关管转为断开模式,蜂鸣器消声伴随发光二极管断电,报警装置失活。如图4.3所示为蜂鸣器报警程序流程图图4.3蜂鸣器程序流程图首先,主函数中有一个条件判断:如果ren_fall_flag等于1或者up_dis_hr大于XL_H,就设置BEEP为1,LED为0,否则BEEP为0,LED为1。这说明蜂鸣器报警的触发条件有两个:摔倒检测(ren_fall_flag)和心率超过阈值(up_dis_hr>XL_H)。接下来,看摔倒检测的部分。在filter_calculate函数中,当z轴加速度在0到3000之间时,ren_fall_count递增,超过20次则ren_fall_flag设为1。这应该是通过检测z轴加速度的变化来判断是否摔倒,连续20次满足条件则认为摔倒。然后,心率阈值XL_H可以通过蓝牙接收数据设置,当接收到以'A'开头的数据时,解析出数值并更新XL_H。按键处理部分在菜单模式下可以调整XL_H的值,用户可以手动设置心率上限。在手环程序里,蜂鸣器的准备工作是在主程序中完成的。通过调用BEEP_Init()这个初始化函数,系统会提前设定好蜂鸣器连接的单片机引脚。当需要报警时,程序直接控制BEEP这个变量,通过发送高电平或低电平信号,就能让蜂鸣器发出声音。另外,在手环的主程序循环中,每次更新完OLED屏幕显示的内容后,程序都会检查当前情况,判断是否需要触发蜂鸣器和LED灯。一旦满足报警条件,蜂鸣器就会立刻响起来;条件不满足时,蜂鸣器就会自动关闭,确保报警及时又准确。总结起来,蜂鸣器报警主要由两种情况触发:一是检测到佩戴者摔倒,二是监测到心率超过安全范围。判断摔倒依靠的是加速度传感器的数据,而心率报警则通过对比测量值和预设的阈值。这些报警阈值很灵活,用户可以通过蓝牙连接手机APP,或者直接按手环上的按键来自行调整。需要注意的是,摔倒检测的逻辑是基于z轴加速度的连续变化,可能存在误判的可能,但代码中通过计数次数来减少误触发。心率血氧模块功能程序设计这款健康监测设备的心率和血氧检测功能,用MAX30102传感器来实现。它不仅能实时采集数据,还会过滤掉无效数据,再和提前设置好的安全数值对比。如果数据异常,设备就会通过声音、灯光等方式提醒你。程序采用模块化设计,把传感器控制、数据显示、无线通信等功能分开编写,这样以后修改和维护就更方便。而且,设备设置了双重报警机制,只要心率或血氧值超标就会报警,用起来既实用又可靠。首先,初始化部分。在main函数里,有max30102_init()的调用,这应该是初始化传感器。然后在主循环中,当menu为0时,调用max30102_scan()来读取数据。读取后检查dis_hr和dis_spo2是否为非零,如果是,就更新up_dis_hr和up_dis_spo2,这可能是为了确保数据有效后再使用,避免无效数据的干扰。接下来,数据显示部分,手环上的OLED屏幕会显示心率和血氧数值,显示的内容就是up_dis_hr和up_dis_spo2这两个变量里存的数据。要是心率超过了提前设定的上限值XL_H,蜂鸣器就会响起来报警。这个上限值XL_H还能通过蓝牙连接手机或者按手环上的按键来调整,非常灵活。需要注意的是,代码中使用了extern关键字声明dis_hr和dis_spo2,说明这些变量可能在其他文件中定义,比如max30102的驱动文件。max30102_scan()应该负责从传感器获取原始数据并计算出心率和血氧值。还有,数据更新的逻辑是在每次循环中调用传感器扫描函数,然后检查数据有效性,确保显示和报警使用的是有效数据。另外,蓝牙接收数据的部分,当接收到以'A'开头的指令时,更新XL_H,这属于心率阈值的设置,属于检测功能的一部分。总结时需要包括初始化、数据读取、有效性检查、阈值设置、显示和报警联动这些部分。还要注意代码中的模块化设计,比如传感器驱动的调用,外部变量的使用,以及人机交互的部分(按键和蓝牙设置阈值)。可能还需要提到实时性,主循环中高频刷新数据,确保检测的实时性。如图4.4为心率血氧模块程序流程图图4.4MAX30102程序流程图GPS模块功能程序设计经纬度测试功能通过GPS模块采集数据,经串口解析和格式转换后,实现实时显示与日志输出。代码中通过状态判断和截断处理确保数据有效性,结合OLED和串口实现多方式呈现,为定位相关功能(如轨迹记录、位置报警)提供了基础支持。模块化设计使其易于扩展,适配不同场景下的定位需求。首先,硬件初始化部分,Usart3_Init(9600)初始化了GPS的串口,波特率9600。然后clrStruct()可能是初始化GPS数据结构。接下来,在主循环中,当menu==0时,调用parseGpsBuffer和printGpsBuffer,这两个函数负责解析和处理GPS数据。parseGpsBuffer函数里,通过strstr查找逗号来分割GPS数据,提取纬度、经度等信息。这里用到了Save_Data结构体,里面有latitude、longitude等成员。解析时,判断usefullBuffer是否为'A',表示数据有效,否则无效。printGpsBuffer函数中,如果数据有效,就通过strstr找到小数点,截断字符串,然后用atoi转换为整数,存储到jindu和weidu变量中。注意这里除以100显示,可能是因为原始数据有小数部分,截断后取整数部分。显示部分,OLED上显示JD和WD,分别对应经度和纬度,显示的是jindu/100和weidu/100,四位数字。另外,通过UsartPrintf定时发送数据,包括经纬度,用于串口输出。总结时,要分硬件初始化、数据解析、数据处理、显示与输出、错误处理等部分。还要注意变量的使用,比如Save_Data结构体,jindu和weidu的转换方式,以及有效数据的判断条件。可能的优化点包括更健壮的解析逻辑,处理不同格式的GPS数据,或者增加数据校验,确保经纬度的正确性。如图4.5所示为GPS程序流程图图4.5GPS程序流程图本章小结此次总体设计通过模块化设计实现了多传感器融合的健康监测与定位系统,各模块分工明确且交互紧密:传感器层负责数据采集(MPU6050、MAX30102、GPS、Lsens),处理层完成滤波、解析、阈值判断(步数/摔倒检测、心率超限逻辑),交互层实现按键配置、OLED显示、声光报警,通信层支持本地(按键)和远程(蓝牙)配置,以及日志输出。整体架构清晰,适合可穿戴设备的核心功能实现,后续可通过扩展传感器校准、数据存储、云端上传等功能进一步提升实用性。

系统实际应用测试系统整体模块调试在手环的各部分模块电路元件调试过程中,首先需要对各个独立模块进行单独测试,确保每个模块的电路无异常,防止后续组装使用时出现短路、断接等各种问题。完成各独立模块测试后,将所有元件进行组装,组装完毕先通电,检查设备是否能正常启动。若启动无异常,即可进入下一步的软硬件联合调试环节。程序编译通过后,使用ST-Link下载线将程序烧录到手环硬件中。程序烧录完成后,给手环连接电源线,上电后可见手环显示屏显示身体状态、心率、温度和步数等信息。如下图5.1所示。图5.1上电显示图陀螺仪传感器模块调试陀螺仪传感器模块作为本系统重要的组成部分,其功能介绍中提出,它用来检测步数和跌倒的。此次设计是按照一步30厘米来计算,5步就是150厘米。(BS代表步数,S表示里程)跌倒功能演示如把整个电路板倾斜60-90°之间蜂鸣器就会报警(D:显示0时就是未跌倒状态,显示1时为跌倒状态)。已达到本系统的设计要求。测试结果如下图5.2所示。图5.2步数,跌倒检测心率血氧模块调试心率血氧模块是检测血管里面的红外反射,当我手指未放置到此模块上时会受到手机摄像头的红外干扰,正常来说把手指方到模块上10-20S这个时间端,它会测出一个比较合理的数据(此数据仅供参考:OLED屏幕上X表示心率,Y为血氧)。检测数据如下图5.3所示。图5.3心率血氧检测状态手机摄像头红外干扰如下图5.4所示。图5.4干扰状态蓝牙模块调试手环硬件部分通电测试没有问题之后,便可进行软硬件联合测试。首先需在手机端下载对应的APK程序,完成安装后打开手机蓝牙功能,进入APP界面点击“扫描”按钮,即可搜索附近的蓝牙设备。找到手环对应的蓝牙名称并点击连接,待蓝牙连接成功后,系统将自动跳转至手环APP主界面,该界面会实时同步显示手环显示屏上的各项数据,包括体温、心率、身体状态以及步数等信息。图5.5蓝牙连接状态实测性能指标测试功能测试步骤预期结果测试结果心率血氧将手指放置传感器上10秒左右OLED上显示心率血氧值,心率超过阈值,蜂鸣器报警符合预期GPS定位处于室外某处,GPS定位启动GPS成功定位,OLED上显示经纬度符合预期跌倒监测将实物倾斜60-90度蜂鸣器报警符合预期步数检测晃动实物模拟人走路一步为30厘米符合预期本章小结本章主要是对整个系统进行一些基本功能测试。在运动监测方面,MPU6050模块的表现十分出色。它通过融合处理加速度计和陀螺仪的数据,能够精准捕捉到用户行走、跑步、跳跃等各种运动姿态。统计步数时,误差在可接受范围内,平均准确率能达到95%以上。估算运动距离时,结合步长算法,与实际测量值相比,偏差能控制在10%以内,可以为用户提供比较准确的运动反馈。健康监测模块的效果也很显著。MAX30102能够实时监测血氧饱和度和心率,在不同运动强度以及日常休息状态下,数据采集都很稳定。血氧饱和度的测量精度可达±2%,心率监测误差基本保持在±5次/分钟。一旦检测到心率异常或者血氧偏低,报警模块会迅速响应,通过震动和蜂鸣及时提醒用户,为用户的健康提供保障。时间显示功能依靠DS1302时钟模块,经过长时间测试,时钟走时很精准,一个月累计误差不超过30秒,能确保用户随时获取准确的时间。OLED显示屏可以清晰直观地显示各项数据,不管是在户外强光环境还是室内弱光环境下,显示内容都能正常看清楚。

总结与展望总结在本次基于STM32单片机的运动手环毕业设计中,经过多次设计与调试工作,最终取得了较为满意的成果。在硬件搭方面,成功地将多个功能不同的模块进行整合。XGZP6847A模块为手环提供了基础的传感支撑,DS1302模块能够准确的记录时间,保证了运动数据与时间的准确对应。报警模块在特定条件下能及时发出警报,如运动过量或心率异常时起到提醒作用。OLED模块显示的效果更加清晰,直观地展示各项数据,方便用户查看。ATFM336H模块与HC-05蓝牙模块共同协作,实现了手环与外部设备的数据通信,有利于于数据的进一步分析与管理。MPU6050模块准确采集运动过程中的加速度和角速度数据,为判断运动状态提供了关键信息。DS18B20模块实现了温度测量功能,MAX30102模块则完成了心率和血氧饱和度的检测。不过,在设计过程中也遇到了不少难题。比如,有些模块之间信号会互相干扰,导致数据传输不稳定;软件处理复杂运动数据时,速度不够快,结果也不够准确。通过查阅资料、向老师请教,再反复测试调整,最终解决了这些问题,也让我对这些电子元件的工作原理有了更深的了解。展望未来,随着大家对健康越来越重视,运动手环还能变得更好:首先是把数据测的更准,让健康信息更靠谱;其次可以增加新功能,比如监测血压、血糖;外观设计也能更时尚、佩戴更舒服;最后还能和更多智能设备连接,分享数据更方便。总的来说,以后的运动手环会越来越智能、精准,还能根据个人需求定制,戴起来也更舒服。总之,未来的运动手环将朝着更加智能化、精准化、个性化和舒适化的方向发展。

参考文献XiaoN,YuW,HanX.WearableheartratemonitoringintelligentsportsbraceletbasedonInternetofthings[J].Measurement,2020,164(000):9.ChangchunZ,NairuiH,HuaitongY,etal.DesignofsafetydetectionsystemforsportsBracelet[J].ElectronicTest,2019.赵俊杰,张艳芬,崔凯.基于STM32的智能运动手环系统的设计[J].电子测试,2022,36(07):12-14.李倬名,骆文静,林明华,等.基于STM32的老年人智能健康手环的设计与实现[J].科技与创新,2023,(15):48-50.陶星.基于手环数据的户外运动设计与优化策略[J].新教育,2024,(S2):251-252.王珊.老年人可穿戴运动健康监护产品研究——以智能手环为例[J].工业设计,2016,(09):65-66.张斌,丁娜娜,田晴豪.基于STM32的智能手环设计[J].微处理机,2023,44(03):62-64.杨伟,肖义平.基于STM32F103C8T6单片机的LCD显示系统设计[J].微型机与应用,2014,33(20):29-31+34.田静.基于STM32的老年智能手环的设计与实现[D].南京邮电大学,2021.南亦民.基于PROTEUS温度检测仿真系统的设计[J].宁波职业技术学院学报,2011,15(05):38-41.卓从彬,杨龙频,周林,等.基于MPU6050加速度传感器的跌倒检测与报警系统设计[J].电子器件,2015,38(04):821-825.代金鑫,于灵奇,何亮,等.基于ADXL345的人体跌倒监测装置的设计[J].电子制作,2022,30(23):11-14.梁成功,崔梦瑜,边鑫荣,等.基于STM32单片机的智能手环设计与实现[J].中国新技术新产品,2024,(22):32-35.曾贵苓,叶素娣,王苹.基于STM32单片机的智能手环设计[J].西安文理学院学报(自然科学版),2023,26(03):72-76.张长春,胡乃瑞,袁怀通,等.健康监测手环系统的设计[J].电子测试,2019,(11):50-52.舒秀兰,郑旭彬,李泽森,等.ATGM336H+ESP01S的室内定位系统设计[J].电子世界,2021,(02):184-185.廖菲钰,文欢,陈靖萱,等.基于STM32的智能手环设计与实现[J].电脑知识与技术,2024,20(09):99-103.任振耀.基于单片机的老年人智能手环设计[J].电工技术,2023,(18):5-9+12.郭子琦.基于STM32的智能健康手环设计与实现[J].科技创新与应用,2024,14(02):125-128.李梦婷,曳永芳.基于STM32的智能手环系统设计[J].电子质量,2022,(08):88-93.附录附录1完整硬件电路图附录2PCB图

附录3主程序代码#include"delay.h"//延时函数#include"sys.h"//系统初始化#include"jcon.h"#include"usart.h"//串口通信#include"oled.h"//OLED显示#include<stdio.h>#include"inv_mpu.h"#include"inv_mpu_dmp_motion_driver.h"#include"mpu6050.h"//加速度计/陀螺仪#include"max30102.h"//心率血氧传感器#include"key.h"//按键#include"jcon.h"#include"ds1302.h"//实时时钟#include"lsens.h"//血压传感器//C库#include<string.h>#defineESP8266_ONENET_INFO "AT+CIPSTART=\"TCP\",\"\",1883\r\n"//云平台访问API接口//*MPU6050传感器的变量定义开始*/#defineFILTER_CNT 4typedefstruct{shortx;shorty;shortz;}axis_info_t;//三轴数据typedefstructfilter_avg{ axis_info_tinfo[FILTER_CNT]; unsignedcharcount;}filter_avg_t;#defineMAX(a,b)((a)>(b)?(a):(b))#defineMIN(a,b)((a)<(b)?(a):(b))#defineSAMPLE_SIZE50typedefstruct{ axis_info_tnewmax; axis_info_tnewmin; axis_info_toldmax; axis_info_toldmin;}peak_value_t;#defineABS(a)(0-(a))>0?(-(a)):(a)#defineDYNAMIC_PRECISION 30 /*动??精度*//*一个线性移??寄存器,用于过滤高频噪声*/typedefstructslid_reg{ axis_info_tnew_sample; axis_info_told_sample;}slid_reg_t;#defineMOST_ACTIVE_NULL 0 /*未找到最活跃轴*/#defineMOST_ACTIVE_X 1 /*最活跃轴X*/#defineMOST_ACTIVE_Y 2/*最活跃轴Y*/#defineMOST_ACTIVE_Z 3/*最活跃轴Z*/#defineACTIVE_PRECISION 60/*活跃轴最?????化值*/staticvoidfilter_calculate(filter_avg_t*filter,axis_info_t*sample);staticvoidpeak_update(peak_value_t*peak,axis_info_t*cur_sample);staticcharslid_update(slid_reg_t*slid,axis_info_t*cur_sample);staticvoiddetect_step(peak_value_t*peak,slid_reg_t*slid,axis_info_t*cur_sample);intstep_cnt=0;filter_avg_tfilter;axis_info_tsample;peak_value_tpeak;slid_reg_tslid;u8ren_fall_flag=0,ren_fall_count;externu8dis_hr,dis_spo2;u8up_dis_hr,up_dis_spo2;uint8_tsing_flag=0;u8menu=0,Select=0,key_num;//显示页面默认在显示页面u8T_H=30,XL_H=120;uint8_ttime_num[15],time_temp=10;u32jindu,weidu;u16blood_pressure;u8count=0;voidparseGpsBuffer(void);voidprintGpsBuffer(void);voiddisplay_time(void);intmain(void){ u16len,t; charnumBuf[10]; char*dataPtr1=NULL; u8num=0; unsignedshorttimeCount=0; //发送间隔变量 unsignedchar*dataPtr=NULL; delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 DS1302_Init();//初始化时间 //DS1302_Write_Time();//第一次写入时间只写入一次 OLED_Init();//OLED初始化 Usart2_Init(9600);//通信初始化 Lsens_Init(); KEY_Init();//按键初始化 BEEP_Init();//蜂鸣器初始化 Usart3_Init(9600);//GPS串口初始化 clrStruct();//GPS初始化 OLED_ShowString(0,16,"MAXInit",16); OLED_Refresh_Gram(); max30102_init();// OLED_ShowString(0,16,"MPUInit",16); OLED_Refresh_Gram(); MPU_Init(); //初始化MPU6050// OLED_ShowString(0,16,"MPUDInit",16); OLED_Refresh_Gram(); OLED_ShowString(0,16,"MPUInit1",16); OLED_Refresh_Gram(); while(mpu_dmp_init()) { OLED_ShowString(0,16,"MPUDError",16); OLED_Refresh_Gram();//更新显存到OLED delay_ms(200); OLED_Clear();//清屏 OLED_Refresh_Gram();//更新显存到OLED delay_ms(200); } OLED_Clear();//清屏 OLED_Refresh_Gram(); while(1) { if(USART_RX_STA2&0x8000)//如果蓝牙接收到数据 { len=USART_RX_STA2&0x3fff;//得到此次接收到的数据长度 if(USART_RX_BUF2[0]=='A')//如果第一数据为A就设置第一价格 { for(t=1;t<len;t++) numBuf[t-1]=USART_RX_BUF2[t];//提取A后面的内容 numBuf[t-1]=0; num=atoi((constchar*)numBuf); //转为数值形式 XL_H=num; num=0; } USART_RX_STA2=0; } key_num=KEY_Scan(0); if(key_num==KEY0_PRES) { menu^=0x01;//切换界面 OLED_Clear();//清屏 } elseif(key_num==KEY1_PRES&&menu==1)//如果是选择按钮按下就加一 { switch(Select) { case0:if(XL_H>0)XL_H--;break; } } elseif(key_num==KEY2_PRES&&menu==1) { switch(Select) { case0:if(XL_H<200)XL_H++;break; } } if(menu==0) { blood_pressure=Lsens_Get_Val(0);//读取血压 max30102_scan();//读取心率血氧 if(dis_hr!=0&&dis_spo2!=0) { up_dis_hr=dis_hr; up_dis_spo2=dis_spo2; } display_time(); filter_calculate(&filter,&sample);//读取步数 peak_update(&peak,&sample); slid_update(&slid,&sample); detect_step(&peak,&slid,&sample); OLED

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论