第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/3,字号不小于24pt。老年人眼神不好,别让他们眯着眼看。
- 颜色编码——正常值用绿色,临界值用黄色,危险值用红色。这是直觉设计,不用教就会。
- 最少操作——开机即测,不要菜单。所有设置项藏到二级界面。
- 反馈即时——每次按键都有蜂鸣器提示,屏幕刷新率不低于30Hz。
避坑指南:我曾经做过一个版本,加了动画过渡效果。结果MCU性能不够,动画卡顿,反而让用户觉得设备坏了。后来我学乖了——嵌入式UI,流畅比花哨重要一百倍。
1.4 项目整体框架
咱们这个课程,会从底层驱动一直讲到上层UI。我画了个简化的架构图,你们感受一下:
应用层:UI界面(数据显示、报警、设置)
↓
中间层:数据处理(滤波、波形绘制、数值计算)
↓
驱动层:OLED驱动、传感器驱动、按键驱动
↓
硬件层:STM32 + MAX30102 + SSD1306
每一层我都会带你们手写代码。不是那种复制粘贴的demo,而是真正能跑在产品上的工程代码。
嗯,第一章就到这里。下一章我们开始搭建开发环境,把第一个点亮的OLED跑起来。
课后思考:如果你来做血氧仪UI,你会把血氧值放在屏幕的哪个位置?为什么?想好了再往下学。