方向:方案分析、架构设计、模块分解

智能产品系统架构分析:运动手环架构分层

为“运动手环”写一份类似的架构设计文档,包含分层架构、实例、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 实时计步与心率显示(本地闭环)

  1. 硬件层:加速度计(如BMI160)以50Hz采样,FIFO缓存数据;心率传感器(如MAX30102)每5秒测量一次血氧/PPG。
  2. 驱动层:I2C驱动读取传感器寄存器,通过中断通知MCU。
  3. 基础服务层:加速度数据进入滑动平均滤波器去除噪声;心率原始数据经DC抑制峰值检测提取脉搏间隔。
  4. 应用逻辑层
    • 计步算法:检测加速度波峰波谷,结合步态模型(步频约1~3Hz)判定有效步数,更新计时器。
    • 心率算法:计算30秒内的平均心率,转换为bpm。
    • 显示管理:每1秒刷新OLED屏幕,展示当前步数和心率。
  5. 功耗管理:在无活动时自动降低心率测量频率至10分钟一次。

3.2 睡眠监测与数据同步

  1. 夜间:应用逻辑层的睡眠识别模块根据用户活动量(加速度方差极小)和心率下降趋势,判断进入浅睡/深睡/REM,并记录时间戳。数据存储于SPI Flash。
  2. 次日同步
    • 手机App通过蓝牙GATT连接手环。
    • 手环Bluetooth服务模块暴露特征值(步数、心率、睡眠数据)。
    • App读取历史数据(7天),擦除手环旧数据。
    • App将数据上传至云端(如阿里云),进行AI睡眠分析(睡眠评分、建议)。
    • 云端返回周报,App显示给用户。

4. 详细模块分解与职责

4.1 硬件抽象层 (HAL)

模块 功能 接口
AccelDriver 初始化/读取加速度计(BMI160/BMA400) accel_read(xyz, &timestamp)
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(步数/睡眠)。
  • 数据同步协议
    • 命令帧:[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 分层组件图(包图)

云端

手机端

运动手环设备

应用逻辑层

计步器

卡路里计算

心率监测

睡眠识别

显示UI

消息提醒

硬件层

驱动层

基础服务层

蓝牙GATT服务

App UI

蓝牙管理器

本地SQLite

云同步模块

REST API

用户数据库

数据分析引擎

5.2 计步与心率实时处理序列图

OLED显示 心率算法 计步算法 滤波服务 心率传感器 加速度计 User OLED显示 心率算法 计步算法 滤波服务 心率传感器 加速度计 User loop [每20ms] par [心率测量每5秒] 走路产生加速度 原始三轴数据 过滤后数据 峰值检测/计步累计 PPG原始值 FFT计算bpm 更新步数(每步) 更新心率(每5秒) 实时刷新屏幕

5.3 睡眠监测与同步序列图

Cloud 手机App Flash 睡眠识别 HR Accel User Cloud 手机App Flash 睡眠识别 HR Accel User 夜间 (22:00-07:00) loop [每分钟] 活动量统计 心率变化 判断睡眠阶段 存储[时间, 阶段] 打开App,点击同步 蓝牙读取历史数据 7天睡眠记录+步数/心率 上传原始数据 计算睡眠评分+周报 图表数据JSON 显示深睡时长/分数

5.4 部署架构图(节点与通信)

云端

手机端

穿戴侧

BLE 4.2 GATT

HTTPS

运动手环
ARM Cortex-M4
64KB RAM, 512KB Flash

智能手机
iOS/Android

API Gateway
Nginx

MySQL

报告生成器
Python

Redis缓存

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步)和波峰波谷交替检测(避免半步行误判)。
  • 步骤
    1. 对合成向量模 sqrt(x²+y²+z²) 减去1g(重力)。
    2. 滑动平均去除了高频噪声。
    3. 检测波谷->波峰->波谷完整周期,若幅度大于阈值且周期在允许范围内,计一步。
    4. 连续10步内置信度低则重置阈值自适应。
7.3.2 心率测量的运动伪影抑制
  • 机理:步行时腕部晃动使PPG信号产生低频漂移,叠加运动噪声。
  • 方法:使用加速度计作为参考,通过自适应滤波(LMS)消除与加速度相关的噪声成分。
  • 步骤
    1. 将三轴加速度幅值作为参考输入。
    2. 对PPG信号进行归一化最小均方误差(NLMS)滤波。
    3. 对输出信号做FFT,选择30~180bpm范围内最大峰对应频率。
7.3.3 睡眠阶段识别(简化版)
  • 机理:深睡时心率下降、心率变异增大、身体几乎无活动(加速度方差极小);REM期心率略升,仍无大肌动。
  • 方法:使用有限状态机(FSM)+ 滑动窗口分类。
    1. 状态:Awake → Light → Deep → REM 之间转移。
    2. 每30秒计算活动量(加速度方差)和平均心率。
    3. 规则链:
      • 活动量>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占用率。

本文提供的项目结构和开发步骤可直接指导工程落地,其中的算法原理同样适用于智能手表等类似设备。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐