×

自制的血氧计传感器开源分享

消耗积分:5 | 格式:zip | 大小:0.21 MB | 2022-10-26

吴藩

分享资料个

描述

在这段隔离期间,我已经建立了一个血氧计,里面已经有零件。毕竟,血氧计只是由两个 LED 和一个光电二极管组成。

我不是医学知识专家,在项目的这个阶段,我不确定这项工作是否具有诊断价值,但这是一个很好的教育项目,可以研究它是如何工作的,并且可能通过一些技巧它可以成为一个自制的医疗工具。

氧饱和度和 COVID-19

在我们生命中这个令人难以置信的时期,我们学到了很多关于病毒、肺、外科口罩、肥皂和洗手的知识。每个人都会阅读有关咳嗽、发烧和呼吸困难等症状的信息。我们还知道,测量呼吸困难的一种方法是读取我们血液中的氧气含量。

可以使用称为血氧计的医疗设备间接读取此测量值您可能已经看过它,它是一种放置在手指上的非侵入性设备,带有一些脉动灯来完成工作。像这样:

通常,当您没事时,您的氧饱和度 (SpO2) 百分比接近或大于 95%。当饱和度低于 90% 并且您有咳嗽和发烧时,这是一个问题。

如果任何制造商都可以制造一个血氧计,那么发现感染会更容易,并且可以帮助人们在问题确实存在而不是恐慌发作时决定去医院。

一、了解心跳传感器的工作原理

我已经开始使用KY-039心跳传感器开始这个项目,我在我们许多人家里都有的套件传感器中找到了它。正如您在下面的电路中看到的那样,它只是一个点亮光电二极管的红外 LED。还有两个电阻保护LED和读取传感器的小信号。

因此,如果您没有 KY-039 传感器,您可以用很少的组件构建自己的传感器。

pYYBAGNYeziAayceAACqjan4FRU896.jpg
KY-039 心跳传感器架构
 

手指放在传感器和光电二极管之间,就像这张照片(最初取自此站点并修改):

poYBAGNYezqABdOMAAEGxzXhFHo239.jpg
通过手指的红外波到达光电二极管
 

红外线 LED 发出的光部分被指甲、皮肤和手指的所有其他部位吸收,但它不是恒定的,因为它会随着静脉中血液的变化而变化。当您的心脏跳动时,血液会被推入您的静脉,并且光吸收会发生变化。我们可以测量由到达它的红外光照射的光电二极管产生的电流。

KY-039 传感器有一个S (信号)引脚来读取该变化值。

我们可以通过计算信号的峰值来测量心跳率

从传感器的可变信号中读取值并不容易,因为有很多噪声,信号非常低,我们需要进行一些数学运算以找到要绘制的好值。

我必须感谢Johan Ha 的这篇有用的帖子,它解释了如何计算信号的平均值,还解释了如何消除家用灯产生的噪音(那盏灯是噪音!)。

诀窍是创建一个数组,我们在其中推送一个值并删除一个值,以获取从传感器读取的最后 X 值的平均值。他还描述了一种通过计算 N 个增长值来找到信号上升的方法。我的意思是,当一个值比前一个值大 N 倍时,它是一个峰值。

使用 Arduino 串行绘图工具或其他串行工具分析打印在 COM 端口上的值(例如SerialPlot ),并尝试不同的值,我们可以定义正确的数字 N (rise_threshold代码中的常数)。如果您定义的数字太大或太小,您可能会错过一些节拍或将重心节拍计节拍。

一旦您了解了如何微调峰值,只需计算它们,或计算一小部分节拍之间的时间以确定您的BPM速率(每分钟节拍数)。

构建血氧计(破解 KY-039 传感器)以查找氧饱和度

随着光波长的变化,我们的血液以不同的方式吸收光。红光(~600nm)更容易被含氧量较多的血液吸收,因此我们可以将红外灯( )与红色灯的测量值进行比较,~950nm并找出我们血液中氧气的百分比。该值称为外周毛细血管氧饱和度)。Sp02%

因为我有一个 KY-039 传感器,所以我决定对其进行修改。它只有一个红外 LED,所以我添加了一个RED LED,将IR LEDVcc断开, 并用一个电阻将两个 LED 连接到 Arduino 的两个不同引脚。330 ohm

(如果你没有 KY-039 传感器可以修改,你可以构建它,它只是几个 LED、一个光电二极管和 3 个电阻,原理图非常简单!)

这是修改后的传感器的示意图:

pYYBAGNYez2AGYd2AAB6IYApAYk232.jpg
KY-039 修改架构
 

这样我们就可以打开IR LED并从KY-039 S引脚读取值,然后我们可以关闭IR LED并打开RED LED,并从KY-039 S引脚读取值。

这是我的:

poYBAGNYez-AcxP5AABsSfU5ess224.jpg
KY-039 加红灯
 

如果您绘制这两个信号,您可以看到 IR 值始终低于 Red 值。

poYBAGNYe0GAUewFAABlNBn-jjQ139.jpg
光电二极管接收到的 IR LED 信号和 RED 信号
 

要找到良好的信号,请记住将指尖正确放在光电二极管上,并且 LED 应接触指甲,当您找到一个舒适的位置并在图上读取良好时,请勿更改它。

由于信号低且噪声问题很大,为了获得有用的测量值,我注意到始终需要良好的环境光。所以,测量时不要移动手指,也不要改变光线,传感器上的阴影可能会改变一切。

如何测量饱和 SpO2%

氧饱和度水平 (SpO2) 是氧饱和血红蛋白相对于总血红蛋白的比例,是称为R的参数的函数(我在米兰理工大学的一篇学术论文中找到了此信息),使用最小值计算和两个信号的最大值:

R = ( (REDmax-REDmin) / REDmin ) / ((IRmax-IRmin) / IRmin)

每台仪器都有自己的R ,需要校准才能找到将 R 与 SpO2% 连接起来的曲线(函数)。

我们已经计算了峰值的数量,但现在我们需要找到两条曲线(RED led 和IR led)的最大值最小值。

为了完成这项工作,我们评估心跳的“周期”(即一个心跳持续多少毫秒)并将其除以采样率以确定有多少样本构成一个周期。在我们的例子中,采样率为 40 毫秒,因为我们读取 IR LED 20 毫秒,然后再读取 20 毫秒的 RED LED。

节拍周期是信号中两条上升曲线之间经过的时间。

所以我可以分析我保存在数组中的最后L个样本(其中 L = period / 40),以找到REDmax REDmin IRmaxIRmin值。

使用最大值和最小值,我可以计算R

R、L 和 period 是每拍计算一次,所以 R 的演算也是对每拍进行的。

从 R 到 SpO2%:如何校准血氧计?

将RSpO2联系起来的函数可以用一条直线简化:

SpO2 = K * R + M

所以我们需要两个点(SpO2 和 R 的两对值)来确定 K 和 M。找到这两个点的唯一方法是使用另一个血氧计并从其显示屏上读取值。

新的血氧仪将作为参考,我们在测量自制血氧仪的 R 值时读取 SpO2 值。

第一次正常呼吸,然后读取 SpO2 和 R 的值。写下来。

然后尝试保持呼吸,10-20 秒后,您将在新血氧仪中读取 SpO2 下降,您还应该看到血氧仪的 R 参数在增加。在昏厥之前,写下达到的 SpO2 值和您的 R 参数值。

求解二次方程并为您的血氧计找到 K 和 M。

现在可以计算每个测量R的bpmSpO2

我还添加了一个显示来显示所有数字,仅当我发现至少 5 个周期测量值变化不大(±10%周期长度)时才显示值。通过这种方式,我删除了变化太大的值,这些值取决于不良组件或环境光或手指移动的变化。

c值表示显示的值是用c稳定测量值计算的。

 

项目改进:去除环境光变化

在玩了几天我的项目后,我找到了改进它的方法。

我注意到,使用这些低成本组件(我们只使用 LED 和光电二极管!)这些措施过多地依赖于环境光,如果我们想在真实环境中正确读取数据,这不是一件好事工作环境。因为我注意到在阳光明媚的日子比在阴天或晚上使用电灯时效果要好,所以我决定添加第三个 LED,它始终亮着,只为手指提供光线.

pYYBAGNYe0WAImV1AAT0hUerLPQ898.jpg
带三个 LED 的传感器(红 ir 白)
 

使用这个 3-led 传感器,还可以在黑布下采取措施,以排除可能随时变化的环境光。

poYBAGNYe0mAOr9DAAVcXcOZSgs653.jpg
采取更好的措施
 

现在,结果更好,不再依赖于环境光。

我还必须重新校准血氧计,正如您在几秒钟后从视频中看到的那样,它正确地找到了bpmSpO2%

 

 


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !