关于项目
这个项目是什么
此项目是Cyberry Potter Electromagic wand赛博魔杖,你可以使用这个项目中的文件,制作一个赛博魔杖。如果你有足够的能力,你也可以对魔杖的的法术(功能)进行修改,魔杖采用了模块化的设计,不同的模块对应了不同的执行功能。也可以对激活法术的动作进行修改,只需要重新收集数据并训练模型就可以了。
项目使用的嵌入式机器学习库来自nnom
此项目包含
- PCB制板文件 (Hardware)
- 3D打印文件 (3D_Print)
- 用于魔杖的软件(Software)
- 动作识别模型训练脚本(Software/CNN)
- 动作的卡片(Software\CNN\SpellsCard)

项目视频教程:bilibili
立创开源平台:赛博魔杖_STM32卷积神经网络
在使用过程中出现问题可以在Bilibili私信我
魔杖技术交流群QQ:698619917
魔杖使用前需要知道的事
主板在上电以后会进入模式0,长按按键0.5秒后松开,就可以进入模式1。 任何模式下短按按键并松开:对IMU进行1.5s的采样,将数据输入模型得到动作识别输出。
在红外模块插入时
模式0:在得到动作识别输出后,模块会根据识别到的动作发送已经录制的红外信号
模式1:在得到动作识别输出后,模块会根据识别到的动作等待并录制红外信号
模式0和模式1下执行的操作可以根据插入模块的不同而执行不同操作(需要编写代码)
Type-c口的作用:可以用于串口调试和电池充电,在有Type-c连接时,设备会使用Type-c而非电池供电
电源开关:电源开关负责开启或关闭3.3V的供电,在1没有开启电源开关时,电池充电是可以正常进行的,但是Stm32和陀螺仪等不会上电工作
按钮:按钮有长按松开(大于0.5秒后松开)、短按松开(0.5s内松开)两种控制方法。
按钮前的LED:系统状态指示灯,分为10Hz闪烁,5Hz闪烁,2Hz闪烁,常亮,熄灭五种状态
如何自己制作这款魔杖
- 使用Hardware文件夹下的PCB制版文件制作一块电路板
- 采购BOM表格中所需要的元件
- 使用3D打印机打印外壳
- 将程序烧录进电路板
- 组装上电
如果你觉得自己制作有困难,我也可以帮你完成部分工作,例如
- PCB打板与焊接并烧录程序
- 3D打印外壳
文档简介
开发环境配置
Python环境:(如果你需要训练自己的模型)
-
首先需要安装一个anaconda(请各位大哥大姐从官网下载,不要在网上随便找安装包,求求你们了)
- 创建一个python3.9环境
conda create --name py39_env python=3.9
- 激活环境
conda activate py39_env
- 切换到工程目录的CNN文件夹
cd /path/to/your/directory/Cyberry_Potter_Electromagic_Wand-main/Software/CNN
- 安装项目依赖
pip install -r requirements.txt
- 使用清华镜像源:
pip install --index-url https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
Keil环境配置:(如果你需要修改程序)
-
keil版本:keil5(请使用keil官网下载的最新版keil否则可能会遇到一些问题)
-
编译器版本:Arm Compiler6.22
-
根据你的设备选用ST-Link或其他设备作为调试器
-
项目在打开keil是可能会需要安装一些库,请根据提示安装
需要使用的库的下载链接:(如果你无法使用keil正常安装以下包,可以从链接中下载安装)请选择下方指定的版本下载并安装
可能存在的问题
编译报错: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;
如何自己制作模块
金手指插槽可以兼容IIC、串口、SPI三种通讯协议,你可以根据自己的需求以及Hardware文件夹中的尺寸标准制作你需要的模块(例如蓝牙和Wi-Fi)
我也准备了一个嘉立创EDA的工程文件(hardware/Module_DIY.eprj),文件中已经准备画好了模块的外形和引脚名称,你可以根据自己的需求添加元件,制作一个符合你想要的模块
制作模块后如何进行二次开发
可以在software/module文件夹中对模块modulex.c(你需要的模块编号 例如module4.c)文件进行修改,写入不同模式(Mode0,Mode1)下在识别到动作后所需要对模块执行的命令(例如使用串口与蓝牙芯片通讯,发出信息)