第一章:项目启动与需求分析

各位同学,咱们今天正式开课。

做嵌入式系统,尤其是药盒这种跟健康相关的产品,第一步不是画原理图,也不是选芯片。第一步,是把需求搞清楚。我见过太多项目,硬件都打样回来了,才发现功能漏了、接口不够、功耗超标。嗯,那时候再改,成本就高了。

所以,咱们先从需求分析开始。

1.1 功能需求:药盒到底要干什么?

说白了,一个智能药盒,核心就三件事:提醒吃药、记录吃药、防止吃错。咱们一条条拆开看。

  • 定时提醒:用户设定服药时间,到点就响。我建议用蜂鸣器+LED双路提醒,万一用户听力不好,还能看到光闪。
  • 药仓检测:每个格子有没有药,得能感知。我在项目中用过红外对管,也用过微动开关。各有优劣,后面硬件选型再细聊。
  • 开盖检测:用户有没有真的打开药盒?这个信息很重要。你想想看,如果只是响铃但用户没吃药,那提醒就白做了。
  • 服药记录:谁、什么时间、吃了哪一格药。这些数据要存下来,方便家人或医生查看。
  • 通信上报:数据得能传出去。蓝牙、Wi-Fi、4G?看场景。家用我倾向蓝牙+手机App,养老院场景可能需要Wi-Fi直接上云。

核心原则:功能不是越多越好。每加一个功能,代码复杂度、功耗、成本都会上升。做产品,要学会做减法。

1.2 非功能需求:那些看不见但很重要的东西

功能需求是「做什么」,非功能需求是「做得怎么样」。这部分容易被新手忽略,但恰恰是产品成败的关键。

  • 功耗:药盒是长期运行的设备。用户不可能天天充电。我个人习惯,待机电流控制在10μA以下,电池至少撑3个月。
  • 实时性:提醒不能延迟。从RTC中断触发到蜂鸣器响起,延迟超过1秒,用户就会觉得「这玩意儿不靠谱」。
  • 可靠性:药盒不能死机。万一老人在家,药盒卡住了没提醒,那是要出问题的。我曾经在项目里加了一个独立看门狗,专门盯着主控。
  • 易用性:按键手感、屏幕亮度、提示音量,这些都得考虑。用户可能是老年人,字体要大、操作要简单。

避坑指南:我曾经在一个项目里,把功耗优化放在了最后做。结果硬件定型后,发现待机电流降不下来,只能换电池、改外壳。那叫一个折腾。功耗问题,一定要从方案选型阶段就开始考虑。

1.3 硬件选型:MCU、传感器、通信模块怎么挑?

需求清楚了,咱们才能选硬件。这部分我直接给结论,再解释为什么这么选。

1.3.1 MCU选型

MCU是药盒的大脑。我的选型原则是:够用就好,留有余量

需求 推荐型号 理由
低功耗、简单功能 STM32L0系列 待机功耗低至0.3μA,性价比高
需要蓝牙通信 Nordic nRF52832 集成蓝牙5.0,ARM Cortex-M4F内核
需要Wi-Fi通信 ESP32-S3 双核、Wi-Fi+蓝牙、生态成熟
极致低成本 GD32E230 国产替代,M3内核,价格不到2元

我个人习惯,如果药盒只需要蓝牙连接手机,首选nRF52832。为什么?因为它把蓝牙协议栈和MCU集成在一起,省了一颗芯片,功耗也低。我在一个医疗项目里用过这颗料,待机电流实测0.8μA,非常稳。

1.3.2 传感器选型

药盒需要的传感器不多,但每个都得精挑细选。

  • 药仓检测:我推荐红外反射式传感器(比如TCRT5000)。它不接触药片,靠反射光判断有没有药。成本低、寿命长。微动开关虽然便宜,但机械触点容易氧化,不适合长期使用。
  • 开盖检测:用干簧管+磁铁。干簧管是密封的,不怕灰尘,寿命几百万次。霍尔传感器也行,但功耗稍高。
  • 环境温湿度:如果药品对温湿度敏感,可以加一个SHT30。I2C接口,精度高,代码也简单。

小技巧:红外传感器容易受环境光干扰。我在项目中会在传感器前面加一个遮光罩,或者用软件做多次采样取平均值。效果很好。

1.3.3 通信模块选型

通信方式决定了药盒的联网能力。我按场景给建议:

场景 推荐方案 说明
家庭使用 蓝牙BLE + 手机App 成本低、功耗低、实现简单
养老院/医院 Wi-Fi + 云端后台 集中管理,数据实时上传
无网络环境 4G Cat.1模块 比如移远EC200U,但功耗和成本都高

你想想看,如果药盒放在老人家里,家里有Wi-Fi,那用ESP32就挺好。但如果老人不会用智能手机,那蓝牙方案就废了。所以选通信方案,本质上是选用户使用场景

1.4 需求文档怎么写?

最后,我建议你把所有需求整理成一份文档。格式不重要,但内容要清晰。我一般用Markdown写,结构如下:

# 药盒嵌入式系统需求文档

## 1. 功能需求
- 1.1 定时提醒:支持每天最多8个提醒时段
- 1.2 药仓检测:6个独立药仓,每个仓独立检测
- 1.3 开盖检测:检测每个药仓盖子的开合状态
- 1.4 服药记录:本地存储至少1000条记录
- 1.5 蓝牙通信:支持BLE 5.0,与手机App配对

## 2. 非功能需求
- 2.1 功耗:待机电流 < 10μA
- 2.2 实时性:提醒响应延迟 < 500ms
- 2.3 可靠性:MTBF > 50000小时
- 2.4 工作温度:0℃ ~ 50℃

## 3. 硬件选型
- MCU: Nordic nRF52832
- 药仓检测: TCRT5000 × 6
- 开盖检测: 干簧管 × 6
- 通信: 内置BLE 5.0
- 电池: 18650锂电池 × 1

这份文档,就是整个项目的「宪法」。后面所有设计、开发、测试,都得照着它来。需求变了?可以,但要走变更流程,不能口头说改就改。

记住:需求分析阶段多花一周,后面开发阶段能省一个月。这个账,一定要算清楚。

好,第一章就到这里。下一章,咱们开始搭开发环境,写第一个点亮LED的程序。到时候我会讲讲,为什么我坚持用Makefile而不是IDE。