目录
简介
显示您的脉搏率,血氧水平以及每个心跳的运动图。
步骤一 材料准备
硬件准备:
- arduino R3
- arduino uno
- ATtiny85芯片
- OLED SSD1306 128×32显示器
- maxim integrated max30102 高灵敏度脉搏血氧和心率传感器
- 3mm LED
- 1k电阻
- 按钮
软件准备:
- arduino IDE
步骤二 原理说明
在ATtiny85基础上实施的该项目,在oled上显示了脉搏频率和SpO2(血氧百分比)估计值。它使用SSD1306 128×32 OLED显示屏和MAX30102传感器。需要强调的是,这不是出于医学目的创作的,所以不要用于医学目的。SpO2的计算非常近似,没有用任何方式进行校准。该项目是一个练习,目的是查看仅具有512字节RAM的处理器可以实现多少功能。这意味着来自MAX30102传感器的样品必须实时处理。现有的大多数Arduino程序中的大多数都会读取100个左右的样本,然后对其进行处理。
软件问题
驱动程序问题-所用的Maxim MAX30102传感器安装在MH-ET LIVE转接板上。MAX30102的Maxim数据手册暗示但未明确指出LED1为红色,LED2为红外(IR),但是,如果LED1的幅度设置为零,则红色LED(如手指所示))图像保持点亮,而如果LED2设置为零,则红色LED熄灭。显而易见的结论是,LED1是IR且LED2是红色(即被交换),在计算血氧时也起作用-参见下文。我提到这是MAX30102在Arduino项目中使用的最常见的驱动程序,是SparkFun 3010x驱动程序,该驱动程序可以清晰地标识带红色的LED1和带红外的LED2。这对于安装在Sparkfun板上的MAX30105器件可能是正确的,但似乎不适用于MH-ET-LIVE板上的MAX30102。
Spo2计算“ SpO2代表外周毛细血管血氧饱和度,是对血液中氧含量的一种估计。更具体地说,它是氧合血红蛋白(含氧的血红蛋白)相对于血液中血红蛋白总量(氧合和非氧化血红蛋白)。”
氧化血红蛋白和脱氧血红蛋白对于红色和红外波长具有不同的光吸收特性。这是MAX30102等传感器的基础。计算使用比率:
R = (AC_red/DC_red)/(AC_IR/DC_IR)
其中AC_xxxxxx信号的波动分量DC_xxx是固定分量。tinyPulsePPG 在两个不同的公式中使用R。较高的百分比来自经典公式:
R = 104 – 1.7 * R
下部使用来自Maxim Arduino驱动程序的表格,该表格近似为公式:
-45.060 * R * R + 30.354 * R + 94.845
在去除DC元素之后,AC在tinyPulsePPG中计算为信号的峰峰值幅度。DC元素由指数移动平均滤波器计算,AC也经过滤波。我没有对这些过滤器中的常数进行足够的实验来确定对SpO2计算的影响,或者这种方法对这些数量的计算的可靠性。
PPG显示来自传感器的读取和IR信号经过两个阶段的过滤。如上所述的第一个是去除DC元件。第二个是移动平均滤波器,它充当低通滤波器,以在信号输入到差拍检测器之前消除瞬变。可以显示每个滤波器之后的波形,但是,通常,未平均的波形会更有趣。
例如,在项目照片和上面的第一个视频中可以看到重瓣刻痕- “脉搏描记下降部分的二次上冲,对应于主动脉瓣关闭时主动脉压力的瞬时增加。-Merriam Webster词典”
我已经注意到,如果这个重音陷波特别强(较年轻的人),它可以克服第二阶段的滤波,并导致拍子检测器产生错误的输出,该信号实际上在波动中寻找波峰和波谷。正在进行的工作!
步骤三 电路搭建
使用Spence Konde的ATtinyCore将ATtiny85配置为以16 MHz运行。因此,根据数据手册,电源电压应> 4.5V。实际上,它似乎可以很方便地用锂电池(3.7-4.2V)运行。
心每跳动一次红色的led脉冲就会出现一次。PPG显示每50毫秒更新一次。视频显示了波形,然后将其传递给移动平均滤波器,该滤波器会平滑波形以进行峰值/差拍检测。如果未将手指放在传感器上,板上的单个按钮会在10秒钟后进入睡眠状态。此外它还会循环显示四个选项,这些选项允许用户显示从红色指示灯检测到的波形以及从红外指示灯显示的波形。
骤四 编写程序
code
代码
步骤五 验证结果
当我们用手按住传感器的位置,oled上会显示血氧含量和脉搏速度等我们需要的信息。
小白想试试,请问线路怎么连接的啊
照着文章的原理图连接