亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

用光敏电阻检测心率

组件和用品

Digilent OpenScope MZ
× 1
Arduino UNO
× 1
Texas Instruments 通用四路运算放大器
× 1
德州仪器高速单比较器
× 1
多圈精密电位器 - 10k ohms(25圈)
× 2
单圈电位器 - 100k ohms
如果你能得到一个多圈电位器,它会更容易调整。
× 1
单圈电位器 - 10k ohms
× 1
电容 100 µF
× 1
电容 100 nF
× 1
电阻 10k ohm
或者单个 20k
× 2
电阻 4.75k ohm
× 1
电阻 82k ohm
您也可以使用 100k 电位器中的两个,并将一个设置为 82k。
× 1

应用和在线服务

Arduino IDE
Digilent WaveForms Live

关于这个项目

简介

该项目的灵感来自 CapitanoRed 发布的 YouTube 视频 ,作者制作了一个基于光敏电阻的心率监测器以在示波器上显示。看了他们的视频后,我想复制这个项目并添加一个 Arduino 来计算和显示心率。这样您就可以在示波器上查看波形,同时还能读取您的心率。

当心脏收缩并推动全身血液流动时,可以检测到血压的瞬时波动。这就是我们能感觉到脉搏的原因。在皮肤和肉足够薄的身体区域,这些脉冲可以在通过的光的轻微变化中被检测到。虽然我们的眼睛不够敏感,甚至连穿过我们身体的光线都看不到,更不用说波动了,但光敏电阻确实有这种敏感度。

光敏电阻的电阻会随着落在其上的光强度而变化。尽管对于照明强度的细微变化,电阻的变化可能非常小,但可以使用几个运算放大器 IC 将其放大。

操作原理

下图显示了电路原理图以及该项目中使用的面包板。

光敏电阻与 20kΩ 电阻器处于分压器中,这意味着随着电阻器上的光量增加,分压器上的电压也会增加。第一个运算放大器(上图中的“Amp1”)用作分压器的滤波器,从信号中去除高频噪声。第二个运算放大器(“Amp2”)用作反相放大器,设置为最大化通过滤波器的信号。第三个运算放大器 (“Amp3”) 设置虚拟接地,将信号集中在 2.5V。这确保运算放大器能够提供从 0V 到 5V 的最大信号摆幅。信号经过滤波放大后是这个样子。

为了让 Arduino 能够测量您的心率,信号需要通过比较器(原理图中的“Cmp”)。比较器是一种专门的运算放大器,旨在输出高电平或低电平信号。当正输入端电压大于负输入端电压时比较器输出高电平,当正输入端电压小于负输入端电压时比较器输出低电平。在其最基本的配置中,比较器用作阈值检测器,在测量电压高于或低于该阈值时发出信号。由于比较器输出高 (5V) 或低 (0V),因此非常适合与 Arduino 的数字引脚接口。

仔细观察来自运算放大器的信号图像,很明显在电压下降之前有一个次级脉冲(这称为重频陷波)。此外,信号中存在大量噪声。这两个事实意味着基本的比较器配置将无法正确检测脉冲。比较器将生成多个脉冲,而不是每次心跳都有一个方波脉冲。之所以会发生这种情况,是因为噪声会导致信号在上摆和下摆时多次越过阈值,并且根据阈值的设置位置,可能在重波陷波期间。这将导致 Arduino 计数的脉冲比实际存在的多得多。

可以使用滞后来处理嘈杂的信号。 本文件 德州仪器 (TI) 撰写的关于具有迟滞的信号调理主题的精彩讨论,展示了信号噪声如何影响比较器性能,以及如何处理这些问题。我使用他们的原理图和派生方程(分别为文档的第 5 页和第 7 页)来设计该项目的非对称比较器。总体思路是来自输出的反馈回路将改变正输入端的电压,这意味着从低到高的阈值将不同于从高到低的阈值。在心脏脉冲的背景下,这意味着比较器可以设置为在上摆时的一个点触发,然后在下摆时的不同点上触发,最好是在重波切迹之后。这样,Arduino 将看到每个心跳的单个方形脉冲,如下所示。

光敏电阻的制备

我强烈建议在光敏电阻上使用某种透明覆盖层,例如透明热收缩层。至少,请确保完全覆盖导线,以免它们接触到您的皮肤。您身体产生的电压完全在光敏电阻检测到您的脉搏时所产生的范围内,因此与您的皮肤接触可能会影响结果。

调整心率监测器

对于原理图 (R7) 中的电位器,使用单圈电位器并调整它以最大化运算放大器的增益,而不会进入饱和状态。首先将电位计的一侧设置为大约 375Ω,并将滤波器(“Amp1”)连接到这一侧。这个增益量应该产生足够的脉冲,您将能够在 WaveForms Live 中看到它。按照下一部分(“实时查看 WaveForms 中的脉冲”)中的步骤并成功查看您的脉冲后,您可以根据需要更改增益。转动电位器增大脉冲幅度,使滤波器侧电阻变小。如果幅度已经太大导致削波,则将滤波器侧电阻调大。阅读随后图像上的说明,以确定理想的信号是什么样的。

我建议对电阻器 R3 和 R4 使用多圈电位器,以便精确设置比较器的阈值。电阻 R5 可以是 10-100kΩ 范围内的任何电阻,只要精确测量即可。您可以使用附件部分中的电子表格,根据 R5 的测量值和阈值电压来确定将 R3 和 R4 设置为哪些值。阈值“Vl”和“Vh”将需要根据您将通过示波器看到的脉冲进行更改(请参阅标题为“设置比较器阈值”的部分)。

电阻器R8和R9可以用一个电位器代替,中间引脚连接到运算放大器的正输入端。通过这种方式,无需寻找匹配电阻即可轻松调整虚拟接地。使用电压表或 OpenScope 将输出调整为 2.5V。

在 WaveForms Live 中查看脉冲

为了通过 WaveForms Live 查看您的心跳,您需要更改菜单中的一些设置。默认情况下,输出要么被拉长且难以解释,要么更新速度非常慢,难以调整您对光敏电阻的抓地力以产生清晰的脉冲。

将 OpenScope 示波器通道 2(蓝线)连接到“Amp2”的输出,并确保地线连接到面包板上的地。在 WaveForms 中实时更改 时间 到“1s”和触发器 菜单按OFF 按钮。对于 Osc Ch 1 Osc Ch2 菜单集偏移 到 2.5V 和 Samples 旁边 单击锁定图标并在可用的字段中键入“1000”。这将使信号出现在易于解释的时间刻度上,但会使更新比默认情况下更频繁地发生。屏幕应每 4 秒左右更新一次。如果这仍然太慢,您可以增加 Samples 值,但以较短的信号片段为代价(“2000”将一次捕获大约一个心跳)。

运行 按钮并用手指在光敏电阻上测量脉搏。您需要找出获得一致结果的最佳方法。该系统对压力变化非常敏感,因此您需要找到一种方法让您的手指保持静止。我发现测量脉搏的最佳位置是食指的第一个关节。训练自己需要一点时间,但最终你会找到最好的方法。如果您的脉搏看起来太小,请按照上一节(“调整心率监视器”)的第一段中的说明调整电位计。

设置比较器阈值

一旦信号在示波器上可见,您需要设置比较器将触发并向 Arduino 发送信号的阈值。获取有代表性的波形并停止捕获以将波形保留在显示屏上。在屏幕底部按 CURSORS 按钮。在类型下 选择“电压”并设置两个CursorChannels 到“振荡器 2”。显示屏上将出现两条水平虚线。拖动左侧的三角形以移动它们。将其中一条线设置在靠近脉冲峰值的一点,另一条线设置在重搏凹口下方的一点。查看屏幕底部并记录括号中显示的两个电压。在最后附上的电子表格中输入这些值作为阈值电压“Vl”和“Vh”。较小的值为“Vl”,较大的值为“Vh”。根据这些值和您选择的电阻器 R5 值,设置电子表格计算的电位器 R3 和 R4 值。

比较器设置后,应该开始输出类似于“光敏电阻的准备”部分之前的信号。

Arduino代码

Arduino 代码由一个频率计数器和一个计算每分钟心跳次数的方法组成。频率计数器会考虑来自比较器的脉冲宽度,并拒绝任何小于 200 毫秒或大于 800 毫秒的信号。这将防止它在光敏电阻不用于测量并且比较器可能处于高、低或在两种状态之间快速切换时显示错误数据。该代码保持前 15 秒心率的运行平均值,以滤除因意外运动引起的信号噪声而错过的脉搏。

未来的改进

该项目的主要缺点是难以保持光敏电阻的脉冲幅度相同。由于传感器依赖环境光进行脉冲检测,因此一天中不断变化的光照水平可能会导致不同的结果。我注意到在阴天时我的比较阈值太宽,而在光线充足的日子里,重搏凹口非常明显,可能会导致错误的脉搏检测。此外,即使是由房间内移动引起的细微光线变化,光敏电阻也能检测到。一致性问题可以通过几种不同的方式来解决。

传感器系统可以包括一个 LED 以提供一致的光。这类似于医生办公室使用的心脏监测夹或手机中的心率监测器。我尝试将红色 LED 放在手指顶部,光敏电阻在另一侧。结果令人鼓舞,因此如果可以制作出良好的围栏,这可能是一个可行的选择。

在软件方面,一个潜在的解决方案是在 Arduino 中使用自动量程算法。它将检测脉冲并找到它们的波峰和波谷。但是,这不足以执行心率测量。适当的频率计数器需要中断。在没有中断的情况下,Arduino 的处理器除了检查输入引脚和错过一个脉冲外,可能还会做其他事情。由于中断仅在数字引脚上可用,因此实现自动量程的最佳方法是使用数字电位器。 Arduino 将使用模拟引脚找到脉冲出现的范围,确定比较器阈值应该是多少,通过数字电位器应用它们,然后使用来自比较器的数字信号来执行频率计数。

代码

  • 比较器 calcs.xlsx
  • Arduino 心率计数器
比较器 calcs.xlsxArduino
此 Excel 电子表格将计算 R3 和 R4 值以设置比较器的不对称阈值。您可以将 R5 列更改为测量的电阻值。 Vl 和 Vh 需要更改为从心率中获取干净脉搏所需的任何阈值。
无预览(仅限下载)。
Arduino 心率计数器Arduino
此代码将根据比较器发送给它的脉冲来计算您的心率。
#define INT0 3float frequency;long timeCount;int counter;long pulseStart;int inputPin =3;boolean low;float freqAvg;float total;void设置(){ attachInterrupt(digitalPinToInterrupt(INT0),中断,改变);计数器 =0;时间计数 =0;频率 =0;低 =假; Serial.begin(9600); total =15;}void loop() { timeCount =millis(); while(millis() - timeCount <5000){ 频率 =计数器; } if(频率> 3){总+=频率;总计 -=freqAvg; freqAvg =总数/3; } showHR(); counter =0;}void intrruption(){ if(digitalRead(3) ==0){ fallDetect();低 =真; } else if(digitalRead(3) ==1){ widthCheck(); }}void fallDetect(){ pulseStart =millis();}void widthCheck(){ long pulseEnd =millis(); if((pulseEnd - pulseStart> 200) &&(pulseEnd - pulseStart <800) &&low){ counter++;低 =假; }}void showHR(){ Serial.print("Heart rate ="); Serial.println(freqAvg * 12); }

示意图

hr_monitor_tnffXlVQQV.fzz

制造工艺

  1. 体外除颤器
  2. 人造心脏
  3. 人工心脏瓣膜
  4. 心电图机
  5. 起搏器
  6. 带乳液的纸巾
  7. 用树莓派检测闪电
  8. Windows 10 IoT Core – 读取心率脉冲
  9. 远程心率监测器
  10. 检测单个原子核的磁性
  11. 集成在服装中的传感器监测心率
  12. 心脏健康始于无油压缩空气