简介
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 x Arduino UNO控制板
- 1 x Gravity: MAX30102 心率血氧传感器
- 若干 杜邦线
-
软件
- 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 (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();
}
结果
主要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;
}
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或者论坛联系我们!
更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖。