篮球管家——篮球自助借还装置
篮球管家
——篮球自助借还装置
做中学·探未来|科学教育实践案例 方向六:人工智能
作品信息
项目 | 内容 |
作品名称 | 篮球管家——篮球自助借还装置 |
主题方向 | 方向六:人工智能(智能识别、人机交互) |
适用学段 | 小学高年级(4—6 年级) |
主控平台 | 行空板 K10(ESP32-S3) |
编程软件 | Mind+(图形化 / Python 模式) |
结构材料 | 2020 铝型材、3 mm 橙色亚克力板、3D 打印连接件 |
开源协议 | CC BY-SA |
一、项目介绍
1.1 从“满地的篮球”开始
我们学校体育馆的器材室里,篮球都堆在不锈钢架子上。上体育课前,同学要排队找老师登记借球;下课后,很多人把球往架子边一放就走,球滚得到处都是,管理员要一个一个捡回去,再一个个数。我在一家培训机构上课时也看到同样的场面:课间休息结束,场地上散落着七八个篮球,没有人认领。
图 1 学校体育器材室的现状:球类堆叠、混放,借还全靠人工清点
这不是个别现象。邱伯聪在《学校体育器材管理自助化》中统计过一所寄宿制学校五个月的器材损耗:实验组篮球丢失 14 件、损坏 46 件、调换 12 件。杨溢文在《鹤山市纪元中学体育器材管理系统的研究与分析》中指出,传统器材管理从采购、入库到借用全靠手工记录,“工作量大、效率低,且容易出错、记录易丢失”。
于是我想到一个问题:能不能让柜子自己认人、自己认球,把“借”和“还”这两件事变成一次刷脸、一句语音?
1.2 我把问题拆成了四个可以测量的疑问
“做一个智能借还柜”这句话太大,没法直接验证。我把它拆成四个能用数字回答的问题,后面所有的实验都围绕它们展开:
编号 | 探究问题 | 怎么判断答对了 |
Q1 | 人脸能不能在教室常见的光线下认出同一个人? | 每人 10 次,统计识别准确率 |
Q2 | 说“借球”“还球”,机器在嘈杂环境里听得清吗? | 50 次指令,统计识别成功率 |
Q3 | 怎么确认篮球真的被放回柜子里了? | 用按键做物理确认,统计误判次数 |
Q4 | 整套借还流程能不能一次走通、不卡住? | 各 50 次,统计流程成功率与失败原因 |
1.3 它怎么用:三个场景
本装置是一个三层柜体,每层一个独立柜门,由电磁锁锁住。整机只有一块屏幕、一个按键、一圈灯环和一个麦克风,学生不需要带卡、不需要扫码枪,站着说一句话就能借还。
· 课堂场景 体育课借球:学生走到柜前,摄像头识别人脸,验证通过后说“借球”,系统自动找一个空柜位,灯环变绿,语音提示“请取出篮球”,柜门弹开。
· 归还场景 课间还球:说“还球”,把球上的二维码对准摄像头,系统核对是不是本人借出的那一个球,柜门打开;球放进去压住柜底的按键,才算“归还成功”,灯环变蓝。
· 管理场景 器材室管理:每次借还都写进记录,管理员可以看到哪个球被谁借走、什么时候还,不用再靠本子记。
1.4 背后的科学原理
这一节是我在做的过程中最费力的部分:机器“看见”“听懂”“锁住”“确认”这四件事,背后的原理其实都能用课上学过的知识解释。
(1)人脸识别:把“这是谁”变成“两组数字有多近”
摄像头拍到的画面,在机器眼里是一个由像素点组成的数字矩阵,每个点用红、绿、蓝三个亮度值表示。如果直接比像素,人稍微歪一下头,数字就全变了。所以系统先找到脸的位置,再提取眼睛、鼻尖、嘴角这些关键点的相对位置,把它们压缩成一组数字,叫做特征向量。识别时,把新拍到的人脸向量和库里存着的向量逐个算“距离”,距离最小、并且小于设定阈值的那一个,就是匹配结果;如果所有距离都超过阈值,就判定为“不认识”。
这也解释了实验中出现的失败:光线太暗时,画面噪点多,关键点位置会偏移;低头或侧脸时,关键点被遮挡,算出来的向量就偏了。所以失败不是“机器坏了”,而是输入的信息不够好。
(2)二维码:给每个球一个“身份证号”
二维码是把一串字符按黑白方块编码成的图案。它的三个角上有“回”字形的定位块,摄像头无论从哪个角度看,都能先找到这三个角,把倾斜的画面校正成正视,再逐格读出黑白,还原成字符。我在 1 号、2 号、3 号球上各贴了一张不同的二维码,识别结果就是球号。
(3)为什么人脸和二维码都要
只认脸,机器知道你借走了球,却不知道你借的是几号球,还回来一个别的球它也发现不了;只认二维码,机器知道有人还了 1 号球,却不知道是谁还的。把“人的身份”和“球的身份”分别验证一次,两条信息对上,才允许开柜——这在工程上叫双重校验。
(4)电磁锁与继电器:用很小的电流控制很大的电流
电磁锁的锁舌后面是一个电磁铁:线圈通电产生磁场,吸住衔铁,锁就锁上;断电后磁场消失,弹簧把锁舌弹回,门就能拉开。主控板的引脚只能输出几毫安的电流,直接驱动电磁锁会烧坏引脚,所以中间要加一个继电器:主控只负责给继电器一个小小的控制信号,真正通过电磁锁的大电流由继电器触点承担。这也是为什么程序里写的是“设置数字引脚 P15 输出低电平”——引脚电平一变,继电器动作,锁就开了。
(5)按键:为什么要“压下去”才算还球
摄像头可以看到球在画面里,但看不出球是不是稳稳落在柜位上——斜靠着、卡在门口,画面里也都是球。所以我用了最笨也最可靠的办法:柜底装一个按键,球放正了就会压下去。一颗 7 号篮球质量约 600 g,对按键的压力大约是 6 N,微动开关在这个压力下会可靠闭合,主控读到电平变化,就确认“球到位了”。这就是用物理量代替“看起来像”。
(6)状态变量:机器怎么记住“你还没还球”
借还流程其实是一个只有两个状态的小系统:没借、已借。程序里设了一个变量“是否借球”,借球成功后置为“yes”,还球成功后改回“no”。每次借球前先检查这个变量,如果是“yes”就拒绝,这样就避免了同一个人连续借走两个球。看似简单的一个变量,解决的是规则问题。
1.5 对应哪些课程内容
学科 | 对应内容 |
科学 | 电磁铁与电流的磁效应;力的作用与测量;光与图像信息 |
信息科技 | 图像与语音信息的采集与识别;算法与程序结构;数据记录与处理 |
劳动 / 综合实践 | 结构与连接设计;工具使用;产品测试与改进 |
二、运行演示
2.1 成品外观
图 2 成品正面(左)与侧面(右):三层柜体、橙色亚克力柜门,主控与走线外挂在柜体外侧
图 3 俯视柜内:柜底按键与喇叭状导向座,篮球落座后压住按键
2.2 借球流程(现场实录顺序)
下面六步是装置实际运行时的顺序,配图是测试时拍下的画面。
步骤 | 发生了什么 | 学生看到/听到什么 |
① | 摄像头开始采集画面,屏幕显示欢迎语 | 屏幕出现“同学你好!” |
② | 人脸比对通过,进入待命状态 | 灯环亮起暖色,屏幕提示可操作 |
③ | 学生说“借球”,语音模块识别命令词 | 屏幕显示“借球模式” |
④ | 程序检查“是否借球”变量,分配一个空柜位 | 语音:“请取出篮球” |
⑤ | 继电器动作,电磁锁断电,柜门弹开 | 灯环变绿,柜门可拉开 |
⑥ | 取出球、关门,系统写入借球记录 | 灯环熄灭,回到待机 |
图 4 借球时的现场:柜门已打开,学生取走贴着二维码的篮球(画面已裁去面部)
2.3 还球流程
步骤 | 发生了什么 | 学生看到/听到什么 |
① | 说“还球”,系统切换到二维码识别模式 | 屏幕显示摄像头画面 |
② | 摄像头读出球上的二维码,与借出记录比对 | 语音:“已识别到 1 号篮球” |
③ | 对应柜门电磁锁断电,门打开 | 语音:“请将篮球放入箱内” |
④ | 球放进去压住柜底按键,主控读到电平变化 | (等待中) |
⑤ | 判定归还成功,变量“是否借球”改回 no | 灯环变蓝,语音:“已归还 1 号篮球” |
⑥ | 关门,写入归还记录 | 回到待机画面 |
图 5 还球后的状态:篮球落座压住柜底按键,三层柜门均可独立开合;左侧笔记本为 Mind+ 调试界面
运行演示视频(约 2 分钟)需另外上传。原始文件 38.9 MB,超过社区附件 10 MB 的限制,建议压到 720p、3 分钟以内,或上传视频平台后在帖内嵌入。
三、探究过程与结果
3.1 先问用的人:两位体育老师的访谈
动手之前,我先访谈了两位体育老师(A 老师教龄 5 年以上,B 老师教龄 3 年),问了三个问题:平时有没有因为篮球管理产生麻烦?如果有一台机器,应该具备什么功能?这台机器对学生和管理员各有什么好处?
A 老师的回答是“经常遇到”:课间和训练结束后学生随手丢球,场地乱,整理工作量大,还有球被遗失或损坏。B 老师补充,因为没有借还机制,很难追踪最后一个用球的人,出了问题只能由老师承担。两位老师都提到,设备要“简单易用”“能实时看到球的状态”“最好能提醒归还”,B 老师还特别提到要有身份验证,“确保只有注册用户才能借用”。
访谈给我的三点结论:① 痛点集中在“还不回原位”和“查不到人”;② 交互必须比登记更省事,否则学生不会用;③ 必须有身份识别,这直接决定了我要在方案里加人脸模块。
3.2 画出方案:从结构图到流程图
确定功能后,我先把整机拆成“传感器—主控—执行器”三段:麦克风和摄像头负责“感知”,行空板负责“判断”,灯环、语音和电磁锁负责“动作”。这张图后来成了我排查故障的顺序表——先看感知对不对,再看判断对不对,最后看动作有没有发生。
图 6 系统结构图:传感器 → 主控板(行空板 K10)→ 执行器
分层 | 包含的部件 | 负责什么 |
感知 | 摄像头、麦克风、按键模块 | 把人脸、语音、球是否落座变成数据 |
判断 | 行空板 K10 | 比对特征值、判断条件、决定开哪一层柜门 |
动作 | RGB 灯环、语音播报、继电器与电磁锁 | 把判断结果变成学生能看见、能听见、能摸到的反馈 |
接着画出运行逻辑。这张流程图我画了三遍才定稿,难点在“还球”这条分支:它既要核对球号,又要等按键确认,还要处理“球放下了但没压到按键”的情况,所以图中专门留了一条“处理无借球资格情况”的出口。
图 7 运行逻辑流程图(含人脸验证失败、重复借球、无借球资格、还球确认四条分支;按原图重绘)
3.3 做出来
柜体用 2020 铝型材做骨架,紫灰色的是 3D 打印的角连接件,橙色亚克力板做柜门和侧板。我先把模型在 3D 软件里建好,导出 STL 打印连接件,再到电商平台定制切割铝型材和亚克力板,最后用螺丝、合页和热熔胶把部件装起来。三层柜体每层一个柜门,独立控制。
图 8 装配过程:3D 打印角件把铝型材连成框架,装上门锁与合页
3.4 怎么测:把四个疑问变成四项测试
我请 5 位同学做测试者,先录入他们的人脸信息,然后按四项内容逐项测试。每项都有明确的记录口径,失败也要记下原因,否则数据没法分析。
序号 | 测试项目 | 测试方法 | 每人次数 |
1 | 人脸识别准确性 | 测试者站在摄像头前,看识别出的 ID 是否匹配本人 | 10 次 |
2 | 语音识别成功率 | 说出“借球”或“还球”,看系统能否正确进入对应流程 | 10 次 |
3 | 借球流程测试 | 完成身份验证后借球,观察柜门是否打开并播放提示 | 10 次 |
4 | 还球流程测试 | 扫描二维码并把球放到按键上,观察能否正确识别并关门 | 10 次 |
3.5 测试数据
人脸识别:5 位测试者各测 10 次,共 50 次,成功 48 次,整体准确率 96%。
测试者 | 成功次数 | 总次数 | 准确率 | 备注 |
1 号 | 10 | 10 | 100% | — |
2 号 | 9 | 10 | 90% | 光线较暗,1 次未识别 |
3 号 | 10 | 10 | 100% | — |
4 号 | 10 | 10 | 100% | — |
5 号 | 9 | 10 | 90% | 面部角度偏移,1 次未识别 |
合计 | 48 | 50 | 96% | — |
语音识别与借还流程:三项各测 50 次。
测试项目 | 成功次数 | 总次数 | 成功率 | 失败原因 |
语音识别 | 48 | 50 | 96% | 2 次因背景噪音干扰未能识别 |
借球流程 | 47 | 50 | 94% | 2 次电磁锁响应延迟;1 次未及时取出篮球 |
还球流程 | 46 | 50 | 92% | 3 次二维码识别失败;1 次按键未被触发 |
3.6 从数据里读出的三件事
第一,难点不在“能不能识别”,而在“识别失败的代价”。三项成功率都在 92% 以上,看起来不错;但还球是 92%,意味着 50 次里有 4 次学生把球放下却没能完成归还,人已经走了,球还在柜门外。所以真正要改的不是识别率,而是失败之后的补救:给出明确的提示音,并让管理员能看到“这次没成功”。
第二,失败原因可以归成两类,改法完全不同。一类是“输入变差”——光线暗、角度偏、背景吵、二维码磨损,属于环境适应性问题,可以通过补光、降噪、换用 RFID 或提高二维码耐磨性解决;另一类是“机械没跟上”——电磁锁响应延迟、按键没被压到,属于结构问题,要调锁体位置、改按键行程。两类问题混在一起谈,就会得出“识别率不够高”这种笼统结论。
第三,交互设计的价值被低估了。借球流程有 1 次失败是“学生没有及时取走篮球”。这不是机器的问题,是提示不够明确。把提示音从一句话改成“请在三秒内取出篮球”,并让灯环闪烁,这类改动成本几乎为零,效果却直接。
3.7 这次探究的局限
写清楚局限,比只报好数据更重要。这次测试至少有四点不足:
· 样本量小 样本只有 5 人,且都是同一年龄段,不能代表全校身高、肤色、戴眼镜比例。
· 光照条件有限 只测了“正常光、强光、弱光”三种情况,没有测逆光、侧逆光和夜间走廊。
· 无盲测 测试者是自己的同学,知道该怎么站、怎么说,真实用户不会这么配合。
· 未做并发测试 只做了单机测试,没有接入后台,多人同时使用时的排队与冲突没被验证。
四、软硬件清单与制作步骤
4.1 硬件清单
类别 | 名称 | 型号 / 规格 | 数量 | 用途 |
主控 | 行空板 K10 | DFRobot,ESP32-S3,板载屏 | 1 | 运行程序、显示界面 |
感知 | 摄像头 | OV5648(接 K10 摄像头接口) | 1 | 人脸与二维码识别 |
感知 | 麦克风 | K10 板载麦克风 | 1 | 接收“借球/还球”语音 |
感知 | 按键模块 | 微动开关 / 大按键模块 | 1 | 确认篮球落座 |
执行 | 电磁锁 | 12 V 小型电磁锁(带锁舌) | 3 | 锁住三层柜门 |
执行 | 继电器模块 | 1 路 5 V 继电器 | 1 | 用小信号控制电磁锁电流 |
执行 | RGB 灯环 | WS2812,12 灯 | 1 | 状态提示(绿/蓝/黄) |
执行 | 语音合成 / 播放 | K10 板载扬声器 | 1 | 语音提示 |
结构 | 铝型材 | 2020 黑色,按图纸定制切割 | 1 套 | 柜体骨架 |
结构 | 亚克力板 | 3 mm 橙色,激光切割 | 1 套 | 柜门与侧板 |
结构 | 3D 打印件 | PLA,角连接件 / 底座 / 按键座 | 1 套 | 连接与固定 |
结构 | 五金 | 合页、角件、螺丝、热熔胶、万向轮 | 若干 | 装配 |
电源 | 开关电源 / 降压模块 | 12 V 3 A,降压至 5 V | 1 | 供电 |
图 9 核心器件:行空板 K10(左)、12 V 电磁锁(中)、WS2812 灯环(右)
预算参考:主控与传感器约 400—500 元,结构件(铝型材+亚克力+3D 打印耗材)约 300—400 元,五金与电源约 100 元,整机约 800—1000 元。铝型材与亚克力可在电商平台按图定制,没有 3D 打印机时,角连接件可改用铝角件或木质角码替代。
4.2 引脚接线
模块 | 接到 | 说明 |
摄像头 | K10 摄像头排线接口 | 注意排线方向,接反不识别 |
RGB 灯环 | P0 | 12 颗灯,数据脚单线串联 |
电磁锁(经继电器) | P15 → 继电器 IN | 低电平触发;继电器触点接 12 V 与锁 |
还球确认按键 | P12 | 读取数字输入,检测到 1 表示球已压下 |
预留柜门 | P13 / P14 | 初始化时置低电平,供扩展其它柜门 |
供电 | 12 V 电源 → 降压模块 → K10 | 电磁锁与主控分开供电,避免开锁瞬间掉电 |
P13、P14 的实际接法请按实物核对后在发布版中修正;本表按初始化程序中的引脚设置整理。
图 10 引脚接线示意:摄像头走 FPC 排线,灯环接 P0,按键接 P12,锁由 P15 经继电器控制;12 V 锁与主控分开供电、共地
4.3 制作步骤(8 步)
第 1 步 建模:在 3D 软件里按 2020 铝型材截面建柜体模型,导出角连接件、按键座、行空板底座的 STL 并打印。
第 2 步 备料:按图纸在电商平台定制切割铝型材与 3 mm 橙色亚克力板,采购合页、角件、螺丝。
第 3 步 装框:用 3D 打印角件和角码把铝型材连成三层框架,先不装门,检查方正度。
第 4 步 装门:装上亚克力柜门与合页,调整门缝,确保门能自然闭合。
第 5 步 装锁:在每层柜门内侧安装电磁锁,锁舌与门框扣位对齐;接继电器,先用单路测试开合。
第 6 步 装电控:把行空板、摄像头、灯环、按键固定在柜体外侧;按接线表连线,注意强电与信号线分开走。
第 7 步 写程序:在 Mind+ 中按“初始化—人脸学习与识别—借球—还球”四段搭建程序,逐段下载测试。
第 8 步 调试:先测灯环与语音,再测人脸,最后合起来测完整借还流程;记录每次失败的原因。
图 11 在 Mind+ 中分段编写程序:屏幕左侧为积木库,中间为脚本区,右侧为正在联机调试的柜体
4.4 复刻建议
· 可以简化 柜体尺寸可以按学校篮球架的数量缩小到一层或两层,成本能降到一半。
· 材料替代 没有 3D 打印机时,角连接件用铝角件替代;没有亚克力,用透明 PVC 板替代。
· 先做最小原型 如果只需要验证识别功能,可以不做柜体,直接把电磁锁固定在纸箱上做原型。
· 容易踩的坑 电磁锁和主控一定要分开供电,否则开锁瞬间的电流冲击会让主控重启。
五、开源代码
程序用 Mind+ 图形化编写,可以单独下载测试。
5.1 初始化:把机器“唤醒”
程序启动后先做四件事:设定“是否借球”变量、初始化灯环与引脚、把“jie qiu”“huan qiu”两个词加进语音识别词库、在屏幕上写好欢迎语。这一段出错,后面全都不会动,所以我把它单独做成一个可以反复检查的模块。
图 12 初始化程序:变量、RGB 灯环、P15/P13/P14 引脚与语音命令词
5.2 人脸学习
第一次使用时,按下按键 A,灯环变黄,进入人脸录入模式;摄像头连续拍几张,提取特征值并分配 ID,2 秒后自动退出,语音提示“已完成人脸学习”。
图 13 人脸学习程序:按键 A 触发,灯环提示,录入完成语音反馈
5.3 还球与二维码校验
识别到“还球”命令后,屏幕切到摄像头画面并进入二维码识别模式;识别结果里包含“1 号篮球”时,语音提示放入,然后等待按键 P12 读到 1,才判定归还成功,把变量改回 no。
图 14 还球程序:二维码比对 → 开锁 → 等待按键确认 → 语音反馈
完整源程序见附件《02_篮球借还_源程序与结构件.zip》(含主程序与两段测试程序,Mind+ 工程文件可直接打开);同一压缩包内附柜体结构件 STL / 3MF 文件。
六、优化记录与失败尝试
这一章记录的是“没做成”的部分。它们没有出现在成品里,但决定了成品现在的样子。
遇到的问题 | 当时的做法 | 现在的判断 / 下一步 |
光线稍暗就认不出人 | 把测试者往窗边挪 | 治标不治本。计划在摄像头旁加一圈补光灯,与灯环共用电源 |
二维码磨损后读不出 | 重新打印贴纸 | 纸贴纸不耐磨。计划改用 PVC 硬质标签,或换 RFID 卡 |
电磁锁偶尔延迟 | 反复插拔电源 | 是 12 V 供电电流不足。应给锁单独一路电源,加大电容 |
球放下了但没压到按键 | 把球往里推一下 | 按键行程和导向座要改:加大喇叭口,让球自己滑到位 |
摄像头高度固定 | 让矮个子同学垫脚 | 计划加装可调支架,或做上下两个摄像头位 |
柜体太重,搬不动 | 两个人抬 | 底部加万向轮,已留安装孔 |
另外两件事是我做完了才想明白的:
一是“看起来能用”和“能连续用”是两回事。单次演示成功很容易,但 50 次里只要有 4 次失败,管理员就不敢把钥匙交出去。所以后面我把测试次数从 5 次提高到 50 次,问题才暴露出来。
二是失败提示比成功提示更重要。成功时语音、灯环、柜门三重反馈,很热闹;失败时只有灯环闪一下,学生根本不知道发生了什么。改进方向是给每一种失败配一句明确的话,比如“光线太暗,请靠近一点”。
七、AI 使用说明
为保持材料真实、可追溯,本项目在以下环节使用了 AI 工具,均不作为作品核心内容的替代:
环节 | 使用方式 | 学生完成的部分 |
文献梳理 | 用 AI 辅助检索“共享篮球、器材管理”相关论文线索 | 阅读原文、筛选文献、撰写综述与引用 |
程序调试 | 用 AI 解释报错信息与积木逻辑 | 搭建程序、设定引脚与参数、逐段下载测试 |
文档整理 | 用 AI 辅助规范表述、整理表格格式 | 提供全部原始数据、实验记录与结论判断 |
本文档中的照片均来自项目实拍,测试数据来自项目原始记录表,未做修改。



