基于行空板M10《智碳腰带Smart Carbon Belt》

2026-09-232

作品说明

一、背景分析与设计要求

摘要:针对传统运动穿戴设备在校园场景中存在的课堂干扰、安全功能缺失、环保属性不足、场景适配性差等痛点,本作品设计并实现了一款校园多场景智能碳感腰带。腰带以行空板 M10 为主控核心,整合六轴加速度计、GNSS 定位模块、温湿度传感器等多模态传感设备,实现运动数据监测、跌倒检测、减碳计量、久坐提醒与多端联动等核心功能;通过优化步数检测、姿态识别、跌倒检测算法适配校园腰部穿戴场景,设计生活、运动、会议三种模式实现多场景自适应切换,并搭建客户端、服务端与 Web 端联动架构,支持数据实时同步与远程控制。经测试,腰带功能稳定、佩戴便捷,可实现运动监测与低碳实践的有机结合,具有较好的实用性与推广价值。

关键词:智能穿戴;多模态传感;校园场景;减碳计量;多端协同

1.1 作品背景

随着智能穿戴技术快速发展,运动手环、智能手表已广泛进入学生生活,成为监测运动状态的重要工具。但现有穿戴设备多面向通用场景设计,在校园环境中适配性不足,集中体现在三个方面:

一是课堂干扰。腕部佩戴的震动提醒与屏幕亮屏,容易打断课堂教学秩序,部分学校因此干脆禁用此类设备。二是安全功能缺失。多数产品只关注运动数据,缺少学生真正需要的跌倒检测、久坐提醒等安全健康功能。三是环保属性不足。在大力推进低碳校园建设的背景下,传统穿戴设备几乎不考虑运动减碳的量化与展示。

与此同时,国家正推进“双碳”(碳达峰、碳中和)战略,宏大的目标需要落地的支点——如何让减碳从政策口号走进学生的日常运动,是我们必须回应的命题。传统具备跌倒检测功能的穿戴设备往往价格昂贵;环保监测设备又过于专业,不适合学生使用;更重要的是,当前几乎没有一款兼顾环保功能的运动穿戴设备。基于此,我们设计了「智碳腰带」,以日常舒适佩戴、专注时不打扰、运动时精确分析为目标,在常见穿戴设备的基础上平衡便携与实用,力求解决传统穿戴设备无安全功能、上课分神、对环保考虑不足的问题。

1.2 作品主体结构

智碳腰带采用分层架构设计,自上而下分为客户端(设备端)、服务端与 Web 前端三层,各层协同实现全部功能:

客户端以行空板 M10 为核心,整合板载 ICM20689 六轴加速度计、TEL0157 GNSS 定位模块、DHT11 温湿度传感器、DFR0760 语音合成模块等硬件,负责数据采集、算法处理、模式控制与本地数据缓存,是整个系统的功能载体,整体安装于运动腰包内并以激光切割木质外壳固定。

服务端基于 Flask 框架开发、部署于公网云服务器,负责接收客户端上报数据、实现数据持久化、处理远程指令与紧急事件,通过统一 API 接口保障多端数据同步与指令传输稳定。

Web 前端同时适配手机端与电脑端,负责数据可视化展示、远程控制指令下发与历史数据查询,用户打开网页即可查看设备状态、切换模式与回看运动记录。三层之间通过 HTTP/TCP 传输 JSON 格式数据,既保证传输速度与稳定性,也便于后续维护与扩展。

1.3.1 实现功能要求

结合校园场景需求,作品设计七大核心功能,覆盖学生学习、运动与生活的全场景:

序号功能功能说明与实现方式
1多场景模式切换设计生活、运动、会议三种模式,分别对应日常环境健康管理、运动减碳监测、课堂静默佩戴,长按触摸键 2 秒循环切换
2运动数据监测多传感器协同实时监测步数、步频、步幅、配速、运动距离,并配合 GNSS 记录运动轨迹
3跌倒检测与预警多特征融合算法实时判断运动状态,检测到跌倒时触发语音与灯光警报,并把紧急信息上报服务端
4减碳计量构建“步数—距离—减碳量”拟合模型,把运动数据实时换算为减碳量并在多端展示
5久坐提醒持续监测坐姿时长,达到设定阈值(默认 3600 秒)时以语音与灯光提示起身活动
6多端联动客户端、服务端与 Web 前端数据实时同步,支持网页端远程查看状态、下发指令、查询历史数据
7离线运行网络不稳定时自动缓存数据,网络恢复后再同步至服务端,确保运动数据不丢失

1.3.2 工程结构要求

系统设计遵循四条核心原则:场景适配——结合校园多场景需求实现功能差异化适配;精准可靠——优化传感器采集与算法处理,确保数据监测准确;便捷实用——优化设备体积与佩戴方式,简化操作逻辑;多端协同——搭建联动架构,实现数据同步与远程控制。

硬件选型同样遵循性能稳定、功耗低、体积小、适配校园场景的原则:主控需要足够算力支撑 50Hz 高频采样与多端通信,因此选择搭载 Linux 系统、扩展接口丰富的行空板 M10;传感与交互模块则围绕腰部穿戴场景挑选体积小、接口标准的型号,最终整体塞入一只运动腰包,实现“看不见的科技”。

二、设计思维导图

基于行空板M10《智碳腰带Smart Carbon Belt》_image_1.webp

三、硬件选用与连接

3.1 硬件清单

作品以行空板 M10 为主控,搭配多模态传感与交互模块,并配一台服务器承载服务端程序:

序号名称规格 / 型号数量接口 / 引脚主要用途
1行空板(主控)M10(板载 ICM20689 六轴加速度计)1主控 / 板载 I2C数据采集、算法运算、UI 显示、网络连接
2GNSS 模块TEL0157(GPS / 北斗双模)1UART 串口配速、轨迹、时间获取
3温湿度传感器DHT111GPIO P23环境温度、湿度监测
4语音合成模块DFR07601I2C语音提示、状态播报
5RGB 灯带WS2812(19 灯珠)1GPIO P21状态指示、紧急警报
6数字触摸传感器电容触摸1GPIO P24模式切换等设备交互
7模拟角度传感器旋钮1GPIO P22灯带亮度等参数调节
8运动腰包黑色运动腰包1穿戴产品承载与固定
9外壳材料3mm 椴木木板若干激光切割外壳、锁扣与挂钩
10电池扩展板锂电池(约 5000mAh,支持快充)1整机供电,续航 8 小时以上
11服务器云服务器或电脑1公网 / 局域网远程控制、历史记录与数据展示

注:申报材料未逐项列采购单价,故本表不填列金额,仅列型号、数量、接口与用途。

3.2 硬件连接

各模块按接口特性接线:板载 ICM20689 六轴加速度计与 DFR0760 语音合成模块通过 I2C 与行空板通信;DHT11 温湿度传感器接 GPIO P23;TEL0157 GNSS 模块通过 UART 串口连接;WS2812 灯带接 P21、电容触摸接 P24、模拟角度传感器(旋钮)接 P22。接线完成后整体装进运动腰包,并优化固定方式以减少运动晃动。

图 3-1 硬件连接图:以行空板 M10 为中心,向四周连接 GNSS、语音合成、RGB 灯带、旋钮、DHT11 与触摸模块

图 3-1 硬件连接图:以行空板 M10 为中心,向四周连接 GNSS、语音合成、RGB 灯带、旋钮、DHT11 与触摸模块

需要说明的是,程序实际使用的引脚以源码 config.py 为准(DHT11=P23、触摸=P24、旋钮=P22、灯带=P21)。

3.3 模块角色与参数

硬件搭建完成后逐项测试,重点验证模块稳定性与数据采集准确性,结果如下:

模块在系统中的角色关键参数 / 测试结果
行空板 M10主控与显示中枢ARM Cortex-A53 + Linux,支撑 50Hz 采样与多端通信
ICM20689 六轴提供原始加速度与角速度数据采集误差 ≤5%
DHT11环境温湿度采集温度误差 ≤2℃、湿度误差 ≤5%RH
TEL0157 GNSS户外定位、配速与授时无遮挡搜星 ≤30 秒,定位误差 ≤5 米
DFR0760 语音语音播报与状态提示播报清晰准确,配合灯带区分模式与警报
WS2812 灯带模式指示与紧急警报灯珠 19 颗,模式与警报色区分明显
电源系统整机供电满电连续运行 ≥8 小时,快充 2 小时满电

测试表明所有硬件模块满足系统设计要求,为软件开发与算法优化奠定了基础。

四、结构安装与制作过程

4.1 外观设计

作品跳出传统手环的思维定式,把科技化为腰间一抹别致:整体采用腰带形态,以运动腰包承载,外部加装 3mm 椴木激光切割外壳,正面为显示屏面板,一侧以斜纹镂空兼顾散热与观感,外置 WS2812 灯带作为状态呼吸光。外观设计概念图如下:

图 4-1 外观设计:3D 建模概念图(黑色腰带 + 木质外壳 + 显示屏 + 外置灯带)

图 4-1 外观设计:3D 建模概念图(黑色腰带 + 木质外壳 + 显示屏 + 外置灯带)

取色与形态上做了三点取舍:其一,用木质外壳替代工程塑料,成本低、加工快,也便于反复迭代;其二,屏幕做在腰侧正前方,抬手可读、低头不显眼,减少课堂注意力分散;其三,灯带做外置窄条而非整圈包裹,既保证模式辨识度,又控制功耗与体积。

4.2 结构设计

结构部分用激光切割完成,图纸由四组零件构成:外壳(含屏幕开窗与散热斜纹)、锁扣(腰带开合)、操控面板挂钩(固定交互模块)与 灯带挂钩(走线固定)。切割图纸如下:

图 4-2 结构设计:激光切割外壳图纸,含外壳、锁扣、操控面板挂钩与灯带挂钩四组零件

图 4-2 结构设计:激光切割外壳图纸,含外壳、锁扣、操控面板挂钩与灯带挂钩四组零件

4.3 硬件装配与固定

3D 建模确定尺寸后进入实物装配:将主控与各模块装入腰包内衬,用木质外壳包裹主控与屏幕,把 GNSS 模块置于腰包上沿以改善搜星,传感器靠人体近端布置以降低晃动噪声。装配后逐项调试,排除接触不良、信号干扰等问题,确保佩戴舒适、运行稳定。

图 4-3 结构设计过程:使用 3D 建模软件绘制腰带外壳与整机造型

图 4-3 结构设计过程:使用 3D 建模软件绘制腰带外壳与整机造型

4.4 制作过程与成品

整个作品分六个阶段推进,逐步打磨:①提出问题、构思方案——调研穿戴设备痛点,明确腰部佩戴方式、三种场景模式与五大核心功能;②硬件选型、搭建原型机——以行空板 M10 为主控完成接线与功能验证;③结构设计、安装调试——完成 3D 建模与图纸设计,把硬件装进腰包并优化固定;④核心算法开发——实现 50Hz 采样与四大核心算法,参考学术论文适配校园场景;⑤UI 精调、佩戴体验测试——优化行空板界面,多次佩戴调整结构与操作逻辑;⑥最终调试与多端联动——测试 GNSS 户外性能,开发服务端与 Web 前端,修复缺陷优化交互。

图 4-4 成品实拍:腰带运动模式界面,屏幕同屏显示时间、步数与减碳量,灯带同步指示

图 4-4 成品实拍:腰带运动模式界面,屏幕同屏显示时间、步数与减碳量,灯带同步指示

成品屏幕在运动模式下同屏显示时间(19:56:43)、步数(394 步)与减碳量,抬手即可确认当前运动状态,把“看不见的减碳”变成了看得见的数据。

五、编程流程分析

程序采用“采样线程 + 主循环”的双层结构:采样线程以 50Hz 高频采集 IMU 与温湿度数据,避免阻塞主流程;主循环每 0.1 秒调度一次,负责模式分发、算法处理、界面刷新与数据上传。核心流程如下:

基于行空板M10《智碳腰带Smart Carbon Belt》_image_2.webp

开始 / 上电启动初始化:行空板 M10、IMU(I2C)、DHT11(P23)、GNSS(UART)、语音、灯带、UI启动 50Hz 多传感器采样线程(IMU + 温湿度 + GNSS 同步采集)主循环(0.1s/次):读取当前模式与传感器数据当前模式?生活模式环境监测 + 久坐提醒运动模式步数/配速/减碳计量会议模式静默黑屏,不打扰核心算法:重力去除 → 步数检测 / 姿态识别→ 跌倒检测(合加速度 / 变化率 / 能量)判定跌倒?语音 + 灯带警报,上报紧急事件至服务端是否HTTP/TCP 上传 JSON → 服务端(Flask)刷新行空板 UI / 语音播报 → 回到主循环循环

流程中有三处关键设计:一是模式分发——三种模式各自独立处理,会议模式直接关闭显示,实现静默佩戴;二是跌倒优先——跌倒判定为“是”时直接进入警报与上报分支,不被其他逻辑延迟;三是异常兜底——主循环用 try/except 包裹,单次异常只记录日志、不中断运行,保证长时间佩戴稳定。

 

六、参考代码

作品客户端运行于行空板,使用 Python + pinpong 库开发;服务端基于 Flask。下面按“最有辨识度的设计 → 核心算法与参数 → 服务端处理”三部分展示关键代码,并逐行标注中文注释。完整源码以作品论文与源程序为准。

图 6-1 程序界面:在编辑器中编写与调试服务端代码(Flask 接口与数据保存逻辑)

图 6-1 程序界面:在编辑器中编写与调试服务端代码(Flask 接口与数据保存逻辑)

6.1 主循环与多场景调度(client/main.py)

主循环是设备端的“大脑”,负责 GNSS 卫星巡检、界面时间刷新、采样率监控、模式自动退出与三种场景逻辑的分发:

def main_loop():
    """主循环:设备端核心执行逻辑,调度各模块协同工作"""
    global _sample_stats_counter, _gnss_check_counter, gnss_valid
    while running:                                          # 设备未退出则持续循环
        try:
            # 非运动/会议模式下,每 20 秒检查一次 GNSS 卫星数量(200 × 0.1s)
            if current_mode != MODE_SPORT and current_mode != MODE_MEETING:
                _gnss_check_counter += 1
                if _gnss_check_counter >= 200:
                    _gnss_check_counter = 0
                    if GNSS_AVAILABLE:
                        sat_count = gnss_manager.get_satellite_count()   # 读取当前搜星数
                        gnss_valid = gnss_manager.has_valid_fix(sat_count)  # 卫星数达标才算有效定位
                        logger.debug(f"GNSS 卫星检查:{sat_count}颗,有效:{gnss_valid}")

            # 会议模式关闭屏幕显示,实现"静默佩戴",不打扰课堂
            if not message_showing:
                if current_mode != MODE_MEETING and ui:
                    if 'time_text' in ui_elements:
                        if gnss_valid:
                            gnss_dt = gnss_manager.get_datetime()        # 有定位优先用 GNSS 授时
                            time_str = gnss_dt.strftime("%H:%M:%S") if gnss_dt else datetime.now().strftime("%H:%M:%S")
                        else:
                            time_str = datetime.now().strftime("%H:%M:%S")  # 无定位则退化为系统时间
                        ui_elements['time_text'].config(text=time_str)   # 刷新界面时间显示

            # 每 5 秒输出一次实际采样率,用于监控 50Hz 采样是否稳定
            _sample_stats_counter += 1
            if _sample_stats_counter >= 50:
                _sample_stats_counter = 0
                if sampler is not None:
                    try:
                        from sensors import get_sampling_stats
                        stats = get_sampling_stats()
                        logger.debug(f"采样统计:实际采样率{stats['actual_sample_rate']:.1f}Hz,总采样:{stats['sample_count']}")
                    except Exception:
                        pass                                        # 统计失败不影响主流程

            # 运动模式无操作 15 秒自动切回生活模式,避免用户忘记退出
            global env_auto_exit_start_time
            if env_auto_exit_start_time is not None:
                elapsed = time.time() - env_auto_exit_start_time
                if elapsed >= 15:
                    env_auto_exit_start_time = None
                    if current_mode == MODE_SPORT:
                        change_mode_internal(MODE_LIFE)
                        add_voice("已自动退出运动模式")

            # 非紧急状态下执行对应场景逻辑
            if not emergency_mode:
                if current_mode == MODE_LIFE:
                    handle_life_mode()          # 生活模式:环境监测 + 久坐计时
                elif current_mode == MODE_SPORT:
                    handle_sport_mode()         # 运动模式:步数 / 配速 / 减碳计量
                elif current_mode == MODE_MEETING:
                    handle_meeting_mode()       # 会议模式:静默运行
        except Exception as e:
            logger.error(f"主循环错误:{e}")      # 单次异常只记录,不中断整体运行
        time.sleep(0.1)                          # 0.1 秒一个周期,匹配 50Hz 采样率

6.2 四大核心算法与参数配置(client/services/algorithms.py)

算法层把重力去除、步数检测与跌倒检测封装为类,参数集中写在 config.py 中,便于反复调试:

import numpy as np
from config import STEP_CONFIG, GRAVITY_REMOVER_CONFIG, FALL_CONFIG

class GravityRemover:
    """重力去除算法:低通滤波 + 滑动平均,分离重力与线性加速度"""
    def __init__(self, alpha=GRAVITY_REMOVER_CONFIG["filter_alpha"],      # 滤波系数 α=0.52
                 window_size=GRAVITY_REMOVER_CONFIG["filter_window"]):     # 滑动窗口 =9
        self.alpha = alpha
        self.window_size = window_size
        self.gravity = np.array([0.0, 0.0, 9.81])   # 重力初值:Z 轴约 1g
        self.buffer = []                            # 线性加速度滑动缓存
    def process(self, accel):
        # Ag(n) = α·Ad(n) + (1-α)·Ag(n-1):一阶低通估计当前重力分量
        self.gravity = self.alpha * np.array(accel) + (1 - self.alpha) * self.gravity
        linear_accel = np.array(accel) - self.gravity   # Al(n) = Ad(n) - Ag(n) 得线性加速度
        self.buffer.append(linear_accel)
        if len(self.buffer) > self.window_size:
            self.buffer.pop(0)                          # 保持窗口长度不变
        return np.mean(self.buffer, axis=0).tolist()    # 滑动平均输出,抑制高频抖动

class StepDetector:
    """步数检测算法:腰部适配的波峰—波谷阈值法(参考腰部 MEMS 计步论文)"""
    def __init__(self, t_max=STEP_CONFIG["t_max"],      # 波峰阈值 0.008g
                 t_min=STEP_CONFIG["t_min"],            # 波谷阈值 -0.010g
                 window_size=STEP_CONFIG["window_size"]):
        self.t_max, self.t_min = t_max, t_min
        self.window_size = window_size
        self.buffer = []
        self.step_count = 0
        self.last_state = "idle"                        # 状态机:idle→peak→valley
    def detect(self, linear_accel):
        y_accel = linear_accel[1]                       # 只取 Y 轴分量(腰部前后摆动最敏感)
        self.buffer.append(y_accel)
        if len(self.buffer) < self.window_size:
            return self.step_count                      # 数据不足不判定
        window_mean = np.mean(self.buffer[-self.window_size:])   # 窗口平滑值
        if window_mean > self.t_max and self.last_state != "peak":
            self.last_state = "peak"                    # 越过波峰阈值
        elif window_mean < self.t_min and self.last_state == "peak":
            self.step_count += 1                        # 先峰后谷 → 记一步
            self.last_state = "valley"
        elif abs(window_mean) < abs(self.t_min) / 2:
            self.last_state = "idle"                    # 回到静止态,避免重复计数
        return self.step_count

class FallDetector:
    """跌倒检测算法:合加速度 + 变化率 + 能量多特征融合"""
    def __init__(self):
        self.ra_threshold      = FALL_CONFIG["ra_threshold"]        # 合加速度阈值 1.85g
        self.sa_threshold      = FALL_CONFIG["sa_threshold"]        # 加速度变化率阈值 2.2
        self.energy_threshold  = FALL_CONFIG["energy_threshold"]    # 加速度能量阈值 3.5
        self.window_duration   = FALL_CONFIG["window_duration"]     # 分析窗口 3 秒
        self.sampling_rate     = FALL_CONFIG["sampling_rate"]       # 采样率 50Hz
        self.window_size = int(self.window_duration * self.sampling_rate)
        self.accel_buffer = []
    def detect(self, linear_accel):
        self.accel_buffer.append(linear_accel)
        if len(self.accel_buffer) < self.window_size:
            return False                                # 窗口未满不判定
        window = np.array(self.accel_buffer[-self.window_size:])
        ra = np.sqrt(np.sum(window ** 2, axis=1))       # 合加速度 ra
        sa = np.abs(np.diff(ra))                        # 加速度变化率 sa
        energy = np.sum(ra ** 2) / self.window_size     # 窗口内加速度能量
        # 三参数同时超标才判为跌倒,可有效排除跳跃、奔跑等剧烈运动误报
        if (np.max(ra) > self.ra_threshold and
            np.max(sa) > self.sa_threshold and
                energy > self.energy_threshold):
            return True
        return False

对应的核心参数如下(均经多次调试确定):

# ==================== 硬件引脚定义 ====================
PIN_DHT11 = "P23"        # DHT11 温湿度传感器(GPIO)
PIN_TOUCH = "P24"        # 电容触摸传感器(模式切换交互)
PIN_KNOB  = "P22"        # 模拟角度传感器(旋钮,灯带亮度调节)
PIN_LED   = "P21"        # WS2812 RGB 灯带(状态指示 / 紧急警报)
LED_COUNT = 19           # 灯带灯珠数量
# 六轴加速度计 ICM20689 集成在行空板 M10 上,走板载 I2C;GNSS TEL0157 走 UART

# ==================== 三种场景模式 ====================
MODE_LIFE, MODE_SPORT, MODE_MEETING = 0, 1, 2
# 模式切换顺序(长按 2 秒触发):生活 → 会议 → 运动 → 生活
MODE_CYCLE = [MODE_LIFE, MODE_MEETING, MODE_SPORT]

# ==================== 核心算法参数(经多次调试确定)====================
STEP_CONFIG = {"t_max": 0.008, "t_min": -0.010, "window_size": 3}
GRAVITY_REMOVER_CONFIG = {"filter_alpha": 0.52, "filter_window": 9}
POSTURE_CONFIG = {"sit_pitch_change": 18, "y_sit_threshold": 0.18,
                  "y_stand_threshold": 0.10, "stable_window": 15}
FALL_CONFIG = {"ra_threshold": 1.85, "sa_threshold": 2.2,
               "energy_threshold": 3.5, "window_duration": 3.0, "sampling_rate": 50}

# ==================== 减碳系数与久坐提醒 ====================
CARBON_PER_STEP = 0.03            # 每步减碳系数(作品模型设定值)
DEFAULT_SITTING_REMIND_DURATION = 3600   # 久坐提醒阈值:3600 秒

6.3 服务端数据接收与减碳换算(server/server.py)

服务端负责接收设备上报、计算步数增量与减碳量、处理跌倒紧急事件并定期落盘:

@app.route('/api/stats', methods=["POST"])
def update_status():
    """接收设备状态上报,处理运动数据与跌倒紧急事件"""
    global device_status, sport_history, device_last_step
    try:
        data = request.json or {}                       # 设备端以 JSON 上报
        current_time = datetime.datetime.now()
        rollover_daily_device_counters(current_time)    # 跨天自动清零当日计数
        current_mode = data.get("mode", 0)
        if current_mode not in MODE_VALUES:             # 模式值非法直接拒绝
            return jsonify({"status": "error", "message": "无效模式值"}), 400
        current_step = max(0, int(data.get("step", 0) or 0))
        # 本次上报步数 − 上次步数 = 新增步数(设备重启归零时按当前值计)
        step_increment = current_step - device_last_step if current_step >= device_last_step else current_step
        # 仅运动模式下按"每步减碳系数"累计减碳量
        carbon_increment = step_increment * CARBON_PER_STEP if (current_mode == 1 and step_increment > 0) else 0
        device_status["carbon_reduce"] = round(device_status["carbon_reduce"] + carbon_increment, 4)
        device_last_step = current_step                 # 记录本次步数,供下次求增量
        device_status.update({"mode": current_mode,
                              "step": device_status["step"] + step_increment,
                              "online": True, **data})
        today = current_time.strftime("%Y-%m-%d")
        sport_history[today].update({"sport_time": device_status["sport_time_today"],
                                     "step": device_status["step"],
                                     "carbon_reduce": device_status["carbon_reduce"]})
        schedule_save()                                 # 定期落盘,防断电丢数据
        # 跌倒紧急事件:去重记录,避免同一事件反复入库
        if data.get("emergency") and not device_status.get("emergency_recorded"):
            emergency_records.append({
                "time": current_time.strftime("%Y-%m-%d %H:%M:%S"),
                "message": "检测到摔倒,需要紧急救助",
                "location": "未知",
                "resolved": False
            })
            schedule_save()
            device_status["emergency_recorded"] = True
        elif not data.get("emergency"):
            device_status["emergency_recorded"] = False  # 事件结束后复位标志
        return jsonify({"status": "success"})
    except Exception as e:
        logger.error(f"更新状态错误:{e}")                # 异常返回 500,便于设备端重试
        return jsonify({"status": "error", "message": str(e)}), 500

七、作品创新点

作品结合校园场景需求,实现六大创新:

序号创新点具体说明
1多模态传感融合把运动、环境、定位等多类采集功能集成于一件轻量化腰部设备,兼顾便携性与数据全面性
2多场景自适应控制生活、运动、会议三种模式平滑切换,会议模式静默黑屏,从设计上规避课堂干扰
3GNSS-IMU 协同定位GNSS 信号遮挡时自动切换导航方式,保障户外运动数据采集的连续性
4运动—减碳联动计量构建“步数—距离—减碳量”拟合模型,实时量化运动的环保贡献并多端展示
5校园场景算法适配在学术论文算法基础上做适配性改造,降低腰部晃动导致的误判率
6多端协同与离线备份客户端、服务端、Web 端联动,断网自动缓存、联网自动同步,确保数据不丢失

除此之外,作品还实现了腰带新形态AI 语音随行两个差异化亮点——跳出传统手环的思维定式,把科技化为腰间一抹别致;每一步都有语音陪伴,实时播报的不只是数据,更是前行的动力。

八、项目应用拓展

作品的核心能力(多模态采集 + 场景模式 + 多端联动)可迁移到更广的场景,典型拓展方向如下:

应用场景功能组合使用方式价值
校园体育课 / 大课间运动模式 + 步数配速 + 轨迹体育教师统一发放,课后在网页端汇总全班运动量量化运动强度,支撑体育教学的客观评价
课堂与自习会议模式 + 久坐提醒上课前切到会议模式静默运行,坐着超时以轻震动/语音提醒不干扰教学,同时守护用眼与坐姿健康
学生日常通勤步行运动模式 + 减碳计量上下学步行自动计步并换算减碳量把日常通勤转化为可见的低碳贡献
低碳校园活动多端联动 + 历史数据以班级为单位累计减碳量,网页端排名展示为低碳校园建设提供可量化的抓手
户外跑步 / 骑行GNSS + IMU 协同轨迹与配速记录,遮挡路段自动切换导航提升户外运动数据的连续性
家庭健身与康复姿态识别 + 跌倒检测居家锻炼时监测姿态,异常跌倒即时告警为老人、康复人群提供安全守护(需按场景重新标定)
图 8-1 佩戴场景示意:腰带贴合腰部佩戴,屏幕朝向正前方,运动数据抬手可读

图 8-1 佩戴场景示意:腰带贴合腰部佩戴,屏幕朝向正前方,运动数据抬手可读

需要说明的是,跨场景使用时算法阈值需重新标定,例如老人生理特征与运动幅度与中学生差异较大,跌倒检测的三项阈值应针对性调整,不宜直接照搬。

九、小结

9.1 团队成员与分工

成员分工
连炳宇代码编程、核心算法设计、3D 建模与设备外观组装,主导软件开发与硬件调试
陈泓宇作品整体设计、PPT 制作、外观设计与视频制作,参与硬件搭建与佩戴体验测试

9.2 团队研讨记录

第一次讨论(2026 年 2 月 29 日 18:10—18:40):确定作品采用腰带式佩戴方案;讨论核心功能设计,明确运动监测、跌倒检测、减碳计量等核心需求;确定网络通信架构与三端联动方式。主要决定:主控采用行空板 M10;设定生活/运动/会议三种场景模式;加入 GNSS 模块实现轨迹与配速记录。

第二次讨论(2026 年 3 月 5 日 17:50—18:40):确定 GNSS 运动记录与配速展示方式,优化行空板端 UI;设计网页端历史记录与详情页布局,确定数据可视化方案——用轨迹图展示运动轨迹,网页端支持切换 7 天、14 天、30 天查看历史统计;同时整理作品说明与演示材料。

9.3 收获与不足

作品创作全程围绕学生需求,团队分工协作,克服了硬件兼容性、算法优化、多端联动等难题。通过调研明确需求、反复调试硬件与软件,我们不仅掌握了硬件搭建、编程与算法设计技能,还锻炼了团队协作与问题解决能力,也深刻认识到科技作品必须同时注重实用性与创新性。

同时作品仍有明显不足:

①GNSS 轨迹精度不足,操场转弯或有遮挡时易出现轨迹漂移;

②人体工学设计有待优化,长时间佩戴存在不适感;

③数据以 JSON 文件存储,难以支撑大量长期数据;

④公网数据传输未加密,存在安全隐患;

⑤主控与部分模块成本偏高,不利于大规模普及;

⑥外观体积偏大,外壳造型较简单,佩戴有异物感。

 

9.4 后续计划从六个方向改进:加入客户端鉴权与数据加密传输,提升公网安全性;更换高精度 GNSS 模块并融合惯性导航算法,减少轨迹漂移;优化外壳设计、缩小体积,提升佩戴舒适度与美观度;引入数据库存储,提升大量数据处理能力;选用性价比更高的核心模块,降低成本便于普及;拓展心率监测、睡眠监测等功能,进一步丰富产品实用性。

硬件清单

创作许可协议

本项目采用 CC BY(署名) 进行许可。

所需材料/产品

加载全部

    Gravity: DHT11温湿度传感器(Arduino兼容)

    Gravity: DHT11温湿度传感器(Arduino兼容)

    Gravity: DHT11温湿度传感器(Arduino兼容)

    Touch Kit 电容触摸板套件 Arduino兼容

    Touch Kit 电容触摸板套件 Arduino兼容

    Touch Kit 电容触摸板套件 Arduino兼容

    行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

    行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

    行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

相关推荐

评论(0)
- 没有更多了 -

创作许可协议

本项目采用 CC BY(署名) 进行许可。

相关推荐

所需材料/产品

Gravity: DHT11温湿度传感器(Arduino兼容)

Gravity: DHT11温湿度传感器(Arduino兼容)

Gravity: DHT11温湿度传感器(Arduino兼容)

Touch Kit 电容触摸板套件 Arduino兼容

Touch Kit 电容触摸板套件 Arduino兼容

Touch Kit 电容触摸板套件 Arduino兼容

行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

行空板M10(UNIHIKER)Python教学主控板 - 蘑菇云科创教育

加载全部