|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 心率监测
' n9 s l7 _1 _4 I8 `! a7 c
. `$ G$ _8 G M; e+ @
9 g3 J7 N- w/ U9 h+ a# i; i, R4 N: z/ c7 G- U* E- ~$ w' {
1心率测量原理简介
& D5 G$ k: L& b) P0 U* y' v i' ?( C
2 @1 Y% Q. I" i) l2 D- v 我们手环的心率测量, 采用的是 PPG 光电容积脉搏波描记法原理(PhotoPlethysmoGraphy)。简单来说,就是利用血液中透光率的脉动变化,折算成电信号,对应的就是心率。
1 r& O( b9 i F$ V 当一定波长的光束照射到皮肤表面时,光束将通过反射方式传送到光电接收器,在此过程中由于受到皮肤肌肉和血液的吸收衰减作用,检测器检测到的广强度将减弱。其中皮肤、肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液,容积在心脏作用下呈搏动性变化。当心脏收缩时外周血容量最多光吸收量也最大,检测到的反射光强度最小。而在心脏舒张时,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。最后,我们通过DA14580 的 ADC 采集光接收器的电信号,计算出心率。8 e8 Y9 d$ k+ J- Y
2硬件设计
# ~0 O* N: K: y6 E2 e4 @
1 g) S2 e- c# G- h 我们的心率传感器由两部分组成,如下图所示。& H, \; J% m( u# A
5 M a, _* b" a5 w* W& ~- P- `
第一个张图 HY1303 其实是一个 LED 和一个光传感器,将采集到的光强转换成电压,从第 6 引脚输出。然后通过第二张图 HY232 放大电压。8 s6 q# P) k% _3 M* Y0 O7 o
& ^$ r/ G( A+ s; {" l
* E" w) z( m8 U+ ]
图 1
% X! H1 U! A( X+ P* b
; A8 y; w/ N- U g' P
+ q8 h4 l" b% h/ \0 \8 r+ M
图 2
/ @% T& m: c7 |4 H# }) M$ q& E/ O9 G0 n ]' p) G b
3软件设计8 C1 {# n8 D2 Y4 g/ C! ?; {
* T! c& u8 V7 {3 o8 }: p
" M; {' v. \( @8 o
第一步,就是系统的初始化。
1 r( ?7 P; ]. J$ S7 h& C I( H0 n# w7 C! m. B* N
7 K$ `& d8 I0 R( I
代码1* h8 x9 L+ Z0 Q. b3 [* l
1 z+ z0 A$ s9 y3 y 由于本次要使用串口打印,我们就设置串口管脚,使能串口,对串口进行初
6 C2 u$ t4 J( |: P- x" A, K: ]$ t. K U6 B- C6 W& n6 i
始化。
7 F" O' N1 s K$ q GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);
# O1 T. x" ~% Z) D GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false); 3 d2 b( J% c* P5 c! g
SetBits16(CLK_PER_REG, UART2_ENABLE, 1);
& E Z0 k3 s. X% T$ G // Initialize UART component
& W; i6 N( q1 @- G) ` uart2_init(UART2_BAUDRATE, UART2_DATALENGTH);9 u3 p- U) U9 N/ q) ?6 p9 u
我们的心率需要的采样周期是 4ms 到 10ms,这里用 的是 10ms,就需要通过 void my_timer_init(void)开启一个定时器。# o x, O, l" d% I4 r8 d% q
9 ~' g& _7 x2 ]& C' t# N. \
' D8 [) w) d& s 代码2. `2 {1 f, h- Z
) E5 S" U+ \: o, T2 Q
0 V0 O' _: r, j4 @0 v+ d4 h" } 每 过 10ms , 定 时 器 0 就 会 产 生 一 次 中 断 , 进 入 回 调 函 数' U' S: o( d* K# M4 O u
! t1 B/ ?6 F$ O8 F$ Q$ Q timer0_general_user_callback_function,在回调函数中,我们就使用 ADC 采集数据。
# l* ?' l" [( y# y1 k& s 最后通过函数 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 数字电压,hr_capture 就是心率值了。; r* u8 E: V! u$ }, C; F
! L( W0 d" n7 j0 x
1 v( m" m# o5 {0 a$ H- ~
代码3' p4 G. m& u+ O. L' ^/ }3 C
3 \0 L! ^6 ~( k& \# C7 G
9 ?! P4 @6 j7 n* S9 ^& c 代码4
) w. n- g4 L- ~. q6 o+ a- T& h7 d+ A. s9 B9 U* E1 c
4实验现象8 O" @0 _8 I/ S9 f- [. }
: X4 C. H( S3 Z N7 j6 Z; M 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。' _ N9 G; I/ J+ u" C
' u: u. O1 z. U- T3 x
' ^ [5 F' x% F2 l, q7 e; F& [: K (1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
' ]2 [- ^7 D, ^% i# r7 M, U+ S& J$ ?3 \0 C
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
6 o! } F! E2 L: ]6 \9 i8 p- i (3)点击打开串口。
% A! c7 i) T. P5 b* d+ T- d/ ?: e/ a2 d8 z( l/ }7 U+ F0 ]3 W' Q
0 q+ O( b0 O! T. E1 I& r: A$ P
图 3% v) T' N- W, x' z' i- u+ M
配置完串口之后,打开我们提供的代码。
5 _* Z; l7 ?/ o& F7 H l5 Y6 u
; Z4 Y& y6 l4 _/ t: S4 } (1)点击仿真按键。7 ]/ t% f$ M* {9 p2 k, l1 O1 x! Y
( _# L0 [0 E: `7 H: B6 \, f% B
) a; X- w: W! K
图 43 ~4 ^) u) B4 P
(2)点击运行代码。
/ { U$ |3 {/ V# e
, A4 U- }% H3 ~! B$ m
/ _' H, i1 [/ d
图5& P: D0 i8 l2 ~' q" t# T6 C
2 T$ O" e; z3 j) t; c5 R
4 E' u, l% A& {6 ]: Y) d$ z8 \3 R 完成之后,就能看到串口调试助手接收框信息如下。
" X) b) H. ~1 m W
5 ^4 h$ a' [. r7 K
, \ r" N# m6 G, n K
图 6, G6 C; l! D2 a% R8 [, v- u
" `4 M9 I4 O, @0 }" ?7 H) B
& ]" G0 C6 d! F" B0 T. P. I3 F! |( R/ u. t f( y$ ^/ H
3 i" k: c: I* i% T" }: S3 u. R. p
文件下载请点击:
7_(100%开源)蓝牙心率防水运动手环_心率监测.pdf
(677.56 KB, 下载次数: 0)
2 c; @8 B6 c) B1 H+ F0 {: @
0 F* l# d6 Z! a: R; Q. U
; b! m- c2 j0 p4 [! h0 H7 n. h |
|