|
在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脉搏传感器(Easy Pulse Sensor)是一款DIY脉搏传感器,专为业余爱好者和教育应用而设计。它用于说明光电容积描记术 (Photoplethysmography,PPG) 的原理。PPG 是一种非侵入性技术,用于检测来自指尖的心血管脉搏波形。 Easy Pulse Sensor使用传输模式PPG探头 (HRM-2511E) 传感器。
传感器使用红外光源照亮一侧的手指。在传感器的另一侧,有一个光电探测器,可以测量由于组织内血容量的变化而导致的透射光强度的微小变化。板载组件和仪器提供干净且经过过滤的模拟PPG波形。板载 LED 还指示数字脉冲输出。模拟和数字信号都与心跳同步。
Easy脉搏传感器的特点 ● 稳定的PPG信号输出(使用Arduino生成Photoplethysmography PPG) ● MCP6004基于运算放大器的仪器,具有轨到轨输出能力,可实现最大输出信号摆幅 ● 独立的模拟和数字输出 ● 模拟输出的电位器增益控制 ● 数字输出的脉冲宽度控制 ● 板载附加测试点,用于分析仪器不同阶段的信号 ● 输出为+3.3V & +5V ● 易于将 Easy脉搏传感器与Arduino或任何其他微控制器连接
将Easy脉搏传感器与Arduino连接 现在让我们将Easy脉搏传感器与Arduino开发板连接起来。连接相当简单。您可以按照以下电路图进行操作。
将Easy脉搏传感器的5V引脚连接到Arduino的5V引脚,将GND连接到GND。将传感器输出引脚连接到Arduino的A0引脚。输出值为模拟型。您可以使用3.3V输出,也可以使用5V输出。将OLED显示屏的I2C引脚,即 SDA和SCL连接到Arduino的A4和A5引脚。您可以使用 3.3V 或 5V 为 OLED 显示器供电。最好使用 3.3V 电源为其供电。
将所有的组件连接起来,效果如下:
测试PPG信号代码 这是来自模拟示例代码的简单代码。 此示例代码将在1毫秒间隔后读取模拟输出值。 您可以修改代码以使其为10毫秒。 该波形类似于从Arduino代码和脉冲传感器输出生成的光电容积描记波。
复制代码并将其上传到Arduino Nano开发板。 - void setup() {
- // initialize serial communication at 9600 bits per second:
- Serial.begin(9600);
- }
-
- // the loop routine runs over and over again forever:
- void loop() {
- // read the input on analog pin 0:
- int sensorValue = analogRead(A0);
- // print out the value you read:
- Serial.println(sensorValue);
- delay(1); // delay in between reads for stability
- }
复制代码
上传代码后,从工具菜单中打开串口绘图仪。串口绘图仪将在屏幕上绘制光电体积描记 (PPG) 波形。
读取BPM值的代码 上面的代码读取模拟值并绘制图表。因此,从上面的代码中,我们可以根据脉冲计数计算BPM值。
要计算脉搏,我们必须确定应该将哪个脉搏计为节拍。为此,我们需要确定阈值。所以在本例中,我将使用 600 ADC 值作为上限阈值。因此,当ADC达到 600 以上时,脉冲将计为节拍。我还将指定500作为较低的阈值。这意味着当ADC值降至 0 时,节拍状态将为零。这将有助于再次计算节拍。
然后很容易计算节拍数。我将串口监视器上的每个节拍打印为最多15秒的数字。在60秒内,节拍将是4次,因此需要将节拍值乘以4。所以现在可以推导出BPM中的脉率。
复制以下代码并将其上传到Arduino开发板。 - boolean countStatus;
- int beat, bpm;
- unsigned long millisBefore;
-
- // the setup routine runs once when you press reset:
- void setup()
- {
- // initialize serial communication at 9600 bits per second:
- Serial.begin(9600);
- }
-
- // the loop routine runs over and over again forever:
- void loop()
- {
- // read the input on analog pin 0:
- int sensorValue = analogRead(A0);
- // print out the value you read:
- //Serial.println(sensorValue);
- if (countStatus == 0)
- {
- if (sensorValue > 600)
- {
- countStatus = 1;
- beat++;
- Serial.println("Beat Detected!");
- Serial.print("Beat : ");
- Serial.println(beat);
- }
- }
- else
- {
- if (sensorValue < 500)
- {
- countStatus = 0;
- }
- }
- if (millis() - millisBefore > 15000)
- {
- bpm = beat * 4;
- beat = 0;
- Serial.print("BPM : ");
- Serial.println(bpm);
- millisBefore = millis();
- }
- delay(1); // delay in between reads for stability
- }
复制代码
上传代码后,打开您的串口监视器。 串口监视器将显示节拍计数以及BPM值。
在OLED显示屏显示BPM值 为了让这个Arduino Easy脉搏传感器更有趣,您可以在OLED屏幕上显示BPM值。 您可以在每次心跳检测时为心脏图片制作动画。 这段代码的原作者是Miliohm网站。 您可以在此处关注原始文章。
此代码需要SSD1306驱动程序库和Adafruit GFX库。 下载库并添加到 Arduino 库文件夹。
ppg.rar
(1.48 KB, 下载次数: 4)
代码上传到Arduino开发板后,OLED显示屏将开始显示一些值。当没有手指连接到传感器时,BPM值将为零。脉搏率或BPM值现在为零。 这是因为由于没有手指和血液泵送机制,脉搏传感器没有检测到任何转换。
当您将手指插入外壳时,脉搏传感器将开始读取节拍。 在此过程中,OLED将显示心脏动画以及脉搏计数。 但是,由于手指放置不当,某些读数可能不正确。
计算节拍15秒后,它将计算BPM值。 最后,最终的BPM将显示在OLED屏幕上。本文中,BPM值的范围是84到92。
以上就是如何使用Arduino和Easy脉搏传感器来读取BPM值和PPG值。 |