基于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.pswp.cn/news/904533.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/904533.shtml
英文地址,請注明出處:http://en.pswp.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的主從復制模式下,一旦主節點由于故障不能提供服務,需要人工的進行主從切換,同時需要大量的客戶端需要被通知切換到…