爱的传递——AI爱心储物柜

视频演示

这是稍短一点的视频  时长4分19秒

 

这是比较长的视频  时长14分44秒

 
制作背景
在学校的门卫室,每天都会发生这样的事情:
我孩子的书本落在家里了,我把书本送给孩子
今天孩子没雨伞,我送一下雨伞
我孩子感冒了,我送点药给孩子
家里有点事情,我有些事与孩子交待一下
……
怎么办(拌)
怎么办(拌)
怎么办(拌)
当然不能凉拌
于是
门卫的保安大哥忙于
登记
收发物品
与班主任联系
给学生送东西
……
能不能有更好的解决方法呢?
于是就诞生了这个爱心储物柜
它将成为家长与孩子之间爱心传递的桥梁
也是学校与学生之间爱心传递的桥梁
也可以是学校与老师之间爱心传递的桥梁。
 
功能描述
        这个爱心储物柜主要有三大功能:
       1.储物功能
       当有人要把物品交给相关的学生或老师时,只在按面板上的存储按键,然后可以根据语音提示进行相关的操作,储物柜的“大脑”首先会去查询有没有空余的储物柜,如果没有则进行相应的提示,这时可以直接把物品交给保安作登记,后续工作由保安完成,如果有空余的储物柜,根据提示说明学生或老师的编号(学生、老师的编号事先录入到数据库中),“大脑”就会查询数据库中有没有这个人,如果有,刚会打开相应的储物柜,这里只要把物品放入并关好柜门就完成了储物的操作,数据库中就会记录相应的信息。这一过程中操作人只能存入物品,不能取出物品,避免一些人知道学生的编号把物品取走。
       2.留言功能
       同样道理,当家长要给自己的孩子留言时,只要按面板上的留言按键,然后可以根据语音提示进行相关的操作,储物柜的“大脑”首先会让你说出学生的编号进行核对,如果数据库中有这个人,则会让你说出留言的内容,然后会复述一遍你的留言内容,并把它保存在数据库中以便学生查询时收听。
       3.查询功能
       当有物品或留言时,学生或老师如果提取或收听呢,在这一环节中不再采用说编号的形式验证身份,以避免恶意领取或收听留言,在这里我们采用人脸识别的技术手段来验证学生或老师的身份(学生或老师相关的照片也事先录入到数据库中,然后通过对比来确定领取人的身份)。
       当我们按按面板上的查询按键,然后可以根据语音提示按确定键进行操作,就会播放语音提示,让你站到摄像头前来验证身份发,如果数据库中没有你这个人,则会提示没有你的信息资料,如果有你这个人,则会先去查询没有你的物品,如果有,刚提示在几号储物柜中,并为你打开相应的柜门,接下来继续查询还有没有物品,如有继续提示并打开相应的柜门,如果没有了则去查询有没有你的留言,如有,则播放你的留言,最后还会持续提醒你关好柜门,直到你关好所有柜门为止。
 
硬件清单
              Microbit                                        2
              micro:IO-BOX 电机驱动扩展板     1
              9GMS 180° 微型舵机                    4
              碰撞开关                                        4
              OLED显示屏                                  1
              5按键模拟按键模块                       1
              杜邦线
              激光切割件

 

制作过程
       这次要制作的是利用Mind+软件平台与硬件器材完成一个软硬件结合,功能完整的AI应用系统作品,其中用到了百度智能云的图像技术、语音技术等技术。而在Mind+软件平台中利用百度智能云的图像技术、语音技术等技术必须是实时模式下才可以使用,但在实时模式下针对不同主控板支持的传感器等模块非常少,无法实现相应的功能,比如实时模式不支持舵机,为了解决这个问题,于是我采用了两块Microbit主控板,一块采用实时模式,一块采用上传模式,实时模式这块主要实现百度AI的图像识别、语音等技术,而另一块采用上传离线模式,主要由它来控制舵机的转运、OLED屏的显示、碰撞开关的检测以及模拟按键的输入,两块Microbit主控板采用无线的方式时行传输相应的指令。
 
一、结构的搭建
       1.激光切割件设计
       我们先利用软件在电脑中设计出爱心储物柜的外壳,并用激光切割机切割了椴木板外壳。

        2.把爱心储物柜的框架组合好,如果不牢固可以用502等胶水进行固定。


3.根据下图把OLED显示屏和模拟按键模块用热熔胶固定在中间的面板上。

 

 

       4.安装好柜门。

 

 

 

 

       5.把4个舵机和碰撞传感器分别用热熔胶固定在柜子的相应侧面板上,舵机的作用是当锁来使用,碰撞开关主要是用来检测有没有关门的动作和门是否关好。

 

 
       6.再把各传感器连接到micro:IO-BOX电机驱动扩展板对应的针脚上。
 
       7.把中间的面板固定在框架上,在柜门上贴上相应的编号,把爱心储物柜标牌插在顶部,这样爱心储物柜的结构就完成了。
 



       二、 线路连接示意图



        三、编写程序
       编程软件:Mind+
        这次用到两块Microbit控制板,一块用作获取按键和碰撞开关的信息,并通过程序控制舵机和OLED显示屏的显示内容,为了区分,我们称它为执行板,其中相应的程序我们命名为执行程序。而另一块Microbit控制板主要用于与百度智能云的中的图像技术、语音技术等技术进行交互,把相关的信息再通过无线与另一块板子进行通讯,从而实现控制舵机和OLED显示屏的显示内容,我们称这块板为AI控制板,其中相应的程序我们命名为AI控制程序。
       1.执行程序的编写
        1.1 执行程序主要是上传到执行板中的,是在上传模式下编写的,所以一打开Mind+时,我们首先切换到“上传模式”。
              接着点击左下角“扩展”,在“主控板”选项卡下选择“micro:bit”作为主控。  
       
        1.2 再在扩展中的执行器选项卡下选择“舵机”,在显示器选项卡下选择OLED显示屏。

 

 

        1.3 执行程序运行时我们先定义关门动作变量并赋值为0,再设置无线频道为2,与控制程序无线频道相同,这样就能实现无线传输,然后再让OLED显示屏显示相应的内容,并把4个舵机设置初始打开的角度,最后循环操作关柜门、存储、留言及查询的函数模块,使之能随时根据按钮返回的值和无线接收到的值执行相应动作或发送相应的信息,具体程序如下图:
 
       1.4 无线接收到相关的信息让执行主控板执行相应的程序如下图所示,这一块主要是通过无线接收到的信息让舵机转动一定的角度,从而实现开门及关门的操作,并让OLED显示屏显示相应的内容提示。

 

       1.5 关柜门的函数中主要是通过检测碰撞传感器的值来判断是否关上了门或应该关哪扇柜门,如果门全关上了,再去判断变量关门动作的值,如果关门动作的值为0,侧发送555告诉控制板门已全关上,并让其值变为1,让控制板不再发出提醒关门的声音。

 

       1.6 在存储的函数中主要通过判断检测是按了哪个模拟按键模块中的按键,从而发送不同的信号OLED显示屏显示相应的内容提示。因为模拟按键模块中的各个按键的值不是一个固定的数值,所以在这里通过一个范围来判断。在重复执行直到指令块中的判断条件为是否按了确定键或取消键,如果都没按,则一直等待,如果按了其中一个按键就发送相应的信息给控制程序的主控板并显示相应的内容,具体程序如下图:

 

        
       1.7 留言函数及查询函数中的程序原理与存储函数是一样的,具体程序如下图:

 





       2. AI控制程序的编写  
        2.1 AI控制板中的程序是实时运行的,所以在开始编写之前,我们先切换到“实时模式”。在扩展中的主控板选项卡中也是选择“micro:bit”主控板。

 

        2.2 在AI控制程序中要用到语音播报和语音识别以及人脸识别,所以还需要选中“功能模块”下的“文字朗读”和“语音识别”功能,再选中“网络服务”下的“AI图像识别”,如下图:

 

 

 

 
       2.3 AI控制程序一开始我们先建立学生编码、学生照片、学生姓名、储物柜、储物库及留言库这6个列表,相当于6个数据库,在学生编码、学生照片、学生姓名这3个列表中我们事先录入学们的号码、学生的照片及学生的姓名,在这里录入时要注意一一对应。
        储物柜列表里有4条信息,初始值都为0,表示共有4个储物柜,0表示储物柜中没有物品,如果有存放了物品,就用1来表示。
        储物库及留言库这两个列表主要是根据存储和留言情况自动添加相应的信息,具体信息格式后面会作介绍。
        列表及相关内容如下图:
 
       2.4 AI控制程序运行一开始时也是定义两个变量,并把同样道理把无线频道设为2。因为这里要用到百度智能云的中的图像技术、语音技术等技术,所以我们要登陆百度的账号,账号的申请及里面的设置在这里不再展开,大家可以参考mind+相关教程(AI人工智能);教程地址: http://mindplus.dfrobot.com.cn/ai
        运行进如果账号登陆成功Microbit点阵屏就会显示“√”,并音箱发出“爱心储物柜已准备就绪”的朗读提示。具体程序如下图:



       2.5 在无线接收模块中,会根据执行程序的主控板中发出的信息进行相应的语音提示和执行相应的函数子程序模块。具体程序如下图:
 
       2.6 关门广播里的程序如下图,每当打开一个柜门时就会进行关门提醒广播,里面就会通过接收到执行主控板中的关门状态变量来判断柜门是否全部关好,如果没关好,每过3秒就会语音提醒一次,直到全部关上为止,并发送信息给执行主控板让其OLED显示相应内容。
 
       2.7 存储物品函数模块的程序如下图,它主要是通过判断是否按了储物柜面板中的存储按键和确定按键来制作是否执行。
       首先它会先去查询有无空余储物柜,通过判断储物柜列表中的值来反馈结果,查询时它会从第一条信息开始查,如果查到第一条的值为0,表示第一个储物柜是空的,就不再查下面的值,接下去执行相关的程序,如果第一条的值为1表示已存放了物品,接下去再去查第二条信息,如果4条信息的值都为1,表示没有空余储物柜,就进行语音提示并结束此模块中的程序。
       当查到有空的储物柜后就会语音提示你说出学生的编号,当你说出学生编号后,机器就会开始与学生编码中的信息进行对比,从第一条开始对比,如果第一条不匹配,再与第二条进行对比,直到最后一条,如果都不匹配,就语音提示“没有这个编号”,如果匹配成功就会朗读学生的名字并打开相应的柜门,再把变量关门状态设为0,表示有柜门打开了,并提醒你要关好柜门。然后再在储物库中加入一条信息,信息的规则为学生的编号+N+储物柜的号码,如190102N1,表示190102这位学生有物品存放在1号储物柜中。

 

       2.8 留言函数里的程序与存储物品函数的程序差不多,主要差别是留言不需要查询有无空余储物柜且留言的条数不受限制。如果留言了,就会在在留言库中加入一条信息,信息的规则为学生的编号+N+留言内容,如你的留言内容是“今天的天气不错”,就会在留言库中加入“190102N今天的天气不错”这样一条信息。具体程序如下图:
 
       2.9 查询函数中的程序的功能是供学生或老师查询有无自己的物品及留言。
       在这里通过人像识别技术来验证人的身份,所以一开始当我们按了面板上的查询按键和确定按键后,语音提示我们站到摄像头前进行人像识别,摄像头抓取图像后会逐一与学生照片列表中的照片进行对比,如果没有符合的照片就会语音提示“没有你的信息资料”,如果相匹配,就会播报你的名字。
       接下来就会去储物库中从上而下逐一查询有没有你的物品,因为储物库中每一条的信息开头是学生的编码+N+储物柜号,所以这里查询的条件是内容中有无包含学生的编码,如果没有,则说明储物柜中没有你的物品,就会语音提示“储物柜中没有存放你的物品”,接下去就会去执行查询留言的程序,如果内容中有包含学生的编码,就会判断你的物品存储在哪个储物柜中,这里是通过读取学生编码+N后面的数字来判断存储在哪个储物柜中的,再根据相应的数字打开储物柜,打开储物柜后就会删除储物柜中对应的这条信息,表明这件物品已经取走了,这条信息已惝用了。然后再查询储物库中的下一条内容进行判断,直到全面内容完成,并把储物柜的关门状态变量设为0,表明现在储物柜门已打开。接下去就去执行查询留言程序。
       查询留言程序与查询储物程序道理是一样的,也是通过上面匹配的学生编码来查询,如果无匹配的内容,就语音提示“没有你的留言”,如果有,就语音播报学生编码+N后面的内容,播报完成后再删除这条留言信息并作相应的语音提示。接下再去查询留言库中下面的留言信息,如有再播报,直到没有才广播关门提醒,最后停止脚本运行。
 
       为了实现这个爱心储物柜的功能,程序修改了很多次,最后终于完成了,但其中可能存在一些不合理的地方,希望大家留言反馈。
 
       最后在新年将来到来之际,我在这里祝大家

新年快乐!

万事如意!