第1章:血氧仪项目概述

大家好,我是你们的嵌入式UI讲师。今天咱们聊聊血氧仪这个项目。

说实话,血氧仪这几年大家都不陌生。疫情期间,几乎人手一个。但真正把它做好的团队,其实不多。我见过太多产品,功能没问题,用户界面却让人抓狂——字太小、反应慢、操作逻辑混乱。嗯,这恰恰是我们这门课要解决的问题。

1.1 血氧仪的工作原理

血氧仪测的是什么?说白了,就是血液里氧气的饱和度。医学上叫SpO₂,正常人在95%以上。

它的原理其实不复杂。传感器发出两种光:红光(660nm)和红外光(940nm)。含氧血红蛋白和脱氧血红蛋白对这两种光的吸收率不一样。通过计算两种光的吸收比例,就能推算出血氧饱和度。

我在项目中遇到过一个问题:手指抖动会导致波形紊乱,测出来的数值忽高忽低。后来我们加了滑动平均滤波,才把数据稳住。

核心公式(简化版):

SpO₂ = A - B × (AC_red / DC_red) / (AC_ir / DC_ir)

其中AC是交流分量(脉搏波),DC是直流分量(组织吸收)。A和B是校准系数,不同传感器略有差异。

1.2 硬件架构:MCU + OLED + 传感器

咱们这个项目的硬件选型,我反复斟酌过。既要够用,又不能太贵。你想想看,血氧仪是消费级产品,成本控制很关键。

模块 型号 说明
主控MCU STM32F103C8T6 72MHz主频,64KB Flash,够用不浪费
OLED屏幕 0.96寸 128×64 SSD1306驱动,I2C接口,功耗低
血氧传感器 MAX30102 集成红光+红外LED,I2C接口

为什么选STM32F103?我个人习惯是:项目初期用成熟的芯片,踩坑少。MAX30102这颗传感器,我建议你们仔细看它的数据手册——尤其是寄存器配置部分。我曾经因为没注意采样率设置,导致波形失真,排查了两天才找到原因。

我的小技巧:硬件调试时,先用逻辑分析仪抓I2C波形。确认通信正常了,再写上层逻辑。这一步能省你半天时间。

1.3 UI设计目标与用户体验原则

血氧仪的UI设计,目标很明确:让用户在3秒内看懂数据

为什么是3秒?因为测血氧时,用户通常只有一只手能动。另一只手夹着指夹,操作不便。如果界面复杂,用户会烦躁。

我总结了四条原则,你们记一下:

  1. 大字号优先——血氧值至少占屏幕1/3,字号不小于24pt。老年人眼神不好,别让他们眯着眼看。
  2. 颜色编码——正常值用绿色,临界值用黄色,危险值用红色。这是直觉设计,不用教就会。
  3. 最少操作——开机即测,不要菜单。所有设置项藏到二级界面。
  4. 反馈即时——每次按键都有蜂鸣器提示,屏幕刷新率不低于30Hz。

避坑指南:我曾经做过一个版本,加了动画过渡效果。结果MCU性能不够,动画卡顿,反而让用户觉得设备坏了。后来我学乖了——嵌入式UI,流畅比花哨重要一百倍。

1.4 项目整体框架

咱们这个课程,会从底层驱动一直讲到上层UI。我画了个简化的架构图,你们感受一下:

应用层:UI界面(数据显示、报警、设置)
    ↓
中间层:数据处理(滤波、波形绘制、数值计算)
    ↓
驱动层:OLED驱动、传感器驱动、按键驱动
    ↓
硬件层:STM32 + MAX30102 + SSD1306

每一层我都会带你们手写代码。不是那种复制粘贴的demo,而是真正能跑在产品上的工程代码。

嗯,第一章就到这里。下一章我们开始搭建开发环境,把第一个点亮的OLED跑起来。

课后思考:如果你来做血氧仪UI,你会把血氧值放在屏幕的哪个位置?为什么?想好了再往下学。