跳到主要内容

AI 手势智能魔杖教程

我们在电脑上体验机器学习项目已经很多了,那能不能做一个项目,让机器学习的模型可以脱离电脑,在硬件上运行呢?

恰好近期有个开源项目,采用 STM32 单片机运行 NNoM,STM32 上部署一个卷积神经网络动作分类模型,通过检测六轴陀螺仪MPU6050的姿态数据,从而返会正确的分类。

开源项目原地址:https://github.com/lyg09270/CyberryPotter_ElectromagicWand_Basic_Project/tree/main

本次的教程和开源项目的教程项目,会更加细化,把踩过的坑都填上,希望大家都能复刻成功!同时开源项目中的返会结果是串口数据,不太直观。因此我们这边加入了两片Microbit,将返回来的数据进行具象化,让项目更加生动有趣。

项目框图

image-20250103154105044

什么是 NNoM?

NNoM 是一个轻量级的神经网络框架,专为微控制器设计。它支持常见的深度学习功能,例如卷积神经网络(CNN)、全连接层等,具有以下特点:

  • 高效轻量:适合资源有限的嵌入式设备。
  • 易于使用:提供直观的 API 和多种示例代码。
  • 开源:支持自由修改和扩展。

在本项目中,NNoM 将被用于在 STM32 单片机上运行手势分类模型,实现离线手势识别功能。

所需材料

  1. 硬件

    • 微控制器:STM32F103C8T6 开发板

    • IMU传感器:MPU6050

    • 按键:方糖按键模块

    • 5mm 直插LED

    • CH340 USB串口下载器

    • STlink

    • Microbit V2 x2

    • Iobit

    • Robotbit

    • 方糖灯串模块

    • 3D打印零件

    • 喵比特锂电池包

  1. 软件

    • ST-LINK Utility
    • 串口调试助手(或者其它串口调试软件)
    • MakeCode
  1. 工具

    • 电烙铁

    • 热熔胶枪

    • 螺丝刀

    • USB延长线

    • 剥线钳

    • 3D打印机

  2. 其它

    M3-8 X 3

    自攻螺丝M1.7-6 X4

    3M胶

    母对母杜邦线 x10

模型文件

魔杖(有四款,来源于网友分享):https://makerworld.com/zh/models/519053?from=search#profileId-440711

配套魔杖外壳(喵家设计):https://makerworld.com/zh/models/1034922#profileId-1018455

项目拆解

本项目的核心在于录入训练模型,但是由于环境配置搭建太麻烦了,新手一般会卡住。因此本次教程只教你如何下载训练好的程序(训练好的程序中有12个标准手势,一般也够用了)。 等你做出这个项目后,想进一步研究,增加或者修改手势,可以自行研究开源项目的仓库。

项目拆解为:

1、STM32与MPU6050接线 2、下载器STlink与STM32接线,下载程序 3、USB串口下载器与STM32接线,测试串口的返回数据。

4、Micrbit之间的2.4G无线通讯程序编写测试 5、修改Microbit2.4G无线通讯程序,增加串口数据接收判断

6、将STM32的串口与Microbit的串口连接在一起,测试。

7、将打印外壳进行组装,组装成魔杖。

第一步——接线

STM32与MPU6050的接线

请严格按照下图接线进行插接

kittenbot_stm32_mpu6050

可以使用我设计的3D打印进行固定和焊接

image-20250124155658857

第二步——连接下载器

连接STLink下载器,下载编译好的hex文件

下载器接线:

stlink

ST-LINK Utility软件下载:

https://www.st.com.cn/zh/development-tools/stsw-link004.html#get-software

使用:

连接主控

image-20250103173612138

选择烧录文件

image-20250103174022475

下载我们提供的文件"CyberryPotter.hex",点击Start

image-20250103174047570

提示下载成功

image-20250103174203988

下载完毕后,就可以拔掉了STLink下载器

第三步——串口测试

接上串口调试器,测试程序和硬件是否正确运行起来了。

CH340与STM32的接线:

image-20250103175231841

实物连接:

image-20250124162334572

使用串口工具进行连接:

波特率是115200,打开串口后,按一下stm32板子上的复位按键

image-20250124162045839

窗口中会收到

"dmp init complete

Hello!"

[!NOTE]

如果串口收不到信息,请检查

1、程序是否成功下载 2、串口接线是否正确

image-20250103181043675

当按一下按键,不做任何动作时,窗口会收到“Unrecognized”,可以证明你的板子正常运行起来了,这时候你对应做动作后,它就会返回对应的结果。

[!NOTE]

如果串口收不到信息,请检查

1、陀螺仪与STM32的接线是否正确

image-20250103181142067

例如做一个→↓的动作,按一下按键后(只需点按,不要长按不放),1.5秒内把这个动作完成。

串口会返回,这时候也证明你的mpu6050和训练的模型都是正常的。 image-20250103181445888

AImagic

到此,AI手势智能魔杖的核心功能已经实现完毕了。

当做出对应动作时,串口就会返回对应的字符串。可以使用另外的单片机进行串口指令接口,从而实现不同的应用。

手势结果如下图所示:GestureResult

第四步——Microbit无线通讯

发送端

假设Microbit_A作为发送端,它与STM32的串口进行相连,接收手势返回的串口结果。

这里使用了IObit进行转接

Microbit ——STM32

P12————A10 P13————A9 5V————5V GND————GND

锂电池给IObit 5V进行供电

266e3f3f19e0000d092cdd2d2e4e1fae

程序地址:

https://makecode.microbit.org/_5Pi3AiUAKJv2

microbit-send

接收端

只需要一块Microbit即可,这里插在Robotbit上,外接一个方糖灯串模块(P1)

37a0a7dbf5402879540ea192c9cff8f2

程序地址:

https://makecode.microbit.org/_WvyiVaMzuPze

microbit-receive

实物测试

当触发1-6手势时,灯串灭掉。

当触发7-12手势时,灯串亮起。

[!NOTE]

技巧:按一下按键后就松开,在1.5秒内完成手势,动作做得有力点。

把AI 魔杖组装好,注意螺丝的安装位置。锂电池包使用双面胶粘贴在外壳的侧面。

image-20250125105847723

组装完成

06dc05260d860df6df964c88f86e062e

测试:

Kittenbot_AI_Wand

核心的基本交互已经调通了。

剩下的就是发挥你的创意了。