Gravity: MAX30102 心率血氧传感器

简介

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

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

特性

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

应用场景

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

佩戴示意


  • 指腹贴合传感器并使用配套绑带固定

技术规格


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

引脚说明

序号 丝印 功能描述
1 D/T I2C数据线/TX
2 C/T I2C时钟线/RX
3 GND 电源负极
4 VCC 电源正极

Arduino使用教程

准备

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

接线图


样例代码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 (https://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 ”即可。重启树莓派主控板。

  1. 安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
    在终端中,依次键入如下指令,并回车:

pi@raspberrypi:~ $ sudo apt-get update

pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git

  1. 下载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;
}

Mind+ Python模式编程(行空板)

Mind+Python模式为完整Python编程,因此需要能运行完整Python的主控板,此处以行空板为例说明

连接图

操作步骤

1、下载及安装官网最新软件。下载地址:https://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装

2、切换到“Python模式”。“扩展”中选择“官方库”中的“行空板”和“pinpong库”中的”pinpong初始化“和“MAX30102心率血氧传感器”。切换模式和加载库的详细操作链接

3、进行编程

4、连接行空板,程序点击运行后,可在终端查看数据。行空板官方文档-行空板快速上手教程 (unihiker.com)

代码编程

以pinpong库为例,行空板官方文档-行空板快速上手教程 (unihiker.com)

#  -*- coding: UTF-8 -*-

# MindPlus
# Python
from pinpong.libs.dfrobot_max30102 import DFRobot_BloodOxygen_S
from pinpong.board import Board
import time


Board().begin()
p_max30102 = DFRobot_BloodOxygen_S()
while (False == p_max30102.begin()):
	print("init fail!")
	time.sleep(1)


while True:
    p_max30102.sensor_start_collect()
    print((str("血氧:") + str(p_max30102.get_spo2())))
    print((str("心率:") + str(p_max30102.get_heartbeat())))
    time.sleep(1)

常见问题

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

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

更多

DFshopping_car1.png DFRobot商城购买链接