回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页
best-icon

【创意智造组】智造童心|基于行空板K10的AI魔法棒 简单

头像 云天 2026.04.15 33 0

 

一个能将你的”手势“化为魔法的物联网项目

【项目介绍】

       你有没有幻想过拥有一根真正的魔法棒?挥动它,就能点亮房间里的灯,启动风扇吹来清凉的风……这一切现在不再是幻想!

       “AI魔法棒”是一个结合了人工智能、物联网和创意造物的趣味项目。它利用行空板K10(UNIHIKER K10)作为魔法棒的核心,通过板载的加速度传感器采集挥舞手势的轨迹数据,借助Mind+时序模式识别技术训练AI模型,让魔法棒能够精准识别“左右移动”和“上下移动”等不同动作。识别成功后,魔法棒会亮起对应的彩色灯效,并通过物联网平台SIoT向被控设备发送指令,实现“一挥手,灯即亮”的神奇体验。

       项目的灵感来源于迪士尼童话中的魔法棒——挥动魔杖即可释放魔法。而今天,我用科技把它变成了现实。

image.png
516e2a1867298c6b3da269bd9b5ea3bf_webwxgetmsgimg_&MsgID=9189448312257372239&skey=%40crypt_b90cd10e_0af6eb5c244eac112d3b7a7e1d74b38d.jpg

【软硬件清单】

       1.硬件部分

       (1)魔法棒端

       行空板K10 × 1(主控)

       24灯珠RGB LED环形灯带 × 1

       激光切割外壳材料 × 若干

       Type-C数据线 × 1

image.png

(2)被控设备端

掌控板 × 2

掌控板扩展板 × 2

LED灯带(5颗灯珠)× 1(配合亚克力雕刻透光板)

数字继电器模块 × 1(DFR0017)

风扇 × 1

杜邦线、电源线等若干

0eb61e62a76d92a7985d4b9caa5c8682_webwxgetmsgimg_&MsgID=3839981685903574651&skey=%40crypt_b90cd10e_0af6eb5c244eac112d3b7a7e1d74b38d.jpg
23f78f582e681c288ef2dafcb9f79a08_webwxgetmsgimg_&MsgID=5414424190663222325&skey=%40crypt_b90cd10e_0af6eb5c244eac112d3b7a7e1d74b38d.jpg

2.软件与工具

Mind+ V2.0(图形化编程与模型训练工具)

SIoT V2物联网服务器

LaserMaker(激光切割设计软件)

image.png

【魔法棒的诞生历程】

步骤1 前期构思与设计

       魔法棒的外壳采用激光切割亚克力板、椴木板进行制作。在设计时,我以迪士尼童话风格为灵感,让魔法棒兼具科技感和梦幻感。整个外壳留出行空板K10的2.8英寸屏幕窗口,让识别结果可以实时显示在屏幕上,增加交互体验。

步骤2 AI模型训练——让魔法棒“听懂”手势

       魔法棒的“魔法”核心,是AI动作识别能力。行空板K10板载ESP32-S3主控和三轴加速度传感器,配合Mind+时序模式识别库,可以实现手势识别-。

       训练步骤:

       在Mind+中选择“上传模式”,添加行空板K10主控扩展。

       编写数据采集程序:设置采样间隔为100ms,持续采集加速度传感器的x、y、z三轴数据并通过串口输出。

image.png

       进入Mind+的模型训练工具,选择“时序模式识别”任务,分别创建“l”(左右移动)和“v”(上下移动)、"b"(无动作)三个动作类别。

       每个动作采集20条以上样本,每条样本时长3~5秒,确保覆盖不同速度和幅度的动作变化。

       使用默认训练参数(数据时间间隔100ms、训练轮次100、批次大小16、学习率0.005)开始训练。

       模型训练完成后导出为.zip文件,下载到行空板K10中。

image.png

步骤3 魔法棒程序开发

       模型部署完成后,在Mind+中加载模型,编写魔法棒的主程序。

       程序逻辑:

       程序启动后,魔法棒屏幕显示“AI魔法棒”字样,连接WiFi和MQTT服务器,LED环形灯带全亮蓝光并进行流光旋转特效。

       进入主循环后,以每10次100ms采样为一组数据送入模型进行推理。

       当模型识别为“l”(左右移动)时:魔法棒RGB灯和环形灯带切换为蓝色,环形灯带执行流光动画;同时通过MQTT向siot/ai主题发送“a”指令,点亮被控灯的亚克力透光图案。

       当模型识别为“v”(上下移动)时:魔法棒RGB灯和环形灯带切换为红色,环形灯带执行流光动画;同时通过MQTT发送“b”指令,关闭灯光,启动风扇。

       当识别为“b”(静止)时,RGB灯熄灭。

       关键代码(行空板K10端):

代码
/*!
 * MindPlus
 * DFRobot, 行空板 K10
 */
#include <DFRobot_Iot.h>
#include "unihiker_k10.h"
#include "ModelProcessor.h"
#include <DFRobot_NeoPixel.h>

// 动态变量
String mind_s_ZhuangTai;

// 静态常量
const String topics[] = {"","","","",""};

// 创建对象
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
DFRobot_Iot myIot;
ModelProcessor modelProcessor;
DFRobot_NeoPixel neoPixel_P0;



// 主程序开始
void setup() {
	k10.begin();
	k10.initScreen(screen_dir);
	k10.creatCanvas();
	if (!modelProcessor.initModel()) {while (1);}
	k10.setScreenBackground(0x000000);
	k10.canvas->canvasText("AI魔法棒", 75, 120, 0xFFFFFF, k10.canvas->eCNAndENFont24, 50, true);
	k10.canvas->updateCanvas();
	myIot.wifiConnect("sxs", "smj080823");
	while (!myIot.wifiStatus()) {}
	myIot.init("192.168.31.11","siot","9647044214502064","dfrobot", topics, 1883);
	myIot.connect();
	while (!myIot.connected()) {}
	neoPixel_P0.begin(P0, 24);
	neoPixel_P0.setRangeColor(0, 23, 0x0000FF);
	delay(90000);
	neoPixel_P0.clear();
	mind_s_ZhuangTai = "";
}
void loop() {
	for (int index = 0; index < 10; index++) {
		modelProcessor.addInputValue((String((k10.getAccelerometerX())) + String((String(",") + String((String((k10.getAccelerometerY())) + String((String(",") + String((k10.getAccelerometerZ()))))))))));
		delay(100);
	}
	bool isInferenceSuccessful = modelProcessor.runInference();

	if (isInferenceSuccessful) {
		if (((modelProcessor.getResult().label=="l") && (!(mind_s_ZhuangTai=="l")))) {
			mind_s_ZhuangTai = "l";
			k10.rgb->write(-1, 0x0000FF);
			neoPixel_P0.setRangeColor(0, 0, 0x0000FF);
			for (int index = 0; index < 24; index++) {
				neoPixel_P0.shift(1);
				delay(100);
			}
			myIot.publish("siot/ai", "a");
		}
		else if (((modelProcessor.getResult().label=="v") && (!(mind_s_ZhuangTai=="v")))) {
			mind_s_ZhuangTai = "v";
			k10.rgb->write(-1, 0xFF0000);
			neoPixel_P0.setRangeColor(0, 0, 0xFF0000);
			for (int index = 0; index < 24; index++) {
				neoPixel_P0.shift(1);
				delay(100);
			}
			myIot.publish("siot/ai", "b");
		}
		else if ((modelProcessor.getResult().label=="b")) {
			mind_s_ZhuangTai = "b";
			k10.rgb->write(-1, 0x000000);
		}
	}
	modelProcessor.resetInputBuffer();
}

步骤4 物联网设备联动

       被控设备包括两套独立系统:

       被控灯(掌控板 + LED灯带 + 亚克力雕刻板):

       灯带安装在亚克力雕刻图案后方,接收MQTT指令“a”时,灯带全部熄灭,图案隐藏;接收指令“b”时,灯带亮起红光,亚克力雕刻图案在夜晚显现出绚丽的光效。

image.png

       被控风扇(掌控板 + 数字继电器模块):

       继电器模块采用DFR0017数字继电器,最高可接250V/10A交流设备。MQTT接收“a”指令时,继电器吸合,风扇启动;接收“b”指令时,继电器断开,风扇停止。

image.png

       物联网平台:

       SIoT是DFRobot推出的开源免费的MQTT服务器软件,可一键创建本地物联网服务器,与Mind+无缝集成。

       所有设备连接同一局域网,魔法棒发布主题siot/ai,被控设备订阅该主题。

image.png

【项目演示】

       当挥动魔法棒做左右移动时,环形灯带呈现蓝色流光特效,风扇启动运转;当挥动魔法棒做上下移动时,环形灯带呈现红色流光特效,亚克力雕刻灯板亮起温馨灯光。

【制作过程中的难点与收获】

       难点1:模型识别准确率提升。 初始训练时样本量不足,导致识别容易误判。解决方案是每个动作采集30条以上样本,覆盖不同速度和幅度,训练完成后用测试集验证,反复迭代到满意为止。

       难点2:激光切割外壳的装配精度。 外壳设计时需为屏幕、传感器和电源接口留出精确开口。通过多次调整图纸参数,最终实现了完美贴合。

       难点3:MQTT设备的协同调试。 多个设备同时连接MQTT服务器时,需确保每个设备订阅的主题正确。调试时通过SIoT网页控制台查看消息发布情况,快速定位问题。

【项目总结与未来展望】

       本项目以迪士尼魔法棒为灵感,将行空板K10的加速度传感器、Mind+时序模式识别技术和SIoT物联网平台有机结合,打造出一款兼具科技感和趣味性的AI交互作品。这个项目的亮点在于:

       AI赋能:将复杂的动作识别模型简化到中小学编程场景中,让普通人也能体验人工智能的魅力。

       物物联动:通过MQTT实现一控多设备,可扩展性强。

       创意造物:激光切割外壳让项目具备完整产品形态,适合展示和推广。

       未来,可以继续扩展识别更多手势(如画圆、画方等),增加语音反馈功能,甚至结合行空板K10的摄像头实现视觉识别,让魔法棒变得更智能。希望这个项目能激发更多创客的灵感,一起用科技创造属于自己的“魔法”。

评论

user-avatar