简介
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 x Arduino UNO控制板
- 1 x Fermion: MAX30102 心率血氧传感器 V2.0
- 若干 杜邦线
-
软件
- Arduino IDE, 点击下载Arduino IDE
- RTU库
- 心率传感器库文件和示例程序
注:RTU库是基于modbus RTU协议为Arduino平台移植的modbus库。使用传感器需先安装RTU库。
关于如何安装库文件,点击链接
接线图
样例代码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();
}
结果
主要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();
树莓派使用教程
准备
-
硬件
- 树莓派4代B型(或类似)主控板 x 1
- Heart Rate and Oximeter Sensor V2模块(兼容树莓派) x 1
- 若干杜邦线 x 1
-
软件
接线图
- 将模块与树莓派按照连线图相连。I2C地址默认为0x68
安装驱动
-
启动树莓派的I2C接口。如已开启,可跳过该步骤。
打开终端(Terminal),键入如下指令,并回车:
pi@raspberrypi:~ $ sudo raspi-config
然后用上下键选择“ 5 Interfacing Options ”, 按回车进入,选择 “ P5 I2C ”, 按回车确认“ YES ”即可。重启树莓派主控板。 -
安装Python依赖库与git,树莓派需要联网。如已安装,可跳过该步骤。
在终端中,依次键入如下指令,并回车:
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ $ sudo apt-get install build-essential python-dev python-smbus git
-
下载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
-
结果
上位机使用
将传感器与USB转串口模块进行连接
点击下载SEN0344 心率血氧传感器上位机
解压后,运行SEN0344.exe,选择号串口与波特率后点击开始测量即可。
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或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。