本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

基于 ATtiny85 的脉搏血氧仪

发布时间:2021-12-10
分享到:

基于 ATtiny85 的脉搏血氧仪

发布时间:2021-12-10
分享到:

这个在 ATtiny85 上实施的项目显示了一个移动的光电容积图以及脉搏率和 SpO2 - 血氧百分比的估计值。它使用 SSD1306 128x32 OLED 显示屏和 MAX30102 传感器。需要强调的是,这不应用于医疗目的。SpO2 的计算非常近似,并且没有以任何方式校准。该项目是一个练习,看看使用只有 512 字节 RAM 的处理器可以实现多少功能。这意味着来自 MAX30102 传感器的样本必须即时处理。大多数现有的 Arduino 程序读取大约 100 个样本的块,然后处理它们。

更新

我已经把该软件的另一个版本的GitHub的库子目录nanoPulsePPG是一个标准的AVR的Arduino运行-在纳米测试,但也应在一个工作乌诺这样说,你可以轻松地尝试与该软件和传感器。请参见原理图部分。

3D Ç ASE加入-见下文!

硬件
我在原型板上实现了硬件,如下所示,但是,根据以下所示的电路图,组件同样可以组装在面包板上:

ATtiny85 配置为使用 Spence Konde 的 ATtinyCore 以 16 MHz 运行。因此,根据数据表,电源电压应 >4.5V。事实上,它似乎可以用锂电池(3.7 - 4.2V)愉快地运行。

几秒钟后,将显示以下屏幕:

当手指放在传感器上时,会显示 PPG、心率和血氧的两个估计值。

每次心跳时红色 LED 会脉冲一次。PPG 显示每 50 毫秒更新一次。该视频显示了波形在传递到移动平均滤波器之前的波形,该滤波器平滑波形以进行峰值/节拍检测。如果手指没有放在传感器上,那么在 10 秒后系统进入睡眠状态时,板上的单个按钮会唤醒系统,此外它还会循环显示四个选项。这些选项允许用户显示从红色 LEDD 检测到的波形以及从 IR LED 显示的波形。

在上图中,选择了通过移动平均滤波器后显示波形的选项。

软件问题
驱动程序问题 -使用的 Maxim MAX30102 传感器安装在 MH-ET LIVE 分线板上。MAX30102 的 Maxim 数据表暗示但没有明确说明 LED1 为红色,LED2 为红外 (IR),但是,如果 LED1 的幅度设置为零,红色 LED(如位置指) 图片保持点亮,而如果 LED2 设置为零,则红色 LED 熄灭。显而易见的结论是 LED1 是 IR 而 LED2 是红色(即交换),这在计算血氧时也有效 - 见下文。我提到这是因为 MAX30102 的 Arduino 项目中最常用的驱动程序是 SparkFun 3010x 驱动程序,它清楚地识别 LED1 为红色,LED2 为 IR。这可能适用于安装在 Sparkfun 板上的 MAX30105 器件,但似乎不适用于 MH-ET-LIVE 板上的 MAX30102。

Spo2 计算“SpO2 代表外周毛细血管氧饱和度,是血液中氧含量的估计值。更具体地说,它是含氧血红蛋白(含氧血红蛋白)与血液中血红蛋白总量(含氧和非氧化血红蛋白)。”

氧合血红蛋白和脱氧血红蛋白对红光和红外波长具有不同的光吸收特性。这是 MAX30102 等传感器的基础。计算使用比率:

R = (AC_red/DC_red)/(AC_IR/DC_IR)

其中AC_xxx是 xxx 信号的波动分量,DC_xxx是固定分量。tinyPulsePPG在两个不同的公式中使用 R。上面的百分比来自经典公式:

R = 104 - 1.7 * R

下层使用来自 Maxim Arduino 驱动程序的表格,它是公式的近似值:

-45.060 * R * R + 30.354 * R + 94.845

AC 在tinyPulsePPG 中计算为去除 DC 元素后信号的峰峰值幅度。DC 元素由指数移动平均滤波器计算,AC 也被过滤。我还没有对这些过滤器中的常数进行足够的实验来确定对 SpO2 计算的影响,或者这种方法计算这些量的可靠性。

PPG 显示来自传感器的读取和红外信号经过两个阶段的过滤。如上所述,首先是去除直流元件。第二个是移动平均滤波器,它充当低通滤波器以在信号输入到节拍检测器之前去除瞬态。可以显示每个过滤器之后的波形,但是,通常未平均的波形更有趣。

例如,在项目照片和上面的第一个视频中可以看到重瓣切迹 - “在主动脉瓣关闭时主动脉压力瞬时增加对应的脉搏曲线下降部分的二次上升。-韦氏词典”

我已经注意到,如果这个重发性凹口特别强——年轻的个体——它可以克服第二阶段的过滤并导致心跳检测器的错误输出,该检测器主要寻找波中的波峰和波谷。正在进行的工作!

3D打印案例
我添加了一个指向包含 OpenScad 和 STL 文件的存储库的链接,如下所示:

您需要调整外壳的高度和电路板的高度以适合您的电路板和电池。上图所示的电路板比原始版本(8 毫米)低。

本方案所用到的一些代码

如果您对此项目有任何想法、意见或问题,请在下方留言。

原文链接丨以上内容来源网络,如涉及侵权可联系删除。

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论