第一章:项目启动与需求分析
各位同学,咱们今天正式开课。
做嵌入式系统,尤其是药盒这种跟健康相关的产品,第一步不是画原理图,也不是选芯片。第一步,是把需求搞清楚。我见过太多项目,硬件都打样回来了,才发现功能漏了、接口不够、功耗超标。嗯,那时候再改,成本就高了。
所以,咱们先从需求分析开始。
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。