基于MAX30102与MAX78000的便携式心率血氧监测设备
感谢与非网和得捷电子提供的这次机会。本设计实现了一款便携式、低功耗、实时的心率与血氧饱和度监测设备。系统以MAX78000为主控,通过I2C接口驱动MAX30102光学传感器采集红外和红光PPG信号,利用开源心率血氧算法进行实时处理,最终在SSD1306 OLED显示屏上直观显示心率与血氧数值。项目代码结构清晰,模块化设计良好,具备完整的硬件驱动、信号处理与人机交互功能。---
### 一、系统架构
#### 1. 硬件组成
* **主控芯片**:MAX78000(基于Arm Cortex-M4F),具备低功耗与高性能信号处理能力
!(https://www.eefocus.com/forum/data/attachment/forum/202601/12/210453f99gqumcj7jhgjm3.jpg)
* **光学传感器**:MAX30102,集成红外与红光LED、光电探测器及18位ADC
!(https://www.eefocus.com/forum/data/attachment/forum/202601/12/210512c06f60fy0e2y156p.jpg)
* **显示屏**:SSD1306 OLED(128×64像素,I2C接口)
!(https://www.eefocus.com/forum/data/attachment/forum/202601/12/210525ansylymeerr9y2sl.jpg)
* **通信接口**:I2C(用于传感器与屏幕通信)
#### 2. 软件模块
* **算法核心**:`algorithm.c` – 心率与血氧计算算法
* **传感器驱动**:`main.c` – MAX30102初始化、数据采集与FIFO读取
* **显示驱动**:`ssd1306.c` – OLED初始化、图形缓冲、字体显示
* **系统主循环**:数据采集→算法处理→结果显示
---
### 二、核心算法与实现
#### 1. 信号预处理
* 直流分量去除
* 四点滑动平均滤波
* 差分信号计算
* 汉明窗口加权(提升波峰检测精度)
#### 2. 心率计算
* 基于差分信号的波峰检测(`maxim_find_peaks`)
* 峰间期平均计算心率(BPM)
* 有效心率范围校验(40–180 BPM)
#### 3. 血氧计算
* 红光与红外信号AC/DC分量提取
* 比值计算与查表映射(`uch_spo2_table`)
* 基于多个脉搏周期的中值滤波提升鲁棒性
---
### 三、系统工作流程
1. **初始化阶段**
* I2C、MAX30102、SSD1306初始化
* 校验传感器ID(0x15)
2. **数据采集阶段**
* 以100Hz采样率读取FIFO(18位数据)
* 存储至长度为800的环形缓冲区(`BUFFER_SIZE = FS * 8`)
3. **算法处理阶段**
* 缓冲区满后调用 `maxim_heart_rate_and_oxygen_saturation()`
* 输出心率与血氧值及有效标志
4. **结果显示阶段**
* OLED显示实时心率(BPM)与血氧(SpO2%)
* 无效数据时显示“---”
---
### 四、代码特点与优化
1. **模块化设计**
* 传感器、算法、显示三层分离,便于调试与扩展
* 全局缓冲区与查表通过extern声明,避免重复定义
2. **资源优化**
* 使用整数运算,避免浮点,适合嵌入式平台
* 字体与波形表使用常量数组,节省RAM
3. **鲁棒性增强**
* 信号有效性多重判断(峰值数量、比值范围、幅度阈值)
* I2C通信加入重试与错误处理
---
### 五、应用场景与拓展
* **个人健康监测**:日常心率、血氧跟踪
* **运动健康管理**:运动时实时生理参数监控
* **远程医疗辅助**:可通过无线模块上传数据至云端
* **低功耗穿戴设备**:MAX78000的休眠模式可进一步降低功耗
---
### 六、总结
本项目成功实现了一套完整的便携式心率血氧监测系统,具备以下亮点:
* ✅ 基于MAX78000的高效信号处理与低功耗特性
* ✅ MAX30102高精度光学传感与嵌入式算法结合
* ✅ 实时显示与良好的人机交互体验
* ✅ 代码结构化强,易于二次开发与移植
未来可进一步集成蓝牙传输、数据存储、异常报警等功能,提升产品的实用性与智能化水平。
以下是相当代码的演示视频:
页:
[1]