第一章:体温计项目概述

各位同学好,我是你们的老朋友。今天咱们正式开始体温计嵌入式软件状态机架构设计这门课。

第一节课,我想先聊聊项目背景、功能需求和硬件选型。说白了,就是搞清楚我们要做什么,用什么来做。

1.1 项目背景

体温计这东西,大家都不陌生。疫情期间,红外额温枪几乎成了家庭标配。但说实话,市面上很多产品体验并不好——测量不准、响应慢、功耗高。

我个人习惯是,做任何嵌入式项目之前,先问三个问题:

  • 用户真正需要什么?——准确、快速、易用
  • 市场痛点在哪?——低成本方案往往精度差,高端方案又太贵
  • 我们能做什么?——用状态机架构把软硬件协同做到极致

这个项目的定位,就是做一款医用级精度、消费级成本的电子体温计。目标场景包括家庭日常测温、社区诊所、学校晨检等。

核心指标:

  • 测量精度:±0.1℃(医用标准)
  • 响应时间:≤3秒
  • 待机功耗:≤5μA
  • 连续使用:≥1000次(单颗纽扣电池)

1.2 功能需求

嗯,这里要注意。功能需求不能只写「能测体温」,那样太粗糙了。我建议从用户操作流程出发,拆解出完整的功能列表。

我记得有一次做项目,需求文档写得很笼统,结果开发到一半才发现漏了「低电量提示」这个功能,被迫改板子。所以,咱们一开始就把需求列清楚。

1.2.1 核心功能

  • 温度测量:支持额头/耳温两种模式,量程32℃~42℃
  • 结果显示:LCD屏显示温度值,保留一位小数
  • 蜂鸣提示:测量完成时发出短促提示音
  • 自动关机:无操作30秒后自动进入休眠

1.2.2 扩展功能

  • 记忆存储:保存最近10次测量记录
  • 温度单位切换:℃/℉一键切换
  • 发烧报警:体温≥37.3℃时,蜂鸣器发出连续报警音
  • 低电量检测:电池电压低于2.4V时显示电池图标

避坑指南:我曾经在低电量检测上吃过亏。当时只检测了电池电压,没考虑负载变化。结果电池快没电时,一启动测量电压就掉到2.3V,系统直接复位。后来加了迟滞比较和软件滤波才解决。

1.3 硬件选型

硬件选型是嵌入式项目的基石。选错了,后面软件写得再好也白搭。我个人习惯是「先定传感器,再定MCU,最后定显示屏」。为什么?因为传感器决定了测量精度,这是产品的核心价值。

1.3.1 传感器选型

体温计传感器主要有两种:热电堆红外传感器和热敏电阻。咱们这个项目选的是热电堆红外传感器,型号是MLX90614

参数 MLX90614 传统热敏电阻
测量方式 非接触式 接触式
精度 ±0.1℃(医用级) ±0.3℃
响应时间 ≤1秒 5~10秒
接口 I2C/SMBus 模拟量
工作电压 2.6V~3.6V 无要求

为什么选MLX90614?说白了,它内部集成了数字信号处理,直接输出温度值,省去了复杂的标定和校准。你想想看,如果选模拟传感器,光校准就要花掉两周时间,还不一定能保证一致性。

1.3.2 MCU选型

MCU的选择要综合考虑性能、功耗、成本和开发难度。咱们这个项目选的是STM32L051C8T6,属于ST的L0系列超低功耗MCU。

我建议选它的理由有三点:

  • 功耗极低:待机模式仅0.3μA,跑起来也才100μA/MHz
  • 外设丰富:I2C、SPI、UART、ADC一应俱全
  • 开发友好:HAL库和CubeMX工具链成熟,上手快

MCU关键参数:

  • 内核:ARM Cortex-M0+,32MHz
  • Flash:64KB(够用,代码量预计30KB左右)
  • RAM:8KB(状态机+缓冲区绰绰有余)
  • 封装:TSSOP20(体积小,适合手持设备)

1.3.3 显示屏选型

显示屏这块,我踩过不少坑。一开始想用OLED,显示效果确实好,但功耗太高——亮着的时候要20mA,电池扛不住。后来换成段式LCD,功耗倒是低了,但只能显示固定图案,不够灵活。

最终我选了1.3寸黑白点阵LCD,型号是NHD-1.3-12864。为什么?

  • 功耗适中:背光关闭时仅1mA,开启时5mA
  • 显示灵活:128×64像素,可以显示数字、汉字、图标
  • 接口简单:SPI接口,只需4根线

注意:选LCD时一定要确认工作温度范围。体温计可能用在冬天户外,普通LCD在0℃以下会响应变慢。我选的这款支持-20℃~70℃,完全够用。

1.4 硬件架构框图

好了,三个核心器件选完了。咱们把它们连起来,看看整体架构:

+-------------------+       +-------------------+
|                   |       |                   |
|   MLX90614        | I2C   |   STM32L051       |
|   (红外传感器)    |------>|   (主控MCU)       |
|                   |       |                   |
+-------------------+       +-------+-----------+
                                    |
                                    | SPI
                                    v
                            +-------+-----------+
                            |                   |
                            |   NHD-1.3-12864   |
                            |   (点阵LCD)       |
                            |                   |
                            +-------------------+

其他外设:
- 蜂鸣器:GPIO驱动,PWM控制
- 按键:两个(电源键、模式键)
- 电池:CR2032纽扣电池,3V
- 电压检测:ADC采样电池电压

这个架构看起来简单,但实际做起来有不少细节。比如I2C总线上拉电阻的取值、SPI时钟极性的配置、电池电压检测的分压电阻计算等等。这些咱们后面章节会逐一展开。

1.5 本章小结

这一章咱们把项目的整体轮廓勾勒出来了:

  • 项目背景:做一款医用级精度、消费级成本的电子体温计
  • 功能需求:核心功能+扩展功能,共8项
  • 硬件选型:MLX90614 + STM32L051 + NHD-1.3-12864

下一章,咱们就要开始设计状态机了。我会带着大家从「状态机思维」入手,把体温计的工作流程抽象成状态和事件。你想想看,一个体温计从开机到关机,中间经历了哪些状态?嗯,这个问题留给大家思考。

咱们下节课见。