基于nnom的多选择器

核心组件

元件类型目的接口
STM32F103CB微控制器主处理单元-
MPU60506 轴 IMU移动侦测I2C 接口
W25Q64 系列闪存信号和配置存储SPI 系列
按钮用户输入模式选择和激活GPIO (通用输出)
搭载了LED用户反馈系统状态指示GPIO (通用输出)
RT6150 系列稳压器3.3V 电源-
型号 CH340NUSB 转串行开发和调试串口

作模式

系统有两种主要作模式,用于确定识别手势时的行为:

模式 0 (执行)

在此模式下,魔杖根据识别的手势执行预先录制的动作:

  • 对于 IR 模块:从闪存传输记录的 IR 信号
  • 对于 RF 模块:从闪存传输记录的 RF 信号
  • 对于自定义模块:执行特定于模块的函数

模式 1 (录制)

在此模式下,魔杖会在识别手势时记录信号:

  • 对于 IR 模块:记录来自外部设备(例如电视遥控器)的 IR 信号
  • 对于 RF 模块:记录来自外部发射器的 RF 信号
  • 对于自定义模块:记录特定于模块的数据

默认情况下,系统以模式 0 启动。长按按钮 (>0.5 秒) 可在模式之间切换,LED 指示灯模式提供当前模式的视觉反馈。

核心硬件组件

STM32F103CB 微控制器

STM32F103CB 微控制器用作 WAND 系统的中央处理单元。这款基于 ARM Cortex-M3 的 MCU 提供:

  • 72 MHz 最大 CPU 频率
  • 128 KB 闪存
  • 20 KB 的 SRAM
  • 接口:I2C、SPI、UART
  • 16 通道 12 位 ADC
  • 工作电压:3.3V

微控制器负责:

  1. 从 IMU 读取运动数据
  2. 通过 CNN 模型处理数据以进行手势识别
  3. 根据识别的手势控制模块界面
  4. 管理电源状态和系统模式

MPU6050 IMU 传感器

MPU6050 是一个 6 轴运动跟踪装置,结合了 3 轴陀螺仪和 3 轴加速度计。它通过 I2C 接口与 STM32 通信,并为手势识别提供运动数据。

主要特点:

  • 数字输出加速度计和陀螺仪
  • 用于运动处理的数字运动处理器 (DMP)
  • I2C 接口工作频率为 400kHz
  • 每个轴的 16 位 ADC 分辨率
  • 可编程满量程范围:±2g、±4g、±8g、±16g(加速度计)和 ±250、±500、±1000、±2000°/s(陀螺仪)

W25Q64 闪存

W25Q64 是一款 64Mbit SPI 闪存,用于存储:

  • 手势识别模型参数
  • 模块配置数据
  • 针对不同手势录制的 IR/RF 信号

闪存通过 SPI 接口连接到 STM32,提供非易失性存储。

高级软件架构

系统初始化

系统初始化序列由该功能管理,该功能设置所有硬件外围设备并检测已安装的模块。System_Init()

核心处理循环

Cyberry Potter 魔杖的主要处理循环包括捕获手势数据、识别手势以及根据当前系统模式执行适当的模块处理程序。

模块系统

模块系统是一个关键的架构组件,它通过支持不同的硬件连接来提供灵活性。

模块检测和初始化

该磁棒使用 ADC 读数来识别通过特定于每个模块的分压器电路连接的模块。

手势识别架构

手势识别系统从 MPU6050 IMU 捕获运动数据,并使用通过 nnom 库实现的 CNN 对其进行处理。

IMU 数据采集

系统模式管理

中断处理

该系统将中断用于时间关键型功能,包括 IMU 数据采集和 IR/RF 信号处理。

内存管理

Cyberry Potter 系统利用不同的内存区域进行作:

内存类型用法
Flash (内部)程序代码、CNN 权重128KB 内置于 STM32F103CB 中
RAM运行时变量、数据缓冲区20KB 用于易失性作
W25Q64 闪光灯信号存储、用户配置8MB 外部闪存,用于存储 IR/RF 信号

目录结构

代码库被组织成几个反映架构组件的关键目录:

通信接口

该系统采用多个通信接口进行内部和外部交互:

接口协议主要用途
美国萨尔特1串行 (115200 波特)调试、PC 通信
I2C 接口I2C 接口IMU (MPU6050) 通信
SPI2SPI 系列外部闪存 (W25Q64) 访问
GPIO (通用输出)数字 I/O模块检测、按钮输入、LED 控制
外部接口红外/射频通过模块与外部设备通信

结论

Cyberry Potter Electromagic Wand 软件架构采用模块化、分层的方法,在保持一致用户体验的同时,允许灵活的硬件配置。实时手势识别、模块特定功能和基于模式的作相结合,实现了一个多功能平台,可通过直观的棒状手势控制各种外部设备。

代码库遵循关注点的清晰分离,为核心系统功能、手势识别、模块管理和硬件抽象提供不同的组件。这种设计有助于维护和扩展,允许在不进行重大架构更改的情况下添加新的模块和手势。

手势捕获过程

当用户按下魔杖上的按钮时,手势捕获过程开始。这将从 MPU6050 传感器启动 1.5 秒的数据收集窗口。

捕获序列

  1. 用户按下并释放按钮(短按)
  2. 系统禁用按钮中断以防止捕获过程中的干扰
  3. 系统启用 IMU 中断以进行数据收集
  4. 采样期间 LED 关闭以节省电力
  5. MPU6050 捕获 1.5 秒的运动数据
  6. 收集的数据经过预处理并馈送到 CNN 模型中

手势识别算法

该魔杖使用卷积神经网络 (CNN) 来识别各种运动模式。该模型使用 TensorFlow/Keras 进行训练,然后使用 nnom 库转换为 STM32 微控制器部署。

CNN 架构

CNN 模型由以下层组成:

  1. Input layer - 接受时间序列运动数据
  2. Conv1D 层(30 个滤波器,内核大小 3,步幅 3)
  3. LeakyReLU 激活
  4. Conv1D 层(15 个滤波器,内核大小 3,步幅 3)
  5. LeakyReLU 激活
  6. 拼合图层
  7. 密集图层(输出大小与手势数量匹配)
  8. Dropout 层(0.3 率)
  9. Softmax 输出层

支持的手势

该系统能够识别 13 种不同的手势,每个手势都映射到特定的作:

手势 ID手势名称描述
0RightAngle (右角)形成直角的运动
1锐角形成锐角的运动
2闪电闪电图案
3三角形三角运动
4Letter_h绘制字母 'h'
5letter_R绘制字母 'R'
6letter_W绘制字母 'W'
7letter_phi绘制希腊 phi 符号
8圆周运动
9UpAndDown上下运动
10喇叭状图案
11挥动动作
12无运动未检测到明显的运动

运行时数据处理

  1. 在 1.5 秒的捕获窗口内收集原始 IMU 数据
  2. 数据经过预处理(缩放)以用于模型输入
  3. CNN 模型通过其层处理数据
  4. 分析输出概率以确定最可能的手势
  5. 识别的手势将传递给模块处理程序以执行作

模式相关行为

手势识别系统与模块系统的交互方式因当前模式而异:

  • 模式 0 (执行):识别的手势触发预先录制的命令的执行
  • 模式 1 (Record):识别的手势开始录制新命令

性能注意事项

手势识别系统旨在在资源受限的 STM32 微控制器上高效运行。多项优化可确保可靠的性能:

  1. 有限采样窗口:1.5 秒的捕获窗口提供足够的数据进行识别,同时最大限度地减少处理开销
  2. 高效的 CNN 架构:该模型设计为轻量级,同时保持准确性
  3. 量化:量化模型权重以减少内存占用
  4. nnom 库:使用优化的 nnom 库在微控制器上进行神经网络推理

定制流程

用户可以通过使用自己的手势数据训练模型来自定义手势识别系统:

  1. 在 config.h 中设置以启用数据收集模式SYSTEM_MODE_DATA_COLLECT
  2. 使用 Serial_Read.py 通过串行连接收集手势数据
  3. 运行 CNNTrainRaw.py 以使用收集的数据训练新模型
  4. 该脚本会生成一个包含模型参数的 weights.h 文件
  5. 替换固件中已有的 weights.h 文件并重新编译

错误处理

手势识别系统包括多种处理潜在错误的机制:

  1. IMU 通信检查:验证 IMU 在初始化期间是否正常运行
  2. 无移动检测:包括一个“NoMotion”类,用于处理未执行不同手势的情况
  3. 置信度阈值:仅考虑置信度高于特定阈值的手势
  4. LED 反馈:提供有关系统状态和识别结果的视觉反馈

数据采集

本页记录了从 Cyberry Potter Electromagic Wand 收集惯性测量单元 (IMU) 数据以训练手势识别模型的过程。有效的数据收集对于实现准确的手势分类至关重要。

数据收集过程概述

数据收集过程包括在特殊数据收集模式下使用棒硬件,以在执行特定手势时捕获原始 IMU(加速度计和陀螺仪)读数。然后,这些数据通过串行连接传输到计算机,并保存为文本文件,以供以后在 CNN 训练中使用。

数据收集配置

在收集数据之前,您必须将魔杖的固件配置为在数据收集模式而不是推理模式下运行。

硬件要求

  • 组装的 Cyberry Potter Electromagic 魔杖
  • 用于连接计算机的 USB Type-C 数据线
  • 设置了 Python 环境的计算机

固件配置

  1. 修改文件以启用数据收集模式:config.h

    • 取消注释定义SYSTEM_MODE_DATA_COLLECT
    • 这会将魔杖从正常作切换到数据传输模式
  2. 将修改后的固件编译并烧录到魔杖上

正确配置后,当按下按钮时,魔杖将通过串行连接输出原始 IMU 数据,而不是尝试对手势进行分类。

数据收集脚本

该脚本通过与魔杖通信、接收 IMU 数据并将其保存到正确标记的文本文件来管理数据收集过程。Serial_Read.py

脚本作流程

使用脚本

  1. 运行脚本:python Serial_Read.py
  2. 从显示的列表中选择适当的 COM 端口
  3. 从预定义列表中选择要录制的手势:
    • 直角、锐角、闪电、三角形、Letter_h、letter_R、letter_W、letter_phi、圆、UpAndDown、喇叭、波浪、NoMotion
  4. 指定要为此手势录制的样本数
  5. 对于每个样本:
    • 按下魔杖按钮
    • 执行手势
    • 该脚本将在收到数据时保存数据
  6. (可选)录制其他手势

数据存储和组织

目录结构

该脚本使用以下命名约定创建目录结构:

./TrainingData_[month]_[day]/

例如,如果在 8 月 23 日收集数据,则文件将保存到 。./TrainingData_8_23/

文件命名约定

数据文件使用指示手势类型和顺序索引的名称进行保存:

[gesture_name]_[index].txt

例如:, , etc.RightAngle_1.txtRightAngle_2.txt

该脚本会自动跟踪用于每个手势的最高索引并相应地递增,以确保新记录不会覆盖现有数据。

数据格式

收集的数据包括来自 MPU6050 IMU 传感器的原始读数,包括 3 轴加速度计和 3 轴陀螺仪随时间变化的值。采样率和持续时间由固件固定。

示例数据格式

每个数据文件包含一行 6 个值,代表连续时间点的传感器读数:

ax ay az gx gy gz
ax ay az gx gy gz
...

哪里:

  • ax, , : X、Y 和 Z 轴的加速度计读数ayaz
  • gx, , : X、Y 和 Z 轴的陀螺仪读数gygz

按下按钮时,IMU 数据将被捕获大约 1.5 秒,从而每个手势的样本数是固定的。

支持的手势

该脚本支持收集 13 种预定义手势的数据:

指数手势名称
1RightAngle (右角)
2锐角
3闪电
4三角形
5Letter_h
6letter_R
7letter_W
8letter_phi
9
10UpAndDown
11
12
13无运动

这些手势对应于项目文档中显示的符卡。

数据收集的最佳实践

为了获得最佳模型训练结果,请遵循以下最佳实践:

  1. 一致性:以一致的速度和大小执行每个手势
  2. 多样性:包括您执行每个手势的方式的细微变化,以提高模型的稳健性
  3. 样本量:每个手势至少收集 10-20 个样本以进行充分训练
  4. 平衡:确保每种手势类型的样本数相似
  5. 移动:按下按钮后立即开始手势,因为数据收集立即开始
  6. 定位:将磁棒保持在舒适、自然的位置 - 方向会影响 IMU 读数
  7. 验证:在采集大量样品之前验证数据是否保存正确

故障 排除

常见问题及其解决方案:

  1. 未检测到串行端口

    • 确保 USB 数据线已正确连接
    • 验证 Wand 是否已开机
    • 检查是否安装了正确的驱动程序
  2. 未收到数据

    • 确认在 config.h 中未注释SYSTEM_MODE_DATA_COLLECT
    • 验证固件是否已成功刷新
    • 检查所选的 COM 端口是否正确
  3. 数据不完整或损坏

    • 该脚本检查有效的数据标头 - 如果数据被拒绝,请重试
    • 确保按住按钮足够长的时间以完成数据收集
    • 验证魔杖的电池是否充满电

与固件集成

中包含的导出模型旨在编译到固件中,其中包含以下关键组件:weights.h

  1. 权重和偏差:存储为常数整数数组
  2. 量化参数:用于正确缩放的十进制位位置
  3. 层配置:定义每个层参数的结构
  4. Model Creation Function:组装神经网络的函数nnom_model_create()

在运行时,固件:

  1. 从 MPU6050 捕获 IMU 数据
  2. 预处理数据以匹配训练输入格式
  3. 使用 NNoM 库通过 CNN 模型传递数据
  4. 解释输出以确定识别的手势

模型结构与在 Python 中训练的模型结构相同,但针对嵌入式执行进行了优化:

性能注意事项

为优化资源受限环境的 CNN 模型,我们做出了几种设计选择:

  1. 模型大小:架构特意保持较小(两个卷积层,一个密集层)
  2. 参数效率:使用 1D 卷积而不是 2D 卷积可以减少参数数量
  3. 量化:8 位整数量化降低了内存需求和计算开销
  4. 选定的特征列:仅使用陀螺仪数据(第 3、4、5 列)而不是所有 IMU 数据
  5. 固定序列长度:使用 150 个时间步的固定输入大小来标准化处理

这些优化使模型能够在 STM32F103CB 微控制器上高效运行,同时保持足够的手势识别精度。

CNN 集成

目的和范围

本文档介绍了如何将预先训练的卷积神经网络 (CNN) 模型集成到 Cyberry Potter Electromagic Wand 固件中。它涵盖了 STM32 微控制器上神经网络的模型架构、部署过程和运行时作。

模型量化

该模型被量化为使用 8 位整数而不是浮点值,以显著降低内存使用和计算要求,同时保持可接受的准确性。量化参数是为每个层定义的:

重量 Dec BitsBias Dec Bits输出偏移偏置偏移
卷积 1D81082
LSTM 系列8/7 (内核/循环)656
810125

这些量化参数控制整个推理过程中网络权重、偏差和激活的定点表示。

固件中的模型定义

神经网络模型在固件中通过一组张量定义,这些张量代表每层的权重、偏差和配置结构。模型参数以静态数组的形式存储在文件中。weights.h

模型初始化

通过以下函数在固件中创建和初始化模型:nnom_model_create()

  1. 创建一个空的模型结构
  2. 定义每个层及其特定配置
  3. 将各层连接在一起以形成完整的网络
  4. 编译模型以准备进行推理

模型初始化遵循顺序模式,其中每一层都挂接到前一层,从而创建一个完整的神经网络管道。

运行时推理过程

在作过程中,魔杖的固件会在用户按下按钮时收集 IMU 传感器数据,通过神经网络处理这些数据,并输出手势分类。

内存管理

该模型针对STM32F103CB的有限资源进行了优化:

  • 使用 8 位量化权重和激活
  • 所有模型参数的静态内存分配
  • 作为静态数组分配的输入和输出缓冲区
Input buffer: 450 bytes (150 timestamps × 3 axes)
Output buffer: 13 bytes (13 gesture classes)

总结

Cyberry Potter Electromagic Wand 中的 CNN 集成代表了在资源受限的嵌入式系统上机器学习的复杂实现。通过使用 NNoM 库、量化技术和优化的模型架构,该系统无需外部处理即可实现实时手势识别。

集成过程包括:

  1. Python 中的模型训练(在 CNN 模型训练中介绍))
  2. 将训练的权重导出到 C 头文件
  3. 使用 NNoM 在固件中定义模型结构
  4. 对 IMU 数据进行实时推理
  5. 用于控制魔杖功能的手势分类

此实现展示了一种在嵌入式系统上部署神经网络以实现交互式应用程序的有效方法。

模块系统

模块系统是 Cyberry Potter Electromagic Wand 的关键组件,它通过可互换的硬件模块实现可扩展的功能。本页介绍了模块架构、接口以及魔杖如何与各种插件模块通信,以根据识别的手势执行不同的作。

模块系统架构

Cyberry Potter 魔杖采用模块化设计,带有金手指插槽连接器,允许插入不同的模块并被系统识别。模块系统位于手势识别系统和魔杖与之交互的外部设备之间,将识别的手势转换为特定的硬件作。

模块作模式

模块系统以两种主要模式运行,控制魔杖与外部设备的交互方式:

  1. 模式 0 (执行):当识别到手势时,魔杖通过连接的模块传输预先录制的信号以控制外部设备。
  2. 模式 1 (Record): 当识别到手势时,魔杖等待录制传入信号,然后将其存储并与该手势相关联。

信号数据结构

模块系统使用通用数据结构来存储和管理信号数据,允许不同类型的模块使用相同的底层信号处理框架。

每个信号都存储为一组持续时间,表示信号的交替高电平和低电平状态。这种格式适用于 IR 和 RF 协议,使其适用于不同的模块类型。

模块处理程序接口

Module Handler 充当核心系统和特定 Module 实现之间的抽象层。它提供了一个统一的接口,用于初始化、发送和接收信号,而与模块类型无关。

主要功能

功能目的
Module_IR_RF_Init根据检测到的模块类型初始化相应的模块
Module_IR_RF_Transmit从闪存中读取信号并通过模块传输
Module_IR_RF_Receive记录输入信号并将其存储到闪存中
Module_IR_RF_Copy_From_Buffer从 Flash 缓冲区中提取信号数据
Module_IR_RF_Copy_To_Buffer准备信号数据以存储在 Flash 中

模块类型检测和初始化

当系统启动时,它会检测插入 Gold Finger 插槽的模块类型,并初始化相应的硬件接口。这种检测机制允许 Wand 无缝地处理不同的模块类型。

信号记录过程

当处于 recording 模式时,模块系统等待输入信号,捕获信号转换的时序,并将此信息存储在信号缓冲区中。

信号录制过程使用 Timer2 来测量信号转换之间的持续时间。如果在定义的超时时间内未检测到信号,则录制过程将自动终止。

信号传输过程

当在执行模式下识别到手势时,该模块会从 Flash 存储器中检索相应的存储信号,并通过活动模块传输。

模块通信协议

每种模块类型都实现了与外部设备通信的特定协议:

红外模块(类型 0)

  • 使用 38kHz 载波频率进行红外传输
  • 支持常见的 IR 协议,包括 NEC、Sony、RC5 等。
  • 信号被编码为载波开/关周期的交替持续时间

射频模块(类型 1-2)

  • 支持 433MHz 和 315MHz 射频通信
  • 兼容各种射频遥控系统
  • 信号编码类似于 IR 的开/关持续时间序列

闪存组织

模块记录的信号存储在外部 W25Q64 闪存中,并为不同的模块类型和手势分配不同的区域。

这种内存组织允许系统为模块类型和识别手势的每种组合存储不同的信号,从而使魔杖高度可定制。

使用自定义模块进行扩展

模块系统设计为可扩展,允许用户通过以下方式创建自定义模块:

  1. 开发符合 Gold Finger 接口规范的硬件
  2. 通过创建新的 moduleX.c 和 moduleX.h 文件来实现驱动程序
  3. 将新模块与现有模块处理程序系统集成

模块系统集成

模块系统与 Cyberry Potter Electromagic Wand 的其他组件集成,如下所示:

这种集成允许魔杖检测手势并通过附加的模块执行适当的作,从而创建无缝的用户体验。

红外模块

概述和目的

红外模块是 Cyberry Potter Electromagic Wand 系统的插件组件,可实现红外信号功能。该模块允许魔杖记录来自遥控器的红外信号并回放它们,通过手势识别有效地将魔杖变成通用遥控器。

硬件架构

IR 模块由两个主要组件组成:

  1. 红外发射器:连接到 STM32 微控制器的 GPIO A6 的红外 LED
  2. 红外接收器:连接到 GPIO A7 的红外接收器模块

该模块通过 Gold Finger 连接器接口与魔杖的主板集成。

IR 模块硬件配置


信号表示

IR 信号表示为 timing durations 序列,其中每个 duration 代表载波开启或载波关闭周期。系统使用一种称为 structure 来存储这些信号。IR_RF_Signal_t

IR 信号数据结构

该数组存储脉冲和空间序列的时序,每个元素以 Timer2 计数单位(默认为 20μs)表示一个时间段。交替元件表示 IR 载波的 ON 和 OFF 状态。duration

信号传输

IR 模块在 PWM 模式下使用定时器 3 (TIM3) 生成 3kHz 载波用于 IR 传输。载波根据记录的信号模式进行调制。

传输函数遍历存储的持续时间数组,在 carrier-on 和 carrier-off 状态之间交替。当载波开启时,IR LED 发出 38kHz 脉冲;熄灭时,LED 保持非活动状态。

信号记录

IR 模块通过 IR 接收器触发的外部中断捕获 IR 信号。每个边沿转换 (上升或下降) 都会触发中断,转换之间的时间使用 Timer 2 (TIM2) 进行测量。

录制过程


录制过程由函数启动,并一直持续到信号缓冲区已满或发生超时(50 毫秒不活动)。Module_IR_RF_receiver_start()

与 Gesture Recognition 集成

IR 模块与魔杖的手势识别系统配合使用。不同的手势可以映射到不同的 IR 命令,允许用户通过简单的魔杖移动来控制 IR 设备。

IR 模块作模式

模式描述功能
执行(模式 0)根据识别的手势传输预先录制的 IR 信号Module_IR_RF_Transmit()
录制(模式 1)记录新的 IR 信号并将其与特定手势相关联Module_IR_RF_Receive()

在录制模式下,魔杖首先从现有遥控器捕获 IR 信号。录制后,此信号将与特定手势相关联。在执行模式下,执行手势将导致魔杖传输相应的 IR 信号。

实现细节

IR 信号载波生成

IR 模块使用定时器 3 (TIM3) 生成 3kHz 载波用于 IR 传输,参数如下:

  • 频率:38kHz
  • PWM 模式:PWM1
  • 占空比:~33%(激活时)

该函数通过设置适当的 PWM 占空比来控制载波的生成:Module0_IR_38Khz_Logic()

  • 逻辑 1:PWM 占空比 = 422/633 (~67%)
  • 逻辑 0:PWM 占空比 = 0(无载波)

时序参数

定时器 2 (TIM2) 用于对 IR 信号的持续时间进行定时,配置如下:

  • 频率:50kHz
  • 每次计数时间:20μs(由 US_PER_TIMER2_COUNT 定义)
  • 超时时间:50ms(由 TIM2_RECORD_OVERTIME_US 定义)

常见使用场景

IR 模块支持 Cyberry Potter Electromagic Wand 的多种实际应用:

  1. 通用遥控器:使用来自多个遥控器的 IR 信号对魔杖进行编程,并以不同的手势控制不同的设备。

  2. 宏命令:录制复杂的 IR 命令序列,并通过单个手势触发它们。

  3. 智能家居集成:使用魔杖控制支持 IR 的智能家居设备,如空调、电视和娱乐系统。

该系统的模块化设计允许 IR 模块与其他通信模块交换,为不同的用例提供灵活性。

RF433 模块

RF433 模块通过以下引脚连接到 STM32 微控制器:

功能描述
PA6RF433 发射器输出驱动 RF433 发射器的数字输出
PA7 系列RF433 接收器输入

带上拉电阻的数字输入,可连接到 RF433 接收器

软件架构

RF433 模块的软件实现由初始化函数和信号处理功能组成。

初始化

该功能配置 RF433 通信所需的硬件组件:Module1_RF433_Init()

  1. 将 GPIO PA6 初始化为发射器的输出
  2. 将 GPIO PA7 初始化为接收器的上拉输入
  3. 配置 EXTI7 中断,以便在 PA7 上进行信号边沿检测
  4. 设置 Timer2 以进行精确的定时测量

信号数据结构

RF 信号使用该结构进行存储,其中包含:IR_RF_Signal_t

typedef struct IR_RF_Signal_t{eSignal_Status status;       // Signal status (EMPTY, RECORDING, READY)uint16_t duration[SIGNAL_SEQUENCE_SET_LENGTH];  // Time durations between transitionsuint16_t length;            // Number of transitions in the signal
}IR_RF_Signal_t;

该结构保存 timing 信息而不是原始信号,使其与协议无关且存储效率高。

信号传输过程

该功能通过根据录制的持续时间切换发射机输出来再现射频信号:Module1_RF433_Transmit()

信号记录和定时

RF433 模块使用基于中断的方法来记录信号:

  1. 当接收器引脚 (PA7) 改变状态时,将触发 EXTI 中断
  2. 中断处理程序记录转换之间的时间
  3. Timer2 用于以微秒精度测量时间间隔

时序参数

参数价值描述
TIM2_FREQUENCY50 赫兹定时器工作频率
US_PER_TIMER2_COUNT20 微秒每个计时器计数的时间分辨率 (1000000/TIM2_FREQUENCY)
TIM2_RECORD_OVERTIME_US50000 微秒连续信号的最大记录时间 (50ms)
SIGNAL_SEQUENCE_LENGTH1024可录制的最大过渡数

如评论中所述,RF433 发射器需要 13kHz 的最小频率才能正常运行。

与 Cyberry Potter System 的模块集成

RF433 模块通过模块接口与魔杖系统的其余部分集成:

RF433 模块通过抽象层与其他 RF 和 IR 模块共享通用功能,为记录和传输信号提供统一的功能。

使用示例

记录 RF 信号

  1. 将魔杖设置为录制模式
  2. 执行与要录制的 RF 信号关联的手势
  3. 在瞄准魔杖的 RF433 接收器的同时按下原装 RF 遥控器上的按钮
  4. LED 指示灯将指示录制成功

传输 RF 信号

  1. 将魔杖设置为 Execute 模式
  2. 执行与录制的 RF 信号关联的手势
  3. RF433 模块将传输信号以控制目标设备

技术规格

  • 工作频率: 433.92 MHz
  • 信号编码:记录原始时序信息,兼容各种射频协议
  • 分辨率:每个计时单位 20 微秒
  • 最大信号长度:1024 个过渡
  • 最大单次持续时间:50 毫秒

该模块设计为与协议无关,只要它们在 433MHz 频段上运行,就可以与各种 RF433 设备一起使用,无论其特定的编码机制如何。

串行命令模块

目的和概述

串行命令模块将识别的手势模式转换为串行命令,这些命令可以通过 UART 传输到外部设备。该模块用作通信接口,允许 Cyberry Potter Electromagic Wand 通过手势识别控制计算机、微控制器或其他支持串行的设备。

功能架构

串行命令模块提供了一种将物理手势转换为串行数据命令的方法。它支持两种不同的作模式,为每个识别的手势定义不同的命令映射。

模块初始化

串行命令模块初始化 USART3 外设以进行串行通信。这是在 函数 中执行的。Module3_Init()

作模式

串行命令模块以两种不同的模式运行,每种模式具有不同的命令映射策略:

模式 0:手势名称输出

在模式 0 中,模块通过串行通信将识别的手势名称以纯文本字符串的形式传输。这样就可以与可以解释字符串命令的设备进行简单的基于文本的通信。

模式 1:键码序列

在模式 1 中,模块传输与每个手势对应的预定义键码序列。这允许魔杖模拟键盘输入或发送特定的控制代码。

手势到命令映射

下表显示了手势如何映射到每种模式下的命令:

模式 0 映射(手势名称)

手势串行输出
RightAngle (右角)“RightAngle\n”
锐角“SharpAngle\n”
闪电“闪电\n”
三角形“三角形\n”
Letter_h“Letter_h\n”
Letter_R“Letter_R\n”
Letter_W“Letter_W\n”
Letter_phi“Letter_phi\n”
“圆圈\n”
UpAndDown“UpAndDown\n”
“喇叭\n”
“Wave\n”

模式 1 映射(键序列)

手势键序列功能
RightAngle (右角)进入发送 Enter 键
锐角发送右箭头键
闪电发送向左箭头键
三角形发送向下箭头键
Letter_h向上向上发送箭头键
Letter_R“5” + 回车发送 “5” 后跟 Enter 键
Letter_W“6” + 回车发送 “6” 后跟 Enter 键
Letter_phi“7” + 回车发送 “7” 后跟 Enter 键
“8” + 回车发送 “8” 后跟 Enter 键
UpAndDown“9” + 回车发送 “9” 后跟 Enter 键
“10” + 回车发送 “10” 后跟 Enter 键
“11” + 回车发送 “11” ,然后按 Enter 键

实现细节

键代码定义

该模块定义了表示键盘键和特殊功能的键代码枚举。这些键代码在模式 1 中用于创建键序列命令。

KEY_NAME enum values:
- Basic modifiers: LCTRL, LSHIFT, LALT, LMETA
- Navigation keys: UP, DOWN, LEFT, RIGHT
- Function keys: F1-F12
- Special keys: ESC, BACKSPACE, ENTER, TAB

命令处理流程

两种作模式都遵循类似的处理命令的过程:

  1. 识别的手势 () 是从手势识别系统接收的model_output
  2. 根据手势选择相应的命令字符串或键序列
  3. 命令将复制到缓冲区
  4. 缓冲区内容通过 USART3 逐字节传输
  5. 在字节之间插入 50 毫秒的延迟以确保正确接收

与系统架构集成

串行命令模块与 Cyberry Potter Electromagic Wand 系统集成,作为可互换的模块选项之一,可以连接到主板上的模块接口。


技术规格

  • 通讯接口:USART3
  • 波特率:由 USART3 初始化定义(标准配置)
  • 数据格式:8 位数据,无奇偶校验,1 个停止位
  • 传输时序:字节间 50ms 延迟
  • 缓冲区大小:命令字符串为 64 字节
  • 支持的手势:12 种不同的模式

使用示例

控制演示文稿

串行命令模块可用于通过将手势映射到导航箭头键来控制演示软件:

  • 使用 “SharpAngle” 手势发送向右箭头(下一张幻灯片)
  • 使用 “Lightning” 手势发送向左箭头(上一张幻灯片)

设备控制

用于控制智能家居设备或其他接受串行命令的系统:

  • 配置接收系统以解释模式 0 中的纯文本手势名称
  • 在接收端为每个已识别的手势编程特定作

实施注意事项

在实现与 Serial Command Module 接口的应用程序时,请考虑:

  1. 传输字节之间的 50ms 延迟,这可能会影响对时序敏感的应用程序
  2. 模式 0 输出字符串的固定格式,始终以换行符结尾
  3. 模式 1 中的预定义键序列,以常见的控制方案为目标

LED 状态指示灯及含义

磁棒上的状态 LED 提供有关系统状态的重要反馈。了解这些适应症有助于诊断问题:

LED 图案意义可能存在的问题
10Hz 闪烁系统繁忙处理过程中正常
5Hz 闪烁等待输入录制模式下的正常
2Hz 闪烁错误状态检查最近的作
常亮作已完成作成功后正常
关闭关机或深度错误检查电源或重置系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/904533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis中6种缓存更新策略

Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案。然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性。缓存更新策略直接影响系统的性能、可靠性和数据一致性,选择合适的策略至关重要。 本文将介绍Redis中6种缓…

项目优先级频繁变动,如何应对?

项目优先级频繁变动是许多公司和团队在工作中常遇到的挑战。 这种情况通常由业务需求变化、市场压力或高层决策调整等因素引起,常常让团队成员感到困惑和不安。首先,制定明确的优先级管理框架是应对项目优先级变动的基础, 通过清晰的优先级排…

屏蔽力 | 在复杂世界中从内耗到成长的转变之道

注:本文为“屏蔽力”相关文章合辑。 略作重排,未全整理。 世上的事再复杂,不外乎这三种 原创 小鹿 读者 2022 年 12 月 02 日 18 : 27 甘肃 文 / 小鹿 在这世上,每天都有大事小事、琐事烦事。我们总为世事奔波忙碌,…

[数据处理] 3. 数据集读取

👋 你好!这里有实用干货与深度分享✨✨ 若有帮助,欢迎:​ 👍 点赞 | ⭐ 收藏 | 💬 评论 | ➕ 关注 ,解锁更多精彩!​ 📁 收藏专栏即可第一时间获取最新推送🔔…

IIS配置SSL

打开iis 如果搜不到iis,要先开 再搜就打得开了 cmd中找到本机ip 用http访问本机ip 把原本的http绑定删了 再用http访问本机ip就不行了 只能用https访问了

RabbitMQ的交换机

一、三种交换机模式 核心区别对比​​ ​​特性​​​​广播模式(Fanout)​​​​路由模式(Direct)​​​​主题模式(Topic)​​​​路由规则​​无条件复制到所有绑定队列精确匹配 Routing Key通配符匹配…

(2025,AR,NAR,GAN,Diffusion,模型对比,数据集,评估指标,性能对比)文本到图像的生成和编辑:综述

【本文为我在去年完成的综述,因某些原因未能及时投稿,但本文仍能为想要全面了解文本到图像的生成和编辑的学习者提供可靠的参考。目前本文已投稿 ACM Computing Surveys。 完整内容可在如下链接获取,或在 Q 群群文件获取。 中文版为论文初稿&…

MCU怎么运行深度学习模型

Gitee仓库 git clone https://gitee.com/banana-peel-x/freedom-learn.git项目场景: 解决面试时遗留的问题,面试官提了两个问题:1.单片机能跑深度学习的模型吗? 2.为什么FreeRTOS要采用SVC去触发第一个任务,只用Pend…

多模态学习(一)——从 Image-Text Pair 到 Instruction-Following 格式

前言 在多模态任务中(例如图像问答、图像描述等),为了使用指令微调(Instruction Tuning)提升多模态大模型的能力,我们需要构建成千上万条**指令跟随(instruction-following)**格式的…

MySQL基础关键_011_视图

目 录 一、说明 二、操作 1.创建视图 2.创建可替换视图 3.修改视图 4.删除视图 5.对视图内容的增、删、改 (1)增 (2)改 (3)删 一、说明 只能将 DQL 语句创建为视图;作用: …

『深夜_MySQL』数据库操作 字符集与检验规则

2.库的操作 2.1 创建数据库 语法: CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification]….]create_spcification:[DEFAULT] CHARACTER SET charset_nam[DEFAULT] COLLATE collation_name说明: 大写的表示关键字 …

Spark jdbc写入崖山等国产数据库失败问题

随着互联网、信息产业的大发展、以及地缘政治的变化,网络安全风险日益增长,网络安全关乎国家安全。因此很多的企业,开始了国产替代的脚步,从服务器芯片,操作系统,到数据库,中间件,逐步实现信息技术自主可控,规避外部技术制裁和风险。 就数据库而言,目前很多的国产数据…

数字化转型-4A架构之应用架构

系列文章 数字化转型-4A架构(业务架构、应用架构、数据架构、技术架构)数字化转型-4A架构之业务架构 前言 应用架构AA(Application Architecture)是规划支撑业务的核心系统与功能模块,实现端到端协同。 一、什么是应…

格雷狼优化算法`GWO 通过模拟和优化一个信号处理问题来最大化特定频率下的功率

这段代码是一个Python程序,它使用了多个科学计算库,包括`random`、`numpy`、`matplotlib.pyplot`、`scipy.signal`和`scipy.signal.windows`。程序的主要目的是通过模拟和优化一个信号处理问题来最大化特定频率下的功率。 4. **定义类`class_model`**: - 这个类包含了信号…

中级网络工程师知识点1

1.1000BASE-CX:铜缆,最大传输距离为25米 1000BASE-LX:传输距离可达3000米 1000BASE-ZX:超过10km 2.RSA加密算法的安全性依赖于大整数分解问题的困难性 3.网络信息系统的可靠性测度包括有效性,康毁性,生存性 4.VLAN技术所依据的协议是IEEE802.1q IEEE802.15标准是针…

2025年五一数学建模A题【支路车流量推测】原创论文讲解

大家好呀,从发布赛题一直到现在,总算完成了2025年五一数学建模A题【支路车流量推测】完整的成品论文。 给大家看一下目录吧: 摘 要: 一、问题重述 二.问题分析 2.1问题一 2.2问题二 2.3问题三 2.4问题四 2.5 …

性能优化实践:渲染性能优化

性能优化实践:渲染性能优化 在Flutter应用开发中,渲染性能直接影响用户体验。本文将从渲染流程分析入手,深入探讨Flutter渲染性能优化的关键技术和最佳实践。 一、Flutter渲染流程解析 1.1 渲染流水线 Flutter的渲染流水线主要包含以下几…

linux基础学习--linux磁盘与文件管理系统

linux磁盘与文件管理系统 1.认识linux系统 1.1 磁盘组成与分区的复习 首先了解磁盘的物理组成,主要有: 圆形的碟片(主要记录数据的部分)。机械手臂,与在机械手臂上的磁头(可擦写碟片上的内容)。主轴马达,可以转动碟片,让机械手臂的磁头在碟片上读写数据。 数据存储…

DIFY教程第五弹:科研论文翻译与SEO翻译应用

科研论文翻译 我可以在工作流案例中结合聊天大模型来实现翻译工具的功能,具体的设计如下 在开始节点中接收一个输入信息 content 然后在 LLM 模型中我们需要配置一个 CHAT 模型,这里选择了 DeepSeek-R1 64K 的聊天模型,注意需要在这里设置下…

【Redis】哨兵机制和集群

🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、哨兵机制 Redis的主从复制模式下,一旦主节点由于故障不能提供服务,需要人工的进行主从切换,同时需要大量的客户端需要被通知切换到…