|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 心率监测 & w, I/ b( }9 H8 k& r6 B% a
# t' E3 m( L. K9 L9 H% V6 i
3 @9 O6 V4 p" q( I; W( T% ^
$ I6 [$ {4 Z+ W) B" I' | 1心率测量原理简介
+ I" X. J8 ]8 n* r
& {) l7 p. n" B Z7 } 我们手环的心率测量, 采用的是 PPG 光电容积脉搏波描记法原理(PhotoPlethysmoGraphy)。简单来说,就是利用血液中透光率的脉动变化,折算成电信号,对应的就是心率。+ r5 f$ ^" t1 n, Q+ d# p. e e
当一定波长的光束照射到皮肤表面时,光束将通过反射方式传送到光电接收器,在此过程中由于受到皮肤肌肉和血液的吸收衰减作用,检测器检测到的广强度将减弱。其中皮肤、肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液,容积在心脏作用下呈搏动性变化。当心脏收缩时外周血容量最多光吸收量也最大,检测到的反射光强度最小。而在心脏舒张时,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。最后,我们通过DA14580 的 ADC 采集光接收器的电信号,计算出心率。
# O; x$ R1 Y. t; B6 O6 \7 K# Y 2硬件设计: b3 ^' E3 Y+ o( V
7 G" I: D( B: i5 P% b, s/ w/ ]" c
我们的心率传感器由两部分组成,如下图所示。2 O- K. I/ z3 i! T1 _ {+ b' X
2 w; ^& G7 S0 c 第一个张图 HY1303 其实是一个 LED 和一个光传感器,将采集到的光强转换成电压,从第 6 引脚输出。然后通过第二张图 HY232 放大电压。
+ ~$ S8 X! e1 c! d" J" M, l* f: n
$ u% b) h: @1 i( d9 R4 X
" j, ]# Q0 }7 W! n0 U, `
图 13 w# j6 n( r9 ~( Z
& j) V6 O+ N- Q9 n! _
" s2 Z/ u A$ R6 e" _1 S& t 图 2
1 b, W, a* Q# a+ h4 e' c$ c6 H7 p" F# V& P. `5 q7 {
3软件设计
% E9 Y1 W( w1 a, X0 m; N) A& A! ?! _
( O5 ?0 E2 L( R' v( w( m2 v
$ \1 O+ x: D" J! L$ K- |# S# h 第一步,就是系统的初始化。
1 \0 J! ?3 W5 \8 L2 X7 |/ z, d4 @4 p
! Z7 l) O+ ~! X1 B
b4 J* W k. [* Q" d 代码1$ e: | ?" [0 I3 {7 M
- C/ [4 D; F, e6 i5 ^ 由于本次要使用串口打印,我们就设置串口管脚,使能串口,对串口进行初
# P# O1 m) N( A+ L
3 a. s/ f! E. { 始化。: S& @& _3 H. E" v \1 h3 Y+ \# x& V" j
GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);
% r# a/ ^. U# \ y5 U5 I6 A GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false); . |$ \1 U) h1 S. Q* d! W
SetBits16(CLK_PER_REG, UART2_ENABLE, 1);
& ^% W _ @9 T+ b% q/ i // Initialize UART component
. k h, t) p' L8 ~8 {; B4 |4 ~ uart2_init(UART2_BAUDRATE, UART2_DATALENGTH);, [3 N' d% i: W
我们的心率需要的采样周期是 4ms 到 10ms,这里用 的是 10ms,就需要通过 void my_timer_init(void)开启一个定时器。
* q4 f5 T9 s' U, O5 _% {- _2 D9 |, w) x
\: v% u& E/ L) B 代码2
8 q) [/ y, t. ^: ^$ B) }. `
( r3 R2 M% t/ t$ R9 U6 E( o: [, k+ k5 d( \2 _8 u: x7 D: w
每 过 10ms , 定 时 器 0 就 会 产 生 一 次 中 断 , 进 入 回 调 函 数
" h8 F) Y9 o+ X$ a) F* s
5 f+ G7 Q" m4 p3 J6 i! @* n timer0_general_user_callback_function,在回调函数中,我们就使用 ADC 采集数据。
2 U- X" I) u3 _+ H7 l! X 最后通过函数 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 数字电压,hr_capture 就是心率值了。
/ k5 r. q! i1 S* ]6 z0 O$ @5 F, w+ Z( v
$ i1 k% R* g5 F+ A: w: {5 _6 y4 T
代码3) [. e! C7 @6 m' e4 m
% R1 G# @6 h, u' J( y* q
& ]/ n2 h( v0 ]" D 代码4* y/ Z1 l! K2 D7 X$ X
8 p5 e4 j# Q8 O 4实验现象0 s- H3 K8 T9 T8 k5 k
6 Y' q/ L M, R2 S 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。4 ~! g8 m* U( T0 i% P& k; C! o
/ C4 \. P- S! O3 B
3 C8 D: A! a8 B( _
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
4 W( P" n, i, D* y& `3 q. J2 K
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
7 |- \% j* m7 x4 h (3)点击打开串口。
/ \7 E& {" |. ~% z5 r# Z) X4 o: _" Q9 Z+ [6 d6 }
; Y* L* N: W# ~0 I1 S 图 3
4 W+ ?# u6 _" Q j0 } R 配置完串口之后,打开我们提供的代码。
: V/ p! ^7 a0 [
. m" h. q/ q6 }/ [. I! c1 g (1)点击仿真按键。
3 {! b; g E" k- K# y8 V0 w1 J4 z( P' [! O2 w1 u
0 J% f" w" r& x% N# t0 B( A 图 4
* K* y/ c' o. r/ V" s2 c* N7 v (2)点击运行代码。3 @2 a2 ]& z$ S8 _1 ~
- A$ b+ D! \1 D* s" \
# x' P1 j5 M8 G
图55 C0 \" b* M) i1 o
1 n8 b8 q3 }0 s- Y
; o( l. w/ @) v 完成之后,就能看到串口调试助手接收框信息如下。! a3 k/ i( P+ j. @) W7 K
! G7 [2 l: T. p
: _2 q! q* e. r3 _# y4 w 图 6
, M) T" i2 h# ]8 G* n: S
4 I% P# b4 v# l! t# Z* W
' v& a8 C: v8 T+ W) P. ~. ~/ U. o3 D1 J7 [0 {; i" b9 [
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
# M& N5 D' `. I9 |
) K# \2 _7 H+ h- B0 c
: t+ [9 B; b& i; y! T) i文件下载请点击:
7_(100%开源)蓝牙心率防水运动手环_心率监测.pdf
(677.56 KB, 下载次数: 0)
) Y" w/ }4 ]# f% C% J
0 y$ Q; b. I" W: M- a4 w
+ q! L( T2 `+ n, r, I7 r1 r |
|