主要硬件采购链接:
stm最小系统板 | https://m.tb.cn/h.fNy7pcW?tk=XKLr2f8YwWD | 第三个套餐 |
BT06蓝牙模块 | 蓝牙3.0模块 SPP透传 兼容HC-05/06从机 JDY-31蓝牙模块-tmall.com天猫 | |
ADXL345加速度传感器模块 | ADXL345 ADXL335数字式 加速度倾斜度角度传感器模块感应 送资料-tmall.com天猫 | 第二个套餐 |
Pulse Sensor心率传感器 | 1pcs pulsesensor pulse heart rate sensor open source hardwar-淘宝网 (taobao.com) | 第一个套餐 |
DS18B20温度传感器 | DS18B20 芯片 可编程数字温度器/温度传感器 TO-92 直插 全新-淘宝网 (taobao.com) | |
IIC 4针OLED | 0.96寸OLED显示屏 SSD1306驱动液晶屏4/7针 IIC/SPI接口白黄蓝色-tmall.com天猫 | 第三个套餐 |
这些购买链接仅是给大家一些参考,购物时需谨慎挑选。
心率指的是一分钟内的心跳次数,得到心率最笨的方法就是计时一分钟后数有多少次脉搏。但这样的话每次测心率都要等上个一分钟才有一次结果,效率极低。另外一种方法是,测量相邻两次脉搏的时间间隔,再用一分钟除以这个间隔得出心率。这样的好处是可以实时计算脉搏,效率高。由此引出了IBI 和 BPM 两个值的概念:IBI: 相邻两次脉搏的时间间隔(单位:ms)
BPM:心率,一分钟内的心跳次数
则BPM = 60 / IBI
下面就是如何检测心率了:
首要目标就是识别一个脉搏信号(因为只有找到脉搏信号才能计算时间)
通过检测波峰来识别脉搏
⬇(如何寻找波峰呢)
设置一个阈值来判断波峰
(当模拟信号超过所设定的阈值时,则认为到达了波峰)
⬇(阈值该设为多少合适?可以为定值嘛?)
阈值不能为定值,需设置动态阈值
⬇(多次采集,找最大值、最小值,进行相关计算)
动态计算阈值
至于为什么阈值不可以设置为定值,需要设置动态阈值?因为人在不同时间的脉搏强度是不同的,不能采用一个固定的值去衡量,因此需要计算出当前时刻合适的阈值,如下图所示。
因此,脉搏信号的测量分两步走:①先计算出参考动态阈值
②用动态阈值判断峰值,从而寻找出波峰
找到脉搏的波形后,计算相邻两次的时间
本设计采用特征点的方法,定义信号上升到振幅的一半作为特征点,如此测量两个特征点之间的时间间隔就可得到相邻两次脉冲的时间间隔。
如图所示,相邻两特征点间的时间间隔即为IBI,然后用60/IBI就是心率。
对于步数的检测,大多数设计采用压力传感器,而本设计采用加速度传感器,以“加速度”为相关参数,更具有研究意义。
如图所示,ADXL345加速度传感器可以检测三轴方向上的加速度,在可用于分析跑步或步行的特征当中,我们选择“加速度”作为相关参数。个体(及其相关轴)的运动包括三个分量,分别是前向(“滚动”)、竖向(“偏航”)和侧向(“俯仰”)。
如图,让我们考虑步行的特性。一个步伐,我们将其定义为单位步行周期。行走时左脚(阴影的)会产生相应的加速度,加速、减速往复,并且会在某点有一个峰值。经过容压变换器、增益放大、滤波器和温度补偿后得到类似于正弦波形的电压信号输出。
如图所示:得到三个方向的波形,但Y轴波形更强烈,说明是沿着Y轴前进。
波形的上升沿代表加速度上升,也就是人迈腿;波形的下降沿代表加速度下降,也就是人收腿。
本项目开发显示功能,屏幕具有两种显示:其一显示万年历,其二显示心率、步数、体温,两种显示使用按键K0切换。
①显示万年历:通过单击K0切换到时间界面,当时间不对时,可点击K1按键进入时间设置界面,重复按下K1时顺序设置年、月、日、时、分(也就是通过按键K1设置不同单位的时间,屏幕中有箭头>,指示当前正在设置的那个单位)然后通过K2、K3按键进行时间修改。
②显示身体状态:当传感器检测到体温、步数、心率等指标发生变化时,进行实时更新,且每天的0:00时会清零步数,也可使用K2按键手动清零。
身体状况显示界面 实时时钟 时间设置界面
本设计是采用蓝牙传输数据,关于蓝牙的介绍可观看之前的一篇文章HC-05(ZS-040)蓝牙模块使用详情(手机与蓝牙模块、手机蓝牙控制单片机、一对蓝牙之间的通信)_最穷不过要饭、不死总会出头的博客-CSDN博客_zs040蓝牙模块使用方法
手机接受端为一个蓝牙app,可以使用商城里一些,也可以使用AppInventor开发,采用图形化编程,非常简单,自己设计还能掌握新的知识,趁着年轻多学点东西!!!!!!加油!!!!!
关于AppInventor的使用,大家可以关注一个云平台“巴法云平台”,上面有详细的介绍,也可关注b站的一个博主“老巫婆的程序世界”
本设计选择的18b20,较为简单,不再赘述。
欢迎大家指正交流,有空可以一起讨论代码啊。
制作不易,感谢大家支持,感谢!!!!!!
--------------一个正在努力的人