You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GY-MAX30100心率输出值偏高(150-250bpm)但SpO2正常的问题求助

心率偏高问题的解决方案(MAX30100/MAX30102 + NodeMCU/Wemos D1 Mini)

问题描述

使用Oxullo的MAX30100lib库中MAX30100_minimal示例程序,搭配GY-MAX30100模块采集心率与SpO2数据时,在NodeMCU V3和Lolin Wemos D1 Mini设备上均出现心率输出值处于150-250bpm区间(明显偏高),但SpO2数值正常的问题。已尝试修改库中采样率、LED电流等配置,更换为MAX30102模块后,上传SparkFun库的example8程序出现内存转储无法执行,寻求解决方案。

使用代码如下:

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"

#define REPORTING_PERIOD_MS     1000

PulseOximeter pox;

uint32_t tsLastReport = 0;

void onBeatDetected()
{
    Serial.println("Beat!");
}

void setup()
{
    Serial.begin(115200);

    Serial.print("Initializing pulse oximeter..");

    if (!pox.begin()) {
        Serial.println("FAILED");
        for(;;);
    } else {
        Serial.println("SUCCESS");
    }

    pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
    pox.setOnBeatDetectedCallback(onBeatDetected);
}

void loop()
{
    pox.update();

    if (millis() - tsLastReport > REPORTING_PERIOD_MS) {
        Serial.print("Heart rate:");
        Serial.print(pox.getHeartRate());
        Serial.print("bpm / SpO2:");
        Serial.print(pox.getSpO2());
        Serial.println("%");

        tsLastReport = millis();
    }
}

解决方案

一、调整库参数与算法逻辑

  • 降低心跳检测阈值:Oxullo库默认的检测阈值易导致噪声误判,在setup函数中添加以下代码调整灵敏度:
    pox.setBeatDetectionThreshold(30); // 调低阈值,减少误触发(默认值通常为50)
    pox.setSampleRate(MAX30100_SAMPRATE_100HZ); // 选择100Hz采样率,平衡精度与资源占用
    
  • 增加心率数值滤波:对输出心率做滑动平均,过滤异常波动,修改loop中的输出逻辑:
    static int hrBuffer[3];
    static int bufferIndex = 0;
    int currentHR = pox.getHeartRate();
    
    // 填充缓冲区
    hrBuffer[bufferIndex++] = currentHR;
    bufferIndex %= 3;
    
    // 计算平均值并输出合理范围的心率
    int avgHR = (hrBuffer[0] + hrBuffer[1] + hrBuffer[2]) / 3;
    if (avgHR >= 40 && avgHR <= 180) { // 限定正常心率区间
        Serial.print("Heart rate:");
        Serial.print(avgHR);
        Serial.print("bpm / SpO2:");
        Serial.print(pox.getSpO2());
        Serial.println("%");
    }
    

二、硬件与连接排查

  • 确认I2C引脚连接:NodeMCU V3和Wemos D1 Mini的I2C引脚对应为SDA(D2)、SCL(D1),检查焊接或杜邦线连接是否牢固,避免接触不良产生信号噪声。
  • 优化佩戴方式:传感器需紧贴指尖,避免晃动。可使用固定带将模块固定在手指上,减少环境光干扰和信号波动。
  • 稳定电源供应:USB供电不稳定会影响传感器LED驱动,尝试使用5V/1A外接电源供电,避免端口供电不足。

三、库的替换与适配

  • 切换到Adafruit MAX3010x库:该库对ESP8266系列设备兼容性更好,内存占用更低,替换后使用基础示例测试即可。
  • 优化SparkFun库示例:若坚持使用MAX30102+SparkFun库,可修改example8代码,关闭不必要的调试打印、减少缓冲区大小,降低内存占用以解决转储问题。

四、组件替换建议

  • 更换带屏蔽的MAX30102模块:MAX30102抗干扰能力优于MAX30100,选择带金属屏蔽壳的模块可减少环境光干扰。
  • 更换高质量GY-MAX30100模块:廉价模块的LED或光电二极管精度不足易产生噪声,选择正规厂商的模块可提升信号稳定性。

内容的提问来源于stack exchange,提问作者Mychal Esureña

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 18:43:15