/CyberryPotter_ElectromagicWand_Basic_Project

Cyberry Potter electromagic wand.的基础工程,可以使用不同的(法术)动作点亮LED,也可以根据自己的需求将LED修改为其他功能。

Primary LanguageCApache License 2.0Apache-2.0

关于项目

8月2日更新:

  • 采样频率调整至100HZ
  • 卷积层从4层修改为2层
  • 卷积和池化的步长修改为3
  • 使用了新的训练数据(每种20个)
  • 识别精度得到了提升(效果优于之前每种100个数据的模型)

这个项目是什么

此项目是Cyberry Potter Electromagic wand魔杖的基础工程,这个工程并不是一个完整的魔杖,只是在魔杖开发过程中的一个片段,通过这个项目你可以用最简单易取得的硬件在Stm32上部署一个卷积神经网络动作分类模型,而不需要专门制作电路板或采购一些特别的模块。你可以在这个项目中亲自训练模型,然后将模型部署在嵌入式设备上,然后根据模型输出执行不同的功能,我认为这是一个很好的学习机会。

关于真正的魔杖

完整的魔杖会在完工后开源,我会努力造出我心中定义的完美的电子魔杖,敬请期待

Spell Card

最终魔杖剧透

以下是目前正在设计中的最终魔杖的电路板,OLED部分是开发使用的模块,通过金手指与主控板链接,你们也可以自己设计想要的模块,我预留了串口和IIC在金手指插槽上,只需要画好电路板,增加一些控制逻辑就可以了,比如控制蓝牙或者Wifi芯片,完成后也会开源给大家一起玩,敬请期待

Spell Card

已经实现的功能有:

  1. MPU6050读写数据
  2. 按键控制
  3. LED状态指示灯
  4. 串口通信
  5. 使用法术点亮、熄灭LED灯
  6. 在PC端使用的数据收集模型训练串口模型测试脚本

项目使用的嵌入式机器学习库来自nnom

实验用原理图:

Schematic.jpg

项目视频教程:Bilibili

在使用过程中出现问题可以在Bilibili私信我

或者联系我的邮箱:1308770968@qq.com

硬件需求

  1. STM32f103c8t6最小系统板
  2. MPU6050模块
  3. 按键
  4. 5个LED灯(推荐添加1K-10K的限流电阻以保护眼睛)
  5. 串口转TTL模块(e.g.CH340)
如果想先尝试我已经训练好的模型,按照上方的原理图连接好你的单片机,打开keil进行烧录你就可以开始使用这个项目了

关于法术

本项目可以识别12种动作(法术),你可以将法术打印成卡片来练习法术,图片存放在了这里

环境配置

Python环境:

  • 首先需要安装一个anaconda

    • 创建一个python3.9环境
    • conda create --name py39_env python=3.9
    • 激活环境
    • conda activate py39_env
    • 切换到工程目录的CNN文件夹
    • cd /path/to/your/directory/CyberryPotter_ElectromagicWand_Basic_Project/CNN
    • 安装项目依赖
    • pip install -r requirements.txt
    Python环境配置可能出现的问题:

    pip install -r requirements.txt时出现

    'C:\Users\xxx\AppData\Local\Temp\pip-install-vmn8hi4e\nnom_e898a2d1f9a04e84b72bd63c378042ad' did not run successfully. │ exit code: 128 ╰─> See above for output. note: This error originates from a subprocess, and is likely not a problem with pip.

    解决方法:

    1. 在安装依赖时使用网络代理

    2. nnom链接中下载nnom的压缩包,解压得到nnom-master(从本地安装nnom)

      • 先使用 pip install nnom-master(nnom-master存在的位置)

      • 例如你解压到桌面并且anaconda prompt的当前位置在C:/User/xxxx(xxxx是你的当前账户)

      • 此时你需要使用 pip install Desktop/nnom-master

      • 随后再安装其他依赖pip install -r requirements.txt

    Keil环境配置:

    • keil版本:keil5(请使用keil官网下载的最新版keil否则可能会遇到一些问题)

    • 编译器版本:Arm Compiler6.22

    • 根据你的设备选用ST-Link或其他设备作为调试器

    • 项目在打开keil是可能会需要安装一些库,请根据提示安装

需要使用的库的下载链接:(如果你无法使用keil正常安装以下包,可以从链接中下载安装)请选择下方指定的版本下载并安装

1.CMSIS6.0.0

2.CMSIS compiler 2.1.0

3.Stm32F1xx_DFP2.4.1

可能存在的问题

编译报错:C:/Users/xxx/AppData/Local/arm/packs/Keil/STM32F1xx_DFP/2.4.1/Device/StdPeriph_Driver/src/misc.c:131:11: error: no member named 'IP' in 'NVIC_Type'

这是项目使用到的STM32F1XX_DFP2.4.1版本库存在的一个问题,这个有问题的文件安装在以下目录,默认是只读的,请在这个目录下将其只读选项取消勾选 C:/Users/xxx/AppData/Local/arm/packs/Keil/STM32F1xx_DFP/2.4.1/Device/StdPeriph_Driver/src/misc.c

(AppData文件夹默认是隐藏的,请先设置显示隐藏文件)

请将device库中将misc.c文件里的上述代码(131行)修改为 NVIC->IPR[NVIC_InitStruct->NVIC_IRQChannel] = tmppriority

如何训练

  1. 使用脚本收集数据
    • 首先需要将config.h文件中的SYSTEM_MODE_DATA_COLLECT解除注释
    • 完成以上操作后单片机将进入数据打印模式而非推理模式
  2. 运行模型训练脚本
    • 运行训练脚本你将得到一个.h5的模型文件和一个.h的c头文件
    • .h5文件用于在串口模型测试脚本对未量化的模型进行测试
    • .h文件是单片机用于编译模型所需要的文件

如何继续开发

此项目目前已经实现了动作识别的功能,并没有对其他功能进行开发,你可以在此工程的基础上对魔杖进行进一步开发