Fermion: MAX30102 心率血氧传感器 V2.0

简介

DFRobot MAX30102 心率血氧传感器模块搭载了美信(maxim)的MAX30102心率血氧芯片和一颗集成心率血氧算法的微控制器,可以直接输出心率血氧数值。
MAX30102采用PPG光电容积脉搏波描记法(PhotoPlethysmoGraphy)测量数据,微控制器对这些数据进行处理运算过后得到心率血氧数值,再通过I2C或UART接口输出,大大降低了传感器的使用难度和对主控的资源占用。同时该传感器还配备有对应的上位机,可通过电脑直接读取数据。

注意:
1.手指直接按压可能会出现压力变化,压力变化会对传感器数值产生影响。建议使用捆绑的方式固定手指。
2.佩戴部位为手指,佩戴没有方向区别。
3.本品并非专业医疗仪器,不能作为辅助配件参与诊断和治疗。

特性

  • 搭载集成算法的微控制器
  • 可通过电脑上位机直接读取数据

应用场景

  • 心率血氧可穿戴项目
  • 家庭心率血氧测量仪项目
  • 心率血氧长期监测项目

佩戴示意


  • 指腹贴合传感器并保持测量时贴合位置相对不变

技术规格


  • 供电电压:3.3V
  • 工作电流:<15mA
  • 通讯方式:I2C/UART
  • I2C地址:0x57
  • 串口波特率:9600
  • 工作温度范围:-40℃~85℃
  • 产品尺寸:18*22mm

引脚说明

序号 丝印 功能描述
1 3V3 电源正极
2 GND 电源负极
3 SCL I2C时钟线
4 SDA I2C数据线
5 RST 复位引脚
6 NC 空引脚
7 3V3 电源正极
8 GND 电源负极
9 RX 串口接收引脚
10 TX 串口发送引脚
11 INT 中断引脚
心率血氧数据更新时产生脉冲信号
12 NC 空引脚

使用教程

准备

关于如何安装库文件,点击链接

接线图

样例代码1 - 获取心率血氧值

获取心率血氧值,传感器红灯亮起时开始测量心率,心率数据每4秒更新一次,4秒内依然可以获取到传感器的数据,只是在数据更新期间获取到的数据不产生变化。。

/*!
  * @file  gainHeartbeatSPO2.ino
  * @n experiment phenomena: get the heart rate and blood oxygenation, during the update the data obtained does not change
  * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
  * @licence     The MIT License (MIT)
  * @author      PengKaixing(kaixing.peng@dfrobot.com)
  * @version     V1.0
  * @date        2021-06-21
  * @get         from https://www.dfrobot.com
  * @url         https://github.com/DFRobot/DFRobot_BloodOxygen_S
*/
#include "DFRobot_BloodOxygen_S.h"

#define I2C_COMMUNICATION  //use I2C for communication, but use the serial port for communication if the line of codes were masked

#ifdef  I2C_COMMUNICATION
#define I2C_ADDRESS    0x57
  DFRobot_BloodOxygen_S_I2C MAX30102(&Wire ,I2C_ADDRESS);
#else
/* ---------------------------------------------------------------------------------------------------------------
 *    board   |             MCU                | Leonardo/Mega2560/M0 |    UNO    | ESP8266 | ESP32 |  microbit  |
 *     VCC    |            3.3V/5V             |        VCC           |    VCC    |   VCC   |  VCC  |     X      |
 *     GND    |              GND               |        GND           |    GND    |   GND   |  GND  |     X      |
 *     RX     |              TX                |     Serial1 TX1      |     5     |   5/D6  |  D2   |     X      |
 *     TX     |              RX                |     Serial1 RX1      |     4     |   4/D7  |  D3   |     X      |
 * ---------------------------------------------------------------------------------------------------------------*/
#if defined(ARDUINO_AVR_UNO) || defined(ESP8266)
SoftwareSerial mySerial(4, 5);
DFRobot_BloodOxygen_S_SoftWareUart MAX30102(&mySerial, 9600);
#else
DFRobot_BloodOxygen_S_HardWareUart MAX30102(&Serial1, 9600); 
#endif
#endif

void setup()
{
  Serial.begin(115200);
  while (false == MAX30102.begin())
  {
    Serial.println("init fail!");
    delay(1000);
  }
  Serial.println("init success!");
  Serial.println("start measuring...");
  MAX30102.sensorStartCollect();
}

void loop()
{
  MAX30102.getHeartbeatSPO2();
  Serial.print("SPO2 is : ");
  Serial.print(MAX30102._sHeartbeatSPO2.SPO2);
  Serial.println("%");
  Serial.print("heart rate is : ");
  Serial.print(MAX30102._sHeartbeatSPO2.Heartbeat);
  Serial.println("Times/min");
  Serial.print("Temperature value of the board is : ");
  Serial.print(MAX30102.getTemperature_C());
  Serial.println(" ℃");
  //The sensor updates the data every 4 seconds
  delay(4000);
  //Serial.println("stop measuring...");
  //MAX30102.sensorEndCollect();
}

结果

SEN0344_R2

主要API接口函数列表

/*!
 *  @brief 获取心率和血氧饱和度并存入到结构体sHeartbeatSPO2中
 *  @param NULL
 *  @return 没有返回值
 */
    void getHeartbeatSPO2();
/*!
 *  @brief 获取传感器板子的温度
 *  @param NULL
 *  @return 温度值(单位:摄氏度)
 */
    float getTemperature_C();

/*!
 *  @brief 传感器开始采集数据
 *  @param NULL
 *  @return NULL
 */
    void sensorStartCollect();

/*!
 *  @brief 传感器结束采集数据
 *  @param NULL
 *  @return NULL
 */
    void sensorEndCollect();

树莓派使用教程

准备

接线图

  • 将模块与树莓派按照连线图相连。I2C地址默认为0x68

安装驱动

  1. 启动树莓派的I2C接口。如已开启,可跳过该步骤。
    打开终端(Terminal),键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo raspi-config
    然后用上下键选择“ 5 Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。

  2. 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
    在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ sudo apt-get update
    pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git

  3. 下载BloodOxygen系列驱动库。在终端中,依次键入如下指令,并回车:
    pi@raspberrypi:~ $ cd Desktop/
    pi@raspberrypi:~/Desktop $ git clone https://github.com/DFRobot/DFRobot_BloodOxygen_S

注意:

样例代码

样例代码1-获取心率血氧(gain_heartbeat_SPO2.py)

  • 在终端中,键入如下指令并回车,运行样例代码:
    pi@raspberrypi:~/Desktop $ cd DFRobot_BloodOxygen_S/python/raspberry/example/gain_heartbeat_SPO2/ pi@raspberrypi:~/Desktop/DFRobot_BloodOxygen_S/python/raspberry/example/gain_heartbeat_SPO2/ $ python gain_heartbeat_SPO2.py

  • 结果

SEN0344-R1

上位机使用

将传感器与USB转串口模块进行连接


点击下载SEN0344 心率血氧传感器上位机

解压后,运行SEN0344.exe,选择号串口与波特率后点击开始测量即可。

SEN0344上位机

Modbus RTU协议

注:通讯接口使用UART

发送 主机向从机发送
功能 从机地址 功能代码 寄存器地址 寄存器个数 CRC校验
获取心率血氧 0x20 0x03/读 0x00 0x06 0x00 0x04 CRC_h CRC_l
获取温度 0x20 0x03 0x00 0x0A 0x00 0x01 CRC_h CRC_l
接收 从机反馈
功能 从机地址 功能代码 有效字节数 数据 CRC校验
获取心率血氧 0x20 0x03 0x08 SPO2(1byte) xx(1byte保留) Heartbeat(4byte) xx(2byte保留) CRC_h CRC_l
获取温度 0x20 0x03 0x02 Temp_h Temp_l CRC_h CRC_l
设置传感器采集 主机发送
功能 从机地址 功能代码 寄存器地址 寄存器个数 CRC校验
传感器开始采集 0x20 0x06 0x00 0x10 0x00 0x01 CRC_h CRC_l
传感器结束采集 0x20 0x06 0x00 0x10 0x00 0x02 CRC_h CRC_l
设置传感器采集 从机反馈
功能 从机地址 功能代码 有效字节数 数据 CRC校验
传感器开始采集 0x20 0x06 0x00 0x10 0x00 0x01 CRC_h CRC_l
传感器结束采集 0x20 0x06 0x00 0x10 0x00 0x02 CRC_h CRC_l

CRC校验

static uint16_t calculate_CRC(uint8_t *data, uint8_t len)
{
  uint16_t crc = 0xFFFF;
  for( uint8_t pos = 0; pos < len; pos++)
  {
    crc ^= (uint16_t)data[ pos ];
    for(uint8_t i = 8; i != 0; i--)
    {
      if((crc & 0x0001) != 0){
        crc >>= 1;
        crc ^= 0xA001;
      }else{
        crc >>= 1;
      }
    }
  }
  crc = ((crc & 0x00FF) << 8) | ((crc & 0xFF00) >> 8);
  return crc;
}

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。

更多

DFshopping_car1.png DFRobot商城购买链接