|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
开源蓝牙心率防水运动手环 ——疯壳·智能穿戴开发系列 心率监测 % s3 }( R& x: U# E4 Z9 @- ]( X
$ A3 [0 R" J( ?4 k, q
6 i& l+ m+ k+ R. a M" r
! [2 s* f- i4 [# M/ m3 d1 C* W% \ 1心率测量原理简介
" M; C/ B3 h! J. C
/ {2 O, ]2 ^/ {* T) z 我们手环的心率测量, 采用的是 PPG 光电容积脉搏波描记法原理(PhotoPlethysmoGraphy)。简单来说,就是利用血液中透光率的脉动变化,折算成电信号,对应的就是心率。6 N/ H( D- m( |( u1 c) P
当一定波长的光束照射到皮肤表面时,光束将通过反射方式传送到光电接收器,在此过程中由于受到皮肤肌肉和血液的吸收衰减作用,检测器检测到的广强度将减弱。其中皮肤、肌肉组织等对光的吸收在整个血液循环中是保持恒定不变的,而皮肤内的血液,容积在心脏作用下呈搏动性变化。当心脏收缩时外周血容量最多光吸收量也最大,检测到的反射光强度最小。而在心脏舒张时,检测到的光强度最大,使光接收器接收到的光强度随之呈脉动性变化。最后,我们通过DA14580 的 ADC 采集光接收器的电信号,计算出心率。
# d, u. Y# G5 w$ ]* U4 n! v 2硬件设计
* T7 n7 B1 o, B' t
4 G+ S9 T* v; Y3 f6 V* s$ u7 e8 a 我们的心率传感器由两部分组成,如下图所示。
8 Y4 g, I9 d, ?* L9 }! Q1 H" x8 b& g( x5 N5 U& O# H
第一个张图 HY1303 其实是一个 LED 和一个光传感器,将采集到的光强转换成电压,从第 6 引脚输出。然后通过第二张图 HY232 放大电压。$ {* h( ?2 a. C9 X5 C4 ~) E/ Y
' c/ d0 c" s' K% {; s t
. ^, V9 W, P _ ?9 ^5 X' {
图 1
% |* N, `/ ?+ S: J+ l5 C% h+ z+ J, P% F7 J+ }" Y* [
# h/ I" W+ O( @# v* V: n4 I
图 21 U8 J, D! N) P
3 t' s/ P: R( o( c* F& r- q 3软件设计6 x4 C- N$ _) t6 n/ M8 \+ V) _- k% ^$ W
. `" x$ L& y5 [( d( J
. Y$ n8 P: n) T0 v, ?- K, { 第一步,就是系统的初始化。: Z% n6 K; t+ A
4 n$ W- W6 D& `1 ~ |6 J- ?
7 y# U7 T7 r6 P. a5 ?4 e 代码19 C# T% d$ Y! `# m Y
5 S. b- _% f6 H F5 E
由于本次要使用串口打印,我们就设置串口管脚,使能串口,对串口进行初
$ c+ o& C6 J; W e$ s9 Y% r( }0 |+ B: W5 T: p, h6 Q, o
始化。
4 ?- [& t' t( d& f5 @& M GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_TX_PIN, OUTPUT, PID_UART2_TX, false);% I+ F* y( u9 \% ^0 ~5 E- @
GPIO_ConfigurePin(UART2_GPIO_PORT, UART2_RX_PIN, INPUT, PID_UART2_RX, false); / i% g. u8 H* F6 S- |
SetBits16(CLK_PER_REG, UART2_ENABLE, 1);. _( `! A$ Q# |" o3 L& t4 R0 ?8 R
// Initialize UART component
8 L) @0 W5 p' s4 H% C& T, R uart2_init(UART2_BAUDRATE, UART2_DATALENGTH);. _' \+ Y6 y5 U7 C- t
我们的心率需要的采样周期是 4ms 到 10ms,这里用 的是 10ms,就需要通过 void my_timer_init(void)开启一个定时器。
& j5 D; Z# a7 u& J" W ]/ Q1 f, `
6 _* w/ H& _7 \3 k0 v; Q
代码2
- A7 [) X S5 [
" s/ s. R4 T! C% Z: p+ w/ n* D
3 H( L8 Q1 B, C0 f" p 每 过 10ms , 定 时 器 0 就 会 产 生 一 次 中 断 , 进 入 回 调 函 数3 z, m' [7 I! ^. |5 d1 Z# v7 I
, G6 U. R8 D# j# {7 b# K5 [ timer0_general_user_callback_function,在回调函数中,我们就使用 ADC 采集数据。. A9 O+ v% {' z* y6 y6 w/ d
最后通过函数 ADC_CAPTRUE(adc_heart ,&hr_capture)就可以得到心率值。adc_hreat 是 ADC 数字电压,hr_capture 就是心率值了。* ~8 ]8 ?3 p! g
) f# G. d$ `2 L
; M4 ]# q6 v$ P/ d8 \, `
代码3" s& Y6 P& v. g- e; O
$ A2 I- f5 V7 T' h
' Z; ]- _1 }$ m4 ]0 h( j
代码4$ D8 e. ^3 k% Z" r& f, `$ O
& o4 e/ @" c8 }4 X8 @$ R4 x# S
4实验现象4 A; `# L. `, Q+ a+ B1 }/ v
' d, [$ g3 l% J$ U& o 首先,插好 Jlink 和 USB 转串口,然后打开打开串口调试助手。
0 ?. p% i M" z# [! M6 h t0 {: c
, e w7 ]: X" q0 ]. A- m$ D$ [+ T# T& z# I& T, @+ N" U
(1)选择串口号,我们图中是 COM1,这个根据实际情况选择。
% ~: _1 P5 e5 u; I" j5 [& i5 Q F; t$ S1 a. p/ ?2 Z2 o
(2)配置串口参数,波特率为 115200,数据位 8,停止位 1,没有校验位和控制流,与下图一致。
) _$ s: y) F |$ G( j e0 _$ ` (3)点击打开串口。
# M. H- ]& p: H$ A" ~+ b- j$ }4 o# {
) @0 N) V+ k+ P6 O
图 3' }4 e* m, Y/ @9 k1 P" s& b$ D
配置完串口之后,打开我们提供的代码。2 ? w6 k) ]. f( b j1 j+ D3 ?
* h4 D# E4 m8 j& W (1)点击仿真按键。
2 o9 L( |3 N( ~7 {, ^) [
7 J) B3 c9 e, O9 L0 Q1 H$ I8 {
% h3 g, }- d/ w" j2 ?% x0 ~0 o 图 4
4 [. `4 O: _8 G2 ~) ` (2)点击运行代码。/ c7 w" F. L6 A- @- F6 H0 d7 l
! W2 u4 X& g; q1 S8 D; I$ x# c
1 p0 i7 b/ e/ Y4 T
图5
3 k# l. D) D: L6 q" A, N% R: Y" d6 p7 v
% ]' P$ m$ B! \9 m6 ?
完成之后,就能看到串口调试助手接收框信息如下。
/ `" z1 Q% k0 N5 U
3 r1 ]$ s& ?! [; l c5 m9 m
* d. ]7 ?* t; O5 @ \2 Q: [
图 6
' w9 V* |+ I0 Q: d% L3 Z
- ^) w+ D- L3 f' ?; ~; E2 k' u# g6 n* F
9 F; Y! E' c/ ^) [ v
如需定制开发,请通过官网“疯壳”网页底部的“联系我们”进行联系
& f1 Y) L! F7 s+ o& H4 C0 C T, A/ B9 u5 O, I, {
7 A3 m7 k$ ~0 u9 C
文件下载请点击:
7_(100%开源)蓝牙心率防水运动手环_心率监测.pdf
(677.56 KB, 下载次数: 0)
* o& V6 |' [ S
m2 b6 Q# s: L! _1 t' ~; N( _* v
|
|