风筝
发表于: 2022-4-7 15:38:27 | 显示全部楼层

在b本篇文章中,我们将使用HRM-2511-E Easy脉搏传感器和Arduino开发板制作自己的心率/BPM计,并检查光电体积描记(PPG)波形。市场上有许多低成本的脉搏传感器可用于制作脉搏BPM监测系统。我们已经在之前的帖子中讨论了一些脉搏传感器,例如简单脉搏传感器和MAX30100脉搏血氧计。但是在准确性和稳定性方面,传感器并不可靠。如果您移动或放错手指,传感器值波动很大,并且无法给出正确的读数。


这就是为什么我们需要使用一些好的脉冲传感器的原因。在我看来,最稳定和性能更好的脉搏传感器是基于HRM-2511-E的脉搏传感器,因为它带有外壳。Easy脉搏传感器HRM-2511-E是脉搏传感器的更好版本,与世界著名的脉搏传感器MAX30100相比,它提供更准确和更好的结果。


在本文中,我们将连接Easy脉搏传感器、Arduino开发板和OLED显示屏。我们将使用一些Arduino示例代码在串口绘图仪上观察PPG波形。然后,我们将在0.96寸OLED显示屏上显示脉搏率或BPM值。如果您想使用 Arduino了解光电体积描(PPG),该传感器是非常好的选择。


所需的组件

●    Arduino Nano开发板

●    HRM-2511-E脉搏传感器

●    0.96寸I2C OLED显示屏

●    9V - 12V直流电源

●    连接跳线

●    面包板


Easy脉搏传感器

Easy-Pulse-Sensor.jpg


Easy脉搏传感器(Easy Pulse Sensor)是一款DIY脉搏传感器,专为业余爱好者和教育应用而设计。它用于说明光电容积描记术 (Photoplethysmography,PPG) 的原理。PPG 是一种非侵入性技术,用于检测来自指尖的心血管脉搏波形。 Easy Pulse Sensor使用传输模式PPG探头 (HRM-2511E) 传感器。


传感器使用红外光源照亮一侧的手指。在传感器的另一侧,有一个光电探测器,可以测量由于组织内血容量的变化而导致的透射光强度的微小变化。板载组件和仪器提供干净且经过过滤的模拟PPG波形。板载 LED 还指示数字脉冲输出。模拟和数字信号都与心跳同步。

PPG-Signal.jpg


Easy脉搏传感器的特点

●    稳定的PPG信号输出(使用Arduino生成Photoplethysmography PPG)

●    MCP6004基于运算放大器的仪器,具有轨到轨输出能力,可实现最大输出信号摆幅

●    独立的模拟和数字输出

●    模拟输出的电位器增益控制

●    数字输出的脉冲宽度控制

●    板载附加测试点,用于分析仪器不同阶段的信号

●    输出为+3.3V & +5V

●    易于将 Easy脉搏传感器与Arduino或任何其他微控制器连接


将Easy脉搏传感器与Arduino连接

现在让我们将Easy脉搏传感器与Arduino开发板连接起来。连接相当简单。您可以按照以下电路图进行操作。

Heart-Beat-Sensor-Arduino.jpg


将Easy脉搏传感器的5V引脚连接到Arduino的5V引脚,将GND连接到GND。将传感器输出引脚连接到Arduino的A0引脚。输出值为模拟型。您可以使用3.3V输出,也可以使用5V输出。将OLED显示屏的I2C引脚,即 SDA和SCL连接到Arduino的A4和A5引脚。您可以使用 3.3V 或 5V 为 OLED 显示器供电。最好使用 3.3V 电源为其供电。


将所有的组件连接起来,效果如下:

Device-Assembly.jpg


测试PPG信号代码

这是来自模拟示例代码的简单代码。 此示例代码将在1毫秒间隔后读取模拟输出值。 您可以修改代码以使其为10毫秒。 该波形类似于从Arduino代码和脉冲传感器输出生成的光电容积描记波。


复制代码并将其上传到Arduino Nano开发板。

  1. void setup() {
  2.   // initialize serial communication at 9600 bits per second:
  3.   Serial.begin(9600);
  4. }

  5. // the loop routine runs over and over again forever:
  6. void loop() {
  7.   // read the input on analog pin 0:
  8.   int sensorValue = analogRead(A0);
  9.   // print out the value you read:
  10.   Serial.println(sensorValue);
  11.   delay(1);        // delay in between reads for stability
  12. }
复制代码

上传代码后,从工具菜单中打开串口绘图仪。串口绘图仪将在屏幕上绘制光电体积描记 (PPG) 波形。

Serial-Plotter.jpg


读取BPM值的代码

上面的代码读取模拟值并绘制图表。因此,从上面的代码中,我们可以根据脉冲计数计算BPM值。


要计算脉搏,我们必须确定应该将哪个脉搏计为节拍。为此,我们需要确定阈值。所以在本例中,我将使用 600 ADC 值作为上限阈值。因此,当ADC达到 600 以上时,脉冲将计为节拍。我还将指定500作为较低的阈值。这意味着当ADC值降至 0 时,节拍状态将为零。这将有助于再次计算节拍。


然后很容易计算节拍数。我将串口监视器上的每个节拍打印为最多15秒的数字。在60秒内,节拍将是4次,因此需要将节拍值乘以4。所以现在可以推导出BPM中的脉率。


复制以下代码并将其上传到Arduino开发板。

  1. boolean countStatus;
  2. int beat, bpm;
  3. unsigned long millisBefore;

  4. // the setup routine runs once when you press reset:
  5. void setup()
  6. {
  7.   // initialize serial communication at 9600 bits per second:
  8.   Serial.begin(9600);
  9. }

  10. // the loop routine runs over and over again forever:
  11. void loop()
  12. {
  13.   // read the input on analog pin 0:
  14.   int sensorValue = analogRead(A0);
  15.   // print out the value you read:
  16.   //Serial.println(sensorValue);
  17.   if (countStatus == 0)
  18.   {
  19.     if (sensorValue > 600)
  20.     {
  21.       countStatus = 1;
  22.       beat++;
  23.       Serial.println("Beat Detected!");
  24.       Serial.print("Beat : ");
  25.       Serial.println(beat);
  26.     }
  27.   }
  28.   else
  29.   {
  30.     if (sensorValue < 500)
  31.     {
  32.       countStatus = 0;
  33.     }
  34.   }
  35.   if (millis() - millisBefore > 15000)
  36.   {
  37.     bpm = beat * 4;
  38.     beat = 0;
  39.     Serial.print("BPM : ");
  40.     Serial.println(bpm);
  41.     millisBefore = millis();
  42.   }
  43.   delay(1);        // delay in between reads for stability
  44. }
复制代码

上传代码后,打开您的串口监视器。 串口监视器将显示节拍计数以及BPM值。

BPM-Vales.jpg


在OLED显示屏显示BPM值

为了让这个Arduino Easy脉搏传感器更有趣,您可以在OLED屏幕上显示BPM值。 您可以在每次心跳检测时为心脏图片制作动画。 这段代码的原作者是Miliohm网站。 您可以在此处关注原始文章。


此代码需要SSD1306驱动程序库Adafruit GFX库。 下载库并添加到 Arduino 库文件夹。 ppg.rar (1.48 KB, 下载次数: 3)


代码上传到Arduino开发板后,OLED显示屏将开始显示一些值。当没有手指连接到传感器时,BPM值将为零。脉搏率或BPM值现在为零。 这是因为由于没有手指和血液泵送机制,脉搏传感器没有检测到任何转换。


当您将手指插入外壳时,脉搏传感器将开始读取节拍。 在此过程中,OLED将显示心脏动画以及脉搏计数。 但是,由于手指放置不当,某些读数可能不正确。

Heart-Animation.jpg


计算节拍15秒后,它将计算BPM值。 最后,最终的BPM将显示在OLED屏幕上。本文中,BPM值的范围是84到92。

Easy-Pulse-Sensor-Arduino-BPM.jpg


以上就是如何使用Arduino和Easy脉搏传感器来读取BPM值和PPG值。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-26 20:21 , Processed in 0.041702 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表