亲,“电路城”已合并升级到更全、更大、更强的「新与非网」。点击查看「新与非网」

本网页已闲置超过3分钟,按键盘任意键或点击空白处,即可回到网页

DIY心率监测器和脉搏血氧仪

发布时间:2021-06-10
分享到:

DIY心率监测器和脉搏血氧仪

发布时间:2021-06-10
分享到:

 

该项目是通过 MAX30100 脉搏血氧仪心率传感器、NodeMCU ESP8266 分线板等自制心率监测器和脉搏血氧仪。

MAX30100传感器:是一款集成脉搏血氧饱和度和心率监测传感器模块。它结合了两个 LED、一个光电探测器、优化的光学器件和低噪声模拟信号处理,以检测脉搏血氧饱和度和心率信号。MAX30100 采用 1.8V 和 3.3V 电源供电,可通过软件关断,待机电流可忽略不计,允许电源始终保持连接。

系统框图:

(MAX30100框图)

示意图:

设置Blynk Android 应用程序:

Blynk 是一个运行在 Android 和 IOS 设备上的应用程序,通过智能手机控制任何基于物联网的应用程序。它允许为 IoT 应用程序创建图形用户界面。在这里,将设置 Blynk 应用程序来使NodeMCU ESP8266 通过 Wi-Fi 监控 BPM 和 SPO2。

1.所以从Google Play商店下载并安装Blynk应用程序。IOS用户可以从App Store下载。安装完成后,打开应用程序并使用电子邮件 ID 和密码进行注册。

2. 点击“新建项目”。在弹出窗口中设置如上图所示的项目名称、开发板和连接类型等参数。对于 MAX30100 ESP8266 项目,选择设备为 NodeMCU,连接类型为 Wi-Fi。然后点击创建。

3.点击“+​​”号添加小部件。需读取 BPM 和 SpO2 的值。所以选择一对名为“ValueDisplay”和“Gauge”的小部件。

4.拖动小部件后,如上图所示设置其参数。单击值显示并将引脚设置为“V7”和“V8”。同样,在仪表设置中,将输出引脚设置为“V7”和“V8”。

成功创建项目后,返回设置并单击发送电子邮件。

代码:(点击下载

#include <Wire.h>
#include "MAX30100_PulseOximeter.h"
#define BLYNK_PRINT Serial
#include <Blynk.h>
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
 
#include "Wire.h"

#define REPORTING_PERIOD_MS 1000

// PulseOximeter 是传感器的高级接口
// 它提供:
// * 节拍检测报告
// * 心率计算
// * SpO2(氧化水平)计算
 
char auth[] = "v60fhfJerBZAZzmYbwS2uSzs2Qvy6sjK";             
char ssid[] = "TP-LINK_9950";                                     // WiFi凭据。
char pass[] = "8348502146";
 
// 连接:SCL PIN - D1,SDA PIN - D2,INT PIN - D0
PulseOximeter pox;
 
float BPM, SpO2;
uint32_t tsLastReport = 0;
 
// 检测到脉冲时触发回调(在下面注册)
 
void onBeatDetected()
{
    Serial.println("Beat!");
}
 
void setup()
{
    Serial.begin(115200);
    
    pinMode(16, OUTPUT);
    Blynk.begin(auth, ssid, pass);
 
    Serial.print("Initializing Pulse Oximeter..");
    // 初始化 PulseOximeter 实例
    // 故障通常是由于 I2C 接线不当、电源缺失
    // 或错误的目标芯片
 
    if (!pox.begin()) {
        Serial.println("FAILED");
        for(;;);
    } else {
        Serial.println("SUCCESS");
    }

    // IR LED 的默认电流为 50mA,可以更改
    // 通过取消注释以下行。检查 MAX30100_Registers.h 以了解所有
    // 可用选项。
    // pox.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);

  // 为节拍检测注册一个回调

    pox.setOnBeatDetectedCallback(onBeatDetected);
 
}
 
void loop()
{
    pox.update();
    Blynk.run();
 
    BPM = pox.getHeartRate();
    SpO2 = pox.getSpO2();
    
   if (millis() - tsLastReport > REPORTING_PERIOD_MS)
    {
        Serial.print("Heart rate:");
        Serial.print(BPM);
        Serial.print(" bpm / SpO2:");
        Serial.print(SpO2);
        Serial.println(" %");
 
        Blynk.virtualWrite(V7, BPM);
        Blynk.virtualWrite(V8, SpO2);
 
        tsLastReport = millis();
    }
}

加入微信技术交流群

技术交流,职业进阶

关注与非网服务号

获取电子工程师福利

加入电路城 QQ 交流群

与技术大牛交朋友

讨论