智能产品系统架构分析 - 运动手环架构分层
方向:方案分析、架构设计、模块分解
智能产品系统架构分析:运动手环架构分层
为“运动手环”写一份类似的架构设计文档,包含分层架构、实例、UML、项目结构、开发机理等。
运动手环是典型的可穿戴设备,核心功能:计步、心率监测、睡眠监测、运动模式识别、通知提醒、蓝牙同步等。低功耗是关键。分层可类似:硬件层(传感器、MCU、电池、蓝牙)、驱动/OS层(RTOS或轻量嵌入式系统)、基础服务层(传感器数据采集、滤波、电源管理)、应用逻辑层(计步算法、心率算法、运动识别、显示交互)、通信/云端层(蓝牙同步、手机App、云分析)。
用一个实例:用户佩戴手环走路,手环实时显示步数、心率,晚上记录睡眠,通过手机App同步数据并生成周报。
运动手环系统架构设计文档
1. 概述
运动手环是一种低功耗、轻量级可穿戴设备,用于采集人体运动、心率和睡眠等生理数据,并通过蓝牙与手机App同步,提供健康分析与提醒功能。本文从方案分析、架构设计、模块分解三个维度,对运动手环进行分层架构解析,并以“用户佩戴手环走路5分钟,实时计步、测心率,晚上记录睡眠,次日同步到App生成周报”为例,贯穿说明系统协作机理。
2. 系统分层架构总览
运动手环采用五层架构(从下至上),侧重低功耗与实时性:
| 层次 | 名称 | 职责 | 实例对应 |
|---|---|---|---|
| L1 | 硬件层 | 传感器(加速度计、PPG心率)、MCU(ARM Cortex-M)、蓝牙芯片、电池、OLED屏 | 加速度计采集走路三轴数据 |
| L2 | 驱动与RTOS层 | 传感器驱动、蓝牙栈、LCD驱动、FreeRTOS任务调度 | 读取加速度计FIFO数据 |
| L3 | 基础服务层 | 数据滤波、运动检测、功耗管理、存储管理 | 卡尔曼滤波去噪,写入Flash |
| L4 | 应用逻辑层 | 计步算法、心率算法、睡眠识别、显示界面、闹钟提醒 | 根据加速度波形计步,实时更新步数 |
| L5 | 通信与云端层 | 蓝牙GATT同步协议、手机App、云端健康分析 | 手机App拉取一周数据,生成运动周报 |
手环大多数AI算法(计步、睡眠)在本地MCU上完成,仅数据同步和长期趋势分析依赖App/云端。
3. 交互实例(按层动线)
场景:用户佩戴手环,从家门走到公交站(约5分钟),手环显示步数从100增加到520,心率从72升到98;当晚手环自动识别睡眠,次日连接手机App查看周报。
3.1 实时计步与心率显示(本地闭环)
- 硬件层:加速度计(如BMI160)以50Hz采样,FIFO缓存数据;心率传感器(如MAX30102)每5秒测量一次血氧/PPG。
- 驱动层:I2C驱动读取传感器寄存器,通过中断通知MCU。
- 基础服务层:加速度数据进入滑动平均滤波器去除噪声;心率原始数据经DC抑制和峰值检测提取脉搏间隔。
- 应用逻辑层:
- 计步算法:检测加速度波峰波谷,结合步态模型(步频约1~3Hz)判定有效步数,更新计时器。
- 心率算法:计算30秒内的平均心率,转换为bpm。
- 显示管理:每1秒刷新OLED屏幕,展示当前步数和心率。
- 功耗管理:在无活动时自动降低心率测量频率至10分钟一次。
3.2 睡眠监测与数据同步
- 夜间:应用逻辑层的睡眠识别模块根据用户活动量(加速度方差极小)和心率下降趋势,判断进入浅睡/深睡/REM,并记录时间戳。数据存储于SPI Flash。
- 次日同步:
- 手机App通过蓝牙GATT连接手环。
- 手环Bluetooth服务模块暴露特征值(步数、心率、睡眠数据)。
- App读取历史数据(7天),擦除手环旧数据。
- App将数据上传至云端(如阿里云),进行AI睡眠分析(睡眠评分、建议)。
- 云端返回周报,App显示给用户。
4. 详细模块分解与职责
4.1 硬件抽象层 (HAL)
| 模块 | 功能 | 接口 |
|---|---|---|
| AccelDriver | 初始化/读取加速度计(BMI160/BMA400) | accel_read(xyz, ×tamp) |
| HeartRateDriver | 控制PPG LED,采样光电容积波 | hr_start_measurement() hr_get_value() |
| DisplayDriver | SSD1306 OLED屏驱动 | display_write_buffer(buffer) |
| FlashDriver | W25Q128存储数据 | flash_write(addr, data), flash_read |
| BatteryMonitor | 电量采集(ADC) | get_battery_percent() |
4.2 基础服务层
- 运动检测:基于三轴加速度幅值方差判断设备是否静止。用于触发“抬手亮屏”和睡眠/唤醒状态切换。
- 数据滤波:
- 低通滤波器分离重力分量与人体加速度。
- 中值滤波去除PPG信号的运动伪影。
- 功耗管理:根据用户活动状态动态调整传感器采样率(静止时降频至10Hz,运动时50Hz)和蓝牙广播间隔。
- 存储管理:环形缓冲区管理历史数据,每5分钟存入一条记录(步数、心率、卡路里估算)。
4.3 应用逻辑层(核心算法)
| 模块 | 算法 | 实现要点 |
|---|---|---|
| 计步算法 | 峰值检测+动态阈值 | 窗口大小为1秒,峰谷差大于阈值(自适应)计为一步;排除高频抖动。 |
| 心率计算 | 时域峰值计数/FFT | 对PPG信号做FFT,取30~180bpm范围内最大幅值频率。 |
| 卡路里估算 | 基于运动强度公式 | 使用代谢当量(MET) × 体重 × 时间,步速由加速度幅值推算。 |
| 睡眠识别 | 活动量+心率阈值 | 连续30分钟活动量低于阈值且心率<静息心率+10%,判定为睡眠;细分深睡/浅睡基于心率变异。 |
| 抬手亮屏 | 重力矢量变化 | 检测手腕转动角度(绕重力轴旋转90°)触发屏幕点亮。 |
| 消息提醒 | 蓝牙通知解析 | 接收手机推送的来电/微信,驱动马达振动和显示图标。 |
4.4 通信协议层
- 蓝牙栈:使用NimBLE或BlueNRG,实现GAP广播(用于连接发现)和GATT服务。
- 服务UUID:
0x180D(心率), 自定义服务0xFFE0(步数/睡眠)。
- 服务UUID:
- 数据同步协议:
- 命令帧:
[CMD][LEN][PAYLOAD],如0x01表示请求历史步数。 - 数据分页:每包20字节,蓝牙MTU协商至最大。
- 命令帧:
4.5 云端与App层
| 组件 | 技术 | 功能 |
|---|---|---|
| 手机App(iOS/Android) | Flutter/React Native | 设备连接、数据展示、设置同步、图表绘制 |
| 云端API | Spring Boot + MySQL | 用户注册、历史数据存储、健康报告生成 |
| 数据分析服务 | Python + Pandas | 睡眠质量评分(基于心率变异、深睡时长)、运动达标率 |
5. UML建模(Mermaid)
5.1 分层组件图(包图)
5.2 计步与心率实时处理序列图
5.3 睡眠监测与同步序列图
5.4 部署架构图(节点与通信)
6. 项目文件结构组织
开发运动手环通常分为固件工程、手机App工程和云端工程三个独立仓库,但统一管理。
sport_band/
├── docs/
│ ├── architecture/
│ │ ├── adr/ # 架构决策记录
│ │ └── uml/ # Mermaid源文件
│ └── api/ # 蓝牙通信协议.md
├── firmware/ # 手环固件 (C, Keil/IAR)
│ ├── hal/ # 硬件抽象层
│ │ ├── bmi160.c # 加速度计
│ │ ├── max30102.c # 心率传感器
│ │ ├── ssd1306.c # OLED屏
│ │ └── spi_flash.c
│ ├── middleware/ # 基础服务
│ │ ├── filter.c # 低通/卡尔曼滤波
│ │ ├── power_mgr.c # 动态调频
│ │ ├── storage_fifo.c # 环形缓冲区
│ │ └── motion_detect.c # 运动/静止判断
│ ├── algorithm/ # 应用算法
│ │ ├── step_counter.c # 峰值检测计步
│ │ ├── heart_rate.c # PPG→bpm
│ │ ├── calorie.c # MET计算
│ │ └── sleep_tracker.c # 睡眠阶段识别
│ ├── app/ # 业务入口
│ │ ├── main.c # FreeRTOS任务创建
│ │ ├── ui_display.c # 界面切换逻辑
│ │ ├── ble_gatt_svr.c # 蓝牙服务
│ │ └── notification.c # 振动/消息
│ ├── rtos_config/ # FreeRTOS配置
│ └── CMakeLists.txt
├── mobile_app/ # 手机App (Flutter)
│ ├── lib/
│ │ ├── ble/ # 蓝牙连接与数据解析
│ │ ├── pages/ # 首页、历史图表、个人中心
│ │ ├── models/ # 步数/睡眠数据模型
│ │ └── services/ # 云端API调用
│ └── pubspec.yaml
├── cloud/ # 云端微服务
│ ├── api/ # Node.js/Express
│ │ ├── routes/ # /sync, /report
│ │ └── controllers/
│ ├── analyzer/ # Python 数据分析
│ │ ├── sleep_scoring.py # 睡眠质量评分算法
│ │ └── weekly_report.py
│ └── db/ # MySQL schema
│ └── schema.sql
├── test/ # 测试套件
│ ├── firmware_test/ # 计步算法单元测试(Ceedling)
│ ├── integration/ # 蓝牙模拟测试(Python)
│ └── hardware_test/ # 传感器数据采集脚本
├── tools/
│ ├── data_logger/ # 串口打印加速度数据
│ ├── ble_sniffer/ # 蓝牙抓包分析
│ └── ota_packer/ # 固件打包工具
└── README.md
7. 设计开发机理与方法
7.1 核心设计原则
- 低功耗优先:所有外设默认睡眠,通过中断唤醒。CPU在两次处理之间进入Stop模式,平均功耗<1mA。
- 算法轻量化:计步算法不使用FFT或神经网络,纯时域峰值检测,运行在M0+内核上。
- 数据有损存储:为节省Flash,每5分钟存储一次平均值而非原始数据;历史数据最多保留30天。
- 端云分工:实时显示、基础计步/心率在本地方完成;长期趋势分析、睡眠评分、社交排行依赖云端。
7.2 开发步骤
| 阶段 | 任务 | 产出 |
|---|---|---|
| 1. 硬件选型与EVB调试 | 选择nRF52840或Apollo3 Blue,焊接传感器,测试I2C/SPI通信 | 硬件调试通过,传感器可读取原始值 |
| 2. 驱动与RTOS搭建 | 移植FreeRTOS,编写所有外设HAL,实现任务调度 | 点亮OLED,定时采数 |
| 3. 基础服务实现 | 实现低通滤波、FIFO存储、功耗管理 | 待机功耗<100μA |
| 4. 核心算法开发 | 实现计步器、心率计算、睡眠识别,使用真实人步行数据进行调优 | 计步准确率>95% |
| 5. 蓝牙协议开发 | 定义GATT服务特征,编写手机侧连接和数据读取Demo | 蓝牙传输速度>1KB/s |
| 6. 手机App开发 | 实现设备绑定、数据同步、历史图表、云端上传 | 完整App功能 |
| 7. 云端报告服务 | 构建数据接收接口,开发睡眠评分模型(基于规则或简单ML) | 周报自动生成 |
| 8. 整机测试与优化 | 穿戴测试72小时,校准算法,优化功耗 | 典型续航7天以上 |
7.3 关键机理详解
7.3.1 计步算法的抗干扰方法
- 机理:行走时垂直加速度呈正弦波形,峰谷差约为0.5~1.5g。但颠簸(坐车)也会产生类似波形。
- 方法:增加步频有效性窗口(0.53Hz,即每秒0.53步)和波峰波谷交替检测(避免半步行误判)。
- 步骤:
- 对合成向量模
sqrt(x²+y²+z²)减去1g(重力)。 - 滑动平均去除了高频噪声。
- 检测波谷->波峰->波谷完整周期,若幅度大于阈值且周期在允许范围内,计一步。
- 连续10步内置信度低则重置阈值自适应。
- 对合成向量模
7.3.2 心率测量的运动伪影抑制
- 机理:步行时腕部晃动使PPG信号产生低频漂移,叠加运动噪声。
- 方法:使用加速度计作为参考,通过自适应滤波(LMS)消除与加速度相关的噪声成分。
- 步骤:
- 将三轴加速度幅值作为参考输入。
- 对PPG信号进行归一化最小均方误差(NLMS)滤波。
- 对输出信号做FFT,选择30~180bpm范围内最大峰对应频率。
7.3.3 睡眠阶段识别(简化版)
- 机理:深睡时心率下降、心率变异增大、身体几乎无活动(加速度方差极小);REM期心率略升,仍无大肌动。
- 方法:使用有限状态机(FSM)+ 滑动窗口分类。
- 状态:Awake → Light → Deep → REM 之间转移。
- 每30秒计算活动量(加速度方差)和平均心率。
- 规则链:
- 活动量>threshold → Awake
- 心率<静息心率-5 且 活动量极低 → Deep
- 心率接近静息且心率变异>50ms → REM
- 其余为Light。
7.3.4 功耗管理策略
- 动态采样率:运动时加速计50Hz,静止时5Hz;心率传感器:运动时连续测量,静止时每10分钟一次。
- 蓝牙广播占空比:未连接时每秒广播100ms;连接后协商连接间隔45ms(平衡功耗与响应)。
- 深度睡眠:RTOS空闲任务进入WFI,所有未使用外设时钟门控;RTC定时唤醒刷新显示。
8. 总结
运动手环是典型的资源受限、电池供电的实时嵌入式系统,其架构的精髓在于:将有限的算力和能量集中于核心功能(计步、心率),并通过蓝牙将繁重的数据分析和社交功能转移给手机和云端。本文提出的五层架构清晰界定了硬件驱动、基础服务、应用算法、通信及云端的职责,结合实例和UML图展示了完整的运行流程。
开发此类产品必须从第一天起就进行功耗预算法(典型应用:计步+心率每天用电0.8mAh,显示屏0.5mAh,蓝牙0.2mAh,总<1.5mAh,对于150mAh电池可实现>5天续航),并持续优化算法以降低CPU占用率。
本文提供的项目结构和开发步骤可直接指导工程落地,其中的算法原理同样适用于智能手表等类似设备。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)