基于 STM32F103 微控制器、MPU6050 六轴惯性传感器与 NNoM (Neural Network on Microcontrollers) 轻量级嵌入式神经网络推理框架的低功耗边缘端空间手势 / 魔法动作识别系统。
- Edge AI 边缘推理:在主频仅 72MHz、SRAM 仅 20KB 的经典 STM32F103 (ARM Cortex-M3) 上部署 1D/2D CNN 卷积神经网络,实现端侧毫秒级低延迟手势分类;
- 全链路端到端开发体系:从串口传感器数据采集、Matlab 频域滤波分析、Python/Keras 模型训练量化,到 MCU 端 C 代码自动生成与 PC 端动作联动,形成完整软硬件 AIoT 闭环;
- 工业级传感器融合:支持 InvenSense DMP 硬件解算 与 Mahony AHRS 四元数姿态解算 算法,有效滤除高频机械振动与运动噪声;
- 上位机联动:适配 VOFA+ 实时波形调试工具 与 Python 动画可视化客户端(PC_Action / SpellsCard)。
模型针对三轴加速度与三轴角速度时序数据进行特征提取,支持多种空间连续挥舞动作:
| 动作类型 | 英文代号 | 动作轨迹描述 | 对应魔法手势 |
|---|---|---|---|
| 羽动 | Wing |
空间弧形轻挥展开 | 飞来咒 / 羽加迪姆 |
| 画圆 | Ring |
空间正向/逆向顺滑绕圆 | 守护神咒 / 原地防御 |
| 斜切 | Slope |
空间左上至右下对角线快速划击 | 障碍重重 / 切割 |
| 纵劈 | UpAndDown |
垂直方向自上而下大幅度挥动 | 击退咒 / 下劈 |
| 波浪 | Wave |
水平方向连续 S 型波浪摆动 | 呼神护卫 / 震荡波 |
Magic_Wand/
├── Core/ # STM32CubeMX HAL 驱动层、系统时钟与基础外设
├── BSP/ # 板级支持包 (IMU、按键检测、LED/WS2812 驱动)
├── Middlewares/ # 中间件
│ ├── AHRS/ # Mahony 姿态解算算法 (四元数融合)
│ ├── IMU_DMP/ # MPU6050 官方 DMP 运动处理引擎
│ ├── LOG/ # 嵌入式带时间戳的分级日志组件
│ └── VOFA/ # VOFA+ 串口数字示波器通信协议
├── CNN/ # 机器学习与边缘计算核心
│ ├── nnom-master/ # NNoM 神经网络底层纯 C 推理引擎
│ ├── CNNTrainRaw.py # Keras/TensorFlow 模型构建、训练与自动量化导出脚本
│ ├── Serial_Read.py # 串口数据采集与手势样本自动标注脚本
│ ├── weights.h # 量化生成的静态模型权重数组 (部署至单片机)
│ └── PC_Action/ # 上位机手势实时识别与魔法卡片动画交互
├── Matlab_File/ # Matlab 信号分析脚本 (低通滤波器 FIR/IIR 设计)
├── APP_TASK/ # 业务逻辑与应用任务 (IMU采样任务、CNN推理任务等)
├── CMakeLists.txt # CLion / GCC-ARM 交叉编译工程配置
└── MZ_CNN_Proj.ioc # STM32CubeMX 原始工程配置文件
运行数据采集脚本,手持魔法棒按提示完成指定手势挥舞:
python CNN/Serial_Read.py采集到的 6 轴 IMU 原始数据将自动分标签保存在 CNN/TraningData_*/ 目录中。
在 Matlab 中打开 Matlab_File/Lowpass_Show.m,分析动作时域/频域特性,设计数字低通滤波器以消除抖动。
运行训练脚本:
python CNN/CNNTrainRaw.py- 模型架构:
Input(N, 6) -> Conv1D / Conv2D -> ReLU -> MaxPool -> Dropout -> Dense -> Softmax; - 脚本自动执行 8-bit 对称整型量化(Integer Quantization);
- 自动生成适配 NNoM 的 C 语言头文件
CNN/weights.h。
- 工程构建:支持 CLion (CMake + arm-none-eabi-gcc) 或 Keil MDK / STM32CubeIDE;
- 资源占用:
arm-none-eabi-size MZ_CNN_Proj.elf text: ~78 KB (Flash) data/bss: ~15 KB (SRAM)
连接开发板 USB 或串口,启动上位机动画识别展示:
cd CNN/PC_Action
python Action.py当挥动魔法棒完成特定手势时,屏幕将同步触发对应魔法咒语的高清特效动画!
- 神经网络引擎基于 NNoM (Neural Network on Microcontroller);
- 姿态解算基于 Mahony AHRS 与 InvenSense DMP 驱动库。

