这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【M5stackS3】使用IIC读取心率血氧模块数据

共2条 1/1 1 跳转至

【M5stackS3】使用IIC读取心率血氧模块数据

高工
2026-07-20 16:35:38     打赏

一:模块信息

心率血氧检测模块是一种集成了红外光和可见红光 LED、光电探测器以及信号处理电路的设备,利用人体组织在血管搏动时造成透光率不同来实时监测心率和血氧饱和度,主芯片为 MAX30102,使用 IIC接口通信

二:参数信息

  超低功耗:<lmW

  超低待机电流:0.7uA

  内部采样ADC:15~18位,受LED脉冲宽度配置影响

  工作电压范围:3.3V~5V

  工作温度范围:-40°C~+85°C

三:模块说明:

U3为LDO低压差线性稳压器,用于将3.3V电压转成1.8V供MAX30102芯片使用

U1为MAX30102芯片

NC0~5:空脚,连接到PCB焊盘以实现机械稳定性

VDD:芯片电源,1.8V供电

VLED+_0~1:LED电源,可见红光(RED)和红外光(IR),3.3V供电

GND:芯片接地

PGND:LED接地

INT:中断,低电平有效,默认接上拉电阻

SCL:I2C的串行时钟线SCL,默认接上拉电阻

SDA:I12C的双向串行数据线SDA,默认接上拉电阻

心率血氧模块对外发射可见红光(RED)和红外光(IR),光电探测器(VISIBLE+IR)会检测通过皮肤反射回来的光线并将其转换为电信号送入模块内部的信号处理电路,电路对这些反射光进行放大、环境光消除、模数转换和滤波处理,处理后将数据保存在FIFO数据寄存器里,主控通过12C接口读取数据寄存器数据造成透光率不同来进行心率和血氧饱和度测量红光和红外光穿透人体组织,并使用光电探测器测量反射光量,也就是利用人体组织在血管搏动时血液中有含氧血红蛋白(O2Hb)和脱氧血红蛋白(HHb),这两种血红蛋白的吸收光谱不一样,脱氧血红蛋白(HHb)吸收更多的红光,而含氧血红蛋白(O2Hb)吸收更多的红外光

心率测量:当心脏跳动时,血液被泵入和泵出,反射回来的光线强度会发生变化(吸收红外光IR的量会变化),光电探测器接收透过皮肤反射回来的光线,将其转化为电信号并产生变化的波形,通过测量这些电信号的变化来计算出心率

血氧测量:通过光电探测器检测反射回来的光线强度,可以判断红光、红外光被吸收的多少,从而推断出含氧血红蛋白(O2Hb)和脱氧血红蛋白(HHb)所占的比例可以估算血液中的氧气含量,并计算出血氧饱和度

四:软件编写流程:

1.初始化 MCU对应的GPIO脚,SCL和SDA配置为开漏输出模式,INT配置为浮空输入模式

2.编写时序基本单元:起始信号、终止信号、写入一个字节、读取一个字节、主机等待从机应答、主机应答、主机不应答(SCL和SDA需要拉高/拉低的动作来模拟IIC的硬件时序)

3.封装编写IIC向寄存器写入一个字节、读取一个字节和读取多个字节的函数

4.根据数据手册寄存器表,设置采样率,工作模式,led电流等等参数,向寄存器写入参数完成初始

5.当中断发生时,从FIFO_DATA寄存器读取数据,对采集到的数据样本进行滤波

6.根据红外光信号的变化模式,使用算法计算心率

7.根据红外光和可见红光信号的强度差异,使用算法估算血氧饱和度

五:软件代码如下所示:

#include <Wire.h>
#include "MAX30105.h"

MAX30105 particleSensor;

#define debug Serial //Uncomment this line if you're using an Uno or ESP
//#define debug SerialUSB //Uncomment this line if you're using a SAMD21

void setup()
{
  debug.begin(9600);
  debug.println("MAX30105 Basic Readings Example");
   //切换IIC的引脚地址
   Wire.begin(2, 1);
  // Initialize sensor
  if (particleSensor.begin() == false)
  {
    debug.println("MAX30105 was not found. Please check wiring/power. ");
    while (1);
  }

  particleSensor.setup(); //Configure sensor. Use 6.4mA for LED drive
}

void loop()
{
  debug.print(" R[");
  debug.print(particleSensor.getRed());
  debug.print("] IR[");
  debug.print(particleSensor.getIR());
  debug.print("] G[");
  debug.print(particleSensor.getGreen());
  debug.print("]");
  debug.println();
  delay(500); // 根据采样率调整
}

六:实物验证:

串口数据如下所示:




关键词: stack     心率     血氧    

院士
2026-07-21 22:35:27     打赏
2楼

ADI的血氧采样芯片,还是太专业了


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]