一、项目简述
体育迷应该都碰到过这样的事。不经意间来到篮球场、足球场,忽然心血来潮,希望进入场地锻炼一下或许显露身手,但却往往“没带球”。是的,很多篮球爱好者在打球进程中面临着忘记带球、带球麻烦、临时打球、买球轻易丢、经常被借球、带球人先走以及随身物品存放等麻烦,希望通过篮球共享、物品存放的模式来解决以上痛点。
于是,共享篮球应运而生,只要通过简单的验证,注册激活,就可以借到球。赶快来畅享一下吧!
二、器材清单
1. 硬纸板 若干 制作箱子
2. DFRduino *1 主控板
3. 摄像头 *1 人脸及证件图像获取
4. HC-SR04 超声波 *1 根据箱内距离大小判断是否有球
5. 9g 舵机 *1 开启或关闭箱门
6. 无源蜂鸣器 *1 播放开启或关闭箱门提示音
7. LED灯 *1 箱内照明
8. LCD1602显示屏 *1 实时显示箱内是否有球
三、硬件连接图
四、业务流程图
(1)信息流导向图
(2)逻辑流程图
五、视频演示
六、mind+程序解说
(1)舞台设计
(2)初始化程序,启用篮球场背景,显示“借球”、“还球”按钮。
(3)点击绿旗,启动程序,使用超声波测距,检测箱内是否有篮球,并在LCD1602显示屏上显示。
(4)定义输入电子邮箱函数。当用户点击“借球”按钮时,需要用户输入电子邮箱。然后,将电子邮箱通过MQTT发送到Python后台程序,交给Python进行邮箱格式验证,激活验证,以及黑名单验证。
(5)MQTT接收后台程序对电子邮箱验证的结果,如果邮箱格式错误,则重新输入。如果已被拉入黑名单,则需要电话联系管理员。如果邮箱没有被激活,则输入邮件中的4位整数验证码,Python后台程序继续校对验证码是否正确,是否超时,完全符合要求才允许进行“身份证拍照”。
(6)采集身份证信息,采集人脸信息,进行人脸识别对比验证。如果认证通过,则打开箱门、开启LED照明灯、播放“滴”提示音。等待15秒后,再次利用超声波检测球是否被用户取走。如果被取走,则将信息发送给Python后台存进数据库。
(7)如果用户点击“还球”按钮,让用户输入电子邮箱,打开箱门、开启LED照明灯、播放“滴”提示音。等待15秒后,再次利用超声波检测球是否被放入。如果被放入,则将信息发送给Python后台存进数据库。
如果接受到Python后台返回的“huanOK",则表明还球成功。
如果接受到Python后台返回的”huanHei“,则表明还球超时,已被拉入黑名单。
七、数据库设计
(1)数据库E-R图
(2)用户信息表设计
(3)借还记录表设计
八、Python程序解说
(1)引入库文件
(2)建立MQTT,开启订阅话题
(3)利用正则封装电子邮箱验证函数
(4)如果接受到用户发来电子邮箱,判断是否为新用户,新用户则通过邮件发送激活码,老用户则判断其是否被列入黑名单
(5)封装发送邮箱函数,由于发送验证码
(6)如果收到用户发来的4位整数验证码,判断其是否正确,判断其是否过期,如果正确且不过期,则激活成功
(7)如果篮球被用户取走,将记录存入到借还记录表
(8)如果接受到用户还球操作,将记录存入借还记录表,并判断用户还球是否超时。如果超时,直接拉入黑名单
(9)定时监测,排查超过24小时还没有还球的用户,直接拉入黑名单
九、运行方法
(1)解压“共享篮球程序”。
(2)运行SIoT目录下的 “SIoT_windows_1_2.exe”
(3)如下图所示,修改“shareball.py”文件中第193、194、195、197行的电子邮箱配置成自己的邮箱服务器
(4)在Python3.8模式下运行“shareball.py” 和 “jiance.py”
(5)运行“共享篮球.sb3”
十、随笔体会
想法是突发奇想,受到"章"老师”爱的传递——爱心储物柜“启发,才想到”共享篮球“的。网上一搜,确实也已经存在这样的项目了。开始像简单的做,只是有人靠近自动打开箱门,借球、还球。这样显得苍白无力,不能掌控,不够严谨。想想,有人借了球不还怎么办?于是想到了,人脸识别。只能使用mind+实时模式了,直接提供了图像识别和语音朗读功能。哈哈。
原本想使用人脸识别进行借球和还球操作就可以了。可是,mind+可以保存视频截图,却不能获取该截图的文件名,导致,该截图不能重复调用。
没有哈士奇,只能实时模式,而mind+实时模式和外界数据交换的网络功能,只有MQTT和TinyWebDB。因为MQTT可以使用谢老师和他的朋友们搭建的SIot平台,因此,我直接采用的这个。并且,在SIOT的基础上编写Python程序,来做更细致的数据处理。
这是我第4次使用正式的使用mind+编程程序,每用一次,感觉一次它的强大。特别是Arduino开源套件这一块,集成了非常丰富的类库,直接调用,很方便。
此次项目仅仅是在现有条件下开发,使用Emall电子邮箱激活通讯。实际上,如果申请到微信扫描登陆、微信支付等接口。或者,使用短信接口,发送激活验证码,会更好,更便捷。
十一、参考案例
(1) "云天"老师 [项目分享]Python与Slot本地物联网实现互通 https://mc.dfrobot.com.cn/thread-302643-1-1.html#pid441933
(2) DFEDU [求助问答] I2C LCD1602液晶显示屏无法显示怎么解决 https://mc.dfrobot.com.cn/thread-297811-1-1.html
(3)"章"老师 [项目分享]爱的传递——爱心储物柜 https://mc.dfrobot.com.cn/thread-281075-1-1.html
同时,感谢群里各位大佬的技术指导,谢谢各位!
附件
评论