基于行空板K10的小学简易智能门锁实验方案
2025-01-15366
AI 快速预览详细
基于行空板K10的小学简易智能门锁实验方案,旨在让学生了解智能门锁的工作原理,并通过实际操作掌握编程与硬件操作技能。实验中使用了行空板K10和9g小舵机,通过人脸识别技术实现门锁的自动开启。学生将学习如何连接硬件、编写人脸识别程序,并进行多次测试与优化。该实验不仅提升了学生的编程能力,还培养了他们的团队合作精神。
基于行空板K10的小学简易智能门锁实验方案

一、实验背景:

在科技日新月异的当下,智能家居设备越发普及,其中智能门锁凭借其便捷性与安全性备受青睐。依据义务教育信息科技课程标准,开展此次实验,目的是让学生洞悉智能门锁基于人脸识别技术的工作原理,熟练掌握行空板 K10 的操作及相关编程技能,有效培养学生的跨学科思维与实践操作能力。本内容正好符合六年级信息科技“过程与控制”内容模块,结合跨学科主题的“小型开关系统”,根据人工智能逻辑主线,进行项目设计。项目参考了官方入门教程【行空板K10基础入门教程】第8课:K10人脸识别-AI校园门卫:https://mc.dfrobot.com.cn/thread-323598-1-1.html?fromuid=864588,根据教学实际情况适当进行了二次开发。
二、实验目标:
- 1、知识与技能
- (1)助力学生深入理解基于人脸识别的智能门锁系统构成与运行机制。
- (2)使学生熟练掌握行空板 K10 的操作要领,学会运用其内置摄像头与编程环境,实现人脸识别程序的编写。
- (3)让学生掌握 9g 小舵机的工作原理与控制方法。
- 2、过程与方法
- (1)通过亲自动手实验,切实提升学生的实践操作能力与解决实际问题的能力。
- (2)借助小组协作模式,引导学生相互交流、协同合作,强化团队协作精神。
- 3、情感态度与价值观
- (1)深度激发学生对信息科技领域的浓厚兴趣,培育学生的创新思维与探索精神。
- (2)让学生切实体会到科技在日常生活中的广泛应用,增强学生对科技改变生活的切身体会。
三、实验准备:
- 1、硬件
- (1)行空板 K10 若干(根据学生分组情况确定数量)
- (2)9g 小舵机若干
- (3)舵机支架
- (4)电源适配器
- (5)导线若干
- 2、软件
- (1)行空板配套编程软件
- (2)电脑(安装好编程软件,确保网络连接正常)
四、实验原理:
行空板 K10 利用内置摄像头采集人脸图像信息,通过特定的算法对采集到的图像进行处理与分析,提取人脸特征,并与预先录入的人脸特征模板进行比对。若比对结果一致,行空板 K10 则发送控制信号给 9g 小舵机,小舵机通过转动模拟门锁打开的动作;若比对不通过,则发出提示信息。
五、实验步骤:
- 1、组建实验小组
将学生分成若干小组,每组 4 - 5 人,明确小组内成员分工,如硬件连接负责人、编程负责人、记录员等。
- 2、认识硬件
- 教师向学生详细介绍行空板 K10 的各个接口、功能按键、内置摄像头的位置与使用方法,以及 9g 小舵机的基本结构、工作原理和舵机支架的安装方式。
- 学生在小组内仔细观察、讨论行空板 K10 和 9g 小舵机,熟悉硬件的外观、特点及各部分功能。
- 3、硬件连接
- 参照行空板 K10 与 9g 小舵机的连接说明书,小组内成员合作完成硬件连接。将 9g 小舵机安装在舵机支架上,并通过导线连接到行空板 K10 的相应接口,确保连接牢固。
- 连接完成后,检查线路是否正确,确认无误后接通电源,观察行空板 K10 和 9g 小舵机是否正常启动。
- 4、编程实现
- 打开行空板配套编程软件,教师通过投屏展示编程界面,详细讲解人脸识别功能实现所需的编程指令和逻辑思路,绘制流程图分析逻辑顺序。
- 学生根据教师的指导,在小组内共同编写基于人脸识别的智能门锁控制程序。程序主要实现以下功能:调用行空板 K10 的内置摄像头实时采集人脸图像,对采集到的图像进行人脸识别处理,将识别结果与预先录入的人脸信息进行对比,如果对比成功则控制 9g 小舵机转动一定角度,模拟门锁打开动作,同时语音提示 “欢迎回家”,亮绿灯;如果对比失败,则语音提示 “抱歉,无权限”,亮红灯。
- 编写完成后,小组内进行程序调试,检查是否存在语法错误和逻辑错误。如有问题,及时修改程序。

- 5、测试与优化
- 各小组对编写好的程序进行测试,将预先录入人脸信息的人员面部对准行空板 K10 的摄像头,观察 9g 小舵机是否正常转动,以及屏幕显示和提示音是否正确。多次测试不同人员的人脸识别情况,检查程序的稳定性和准确性。
- 根据测试结果,对程序进行优化和改进。例如,可以增加语音口令+人脸识别双重验证、添加人脸信息删除与更新功能等,提升智能门锁系统的实用性和安全性。同时,为了增强效果,使用了2个舵机,其中一个控制门锁,另一个控制门的自动开合。


- 6、实验总结
- 每个小组推选一名代表,向全班汇报实验过程、结果和遇到的问题以及解决方法。
- 教师对各小组的实验情况进行点评,总结实验中涉及的信息科技知识和技能,强调实验过程中的注意事项和团队合作的重要性。
六、实验拓展
- (1)尝试增加个性化语音播报功能,当不同人脸识别时,进行相应的语音提示。
- (2)探索如何将多个行空板 K10 连接,实现多个区域的智能门锁联动控制。
- (3)研究如何进一步优化人脸识别算法,提高识别速度和准确率。
- (4)对比生活中正在销售的智能门锁,查找相关资料,思考它们是如何解决安全性问题的?
- (5)研究门的铰链设计,优化结构,使舵机模拟更好的效果,让门开合角度更符合实际需要。例如,将舵机转轴与门的转轴重合。
七、注意事项
- (1)实验过程中,提醒学生注意用电安全,不要随意触摸电源和电路接口。
- (2)指导学生正确操作行空板 K10 和编程软件,避免因误操作导致设备损坏或程序出错。
- (3)强调团队合作的重要性,鼓励学生在小组内积极交流、互相协作,共同完成实验任务。
- (4)在使用 9g 小舵机时,提醒学生不要过度转动舵机,以免造成舵机损坏。

代码
/*!
* MindPlus
* esp32s3bit
*
*/
#include "asr.h"
#include "unihiker_k10.h"
#include "AIRecognition.h"
#include <DFRobot_Servo.h>
// 动态变量
volatile float mind_n_RenLianID, mind_n_XueXiRenLian, mind_n_YongHuShu;
// 函数声明
void DF_KaiMen();
void DF_GuanMen();
void DF_ShiBieRenLian();
void DF_ShuaXinXianShi();
void onButtonAPressed();
void onButtonBPressed();
// 创建对象
UNIHIKER_K10 k10;
uint8_t screen_dir=2;
ASR asr;
AIRecognition ai;
Servo servo_P1;
Servo servo_P0;
// 主程序开始
void setup() {
k10.begin();
k10.initScreen(screen_dir);
ai.initAi();
k10.initBgCamerImage();
k10.setBgCamerImage(false);
k10.creatCanvas();
asr.asrInit(CONTINUOUS, CN_MODE, 12000);
while(asr._asrState == 0){delay(100);}
asr.setAsrSpeed(3);
ai.switchAiMode(ai.NoMode);
servo_P1.attach(P1);
servo_P0.attach(P0);
k10.buttonA->setPressedCallback(onButtonAPressed);
k10.buttonB->setPressedCallback(onButtonBPressed);
k10.canvas->canvasClear();
mind_n_RenLianID = -1;
mind_n_XueXiRenLian = 0;
mind_n_YongHuShu = 0;
asr.addASRCommand(0+1, "zhi ma kai men");
k10.canvas->canvasText("简易智能门锁", 50, 20, 0x0000FF, k10.canvas->eCNAndENFont24, 50, true);
ai.switchAiMode(ai.Face);
DF_GuanMen();
}
void loop() {
DF_ShuaXinXianShi();
if ((mind_n_XueXiRenLian==1)) {
k10.setBgCamerImage(true);
ai.sendFaceCmd(ENROLL);
}
if ((ai.isDetectContent(AIRecognition::Face) && (asr.isDetectCmdID(0+1) && (mind_n_XueXiRenLian==0)))) {
DF_ShiBieRenLian();
}
}
// 自定义函数
void DF_KaiMen() {
servo_P1.angle(abs(0));
delay(500);
servo_P0.angle(abs(0));
k10.rgb->write(-1, 0x00FF00);
}
void DF_GuanMen() {
servo_P0.angle(abs(180));
delay(500);
servo_P1.angle(abs(90));
k10.rgb->write(-1, 0x000000);
}
void DF_ShiBieRenLian() {
ai.sendFaceCmd(RECOGNIZE);
while (!ai.isRecognized()) {}
mind_n_RenLianID = ai.getRecognitionID();
DF_ShuaXinXianShi();
if ((mind_n_RenLianID==-1)) {
asr.speak("抱歉,无权限进入");
k10.rgb->write(-1, 0xFF0000);
delay(2000);
}
else {
if ((mind_n_RenLianID>=1)) {
asr.speak("欢迎回家");
DF_KaiMen();
delay(5000);
DF_GuanMen();
}
}
k10.rgb->write(-1, 0x000000);
}
void DF_ShuaXinXianShi() {
k10.canvas->canvasText((String("人脸ID:") + String(mind_n_RenLianID)), 0, 50, 0xFF6600, k10.canvas->eCNAndENFont16, 50, true);
k10.canvas->canvasText((String("用户数:") + String(mind_n_YongHuShu)), 0, 70, 0x000000, k10.canvas->eCNAndENFont16, 50, true);
if (asr.isWakeUp()) {
k10.canvas->canvasText("识别中,请说口令:", 0, 110, 0x009900, k10.canvas->eCNAndENFont16, 50, true);
}
else {
k10.canvas->canvasText("休眠中……", 0, 110, 0xCC33CC, k10.canvas->eCNAndENFont16, 50, true);
}
k10.canvas->updateCanvas();
}
// 事件回调函数
void onButtonAPressed() {
k10.rgb->write(-1, 0xFFFF00);
mind_n_XueXiRenLian = 1;
delay(2000);
asr.speak("开始人脸学习,请对准摄像头");
while (!ai.isDetectContent(AIRecognition::Face)) {}
mind_n_XueXiRenLian = 0;
mind_n_YongHuShu += 1;
DF_ShuaXinXianShi();
asr.speak("完成人脸学习");
k10.rgb->write(-1, 0x000000);
}
void onButtonBPressed() {
k10.rgb->write(-1, 0x0000FF);
ai.sendFaceCmd(DELETEALL);
k10.setBgCamerImage(false);
mind_n_RenLianID = -1;
mind_n_YongHuShu = 0;
DF_ShuaXinXianShi();
delay(1000);
k10.rgb->write(-1, 0x000000);
}
附件




