张立立, 柳轶天, 邱 阳, 鲍玉斌
(东北大学 计算机科学与工程学院,沈阳 110819)
众所周知,当下人工智能[1-2]领域的发展迅速,而在我国,国务院印发《新一代人工智能发展规划》[3]其中提到,新一代人工智能发展分3个步骤走的战略目标[4],使中国在2030年人工智能理论技术达到世界先进水平。而在实验室这个科研圣地,“智能”二字显得尤为重要。如今各高校均有开展自主性实验[5-6],如何对实验室器件的存入和取出的管理成为一个新的课题,管理不好,则使物品摆放变得杂乱无章,而使用机械锁来存储物品,又不符合当下智能的时代。因此,针对实验室器件的管理[7-8],进行开发设计一种智能的存储管理系统,既保证了从传统意义上讲每个物品存储的安全性,同时又使不同种类的物品智能[9]分类。并为实验室管理员配置权限密码,从而整体提高了实验室管理的安全性。
当实验室管理员储存一批采购的实验器件时,首先进入管理员界面,输入管理员权限密码,密码正确,则进入存器件界面,若输入错误,则系统会发出警告,并在显示屏上提醒你没有权限操作,这时系统会进入戒备状态,在一段时间内无法重新使用。
进入存物界面后,系统在接收到存物命令后,扫描系统中是否有空柜,如果未存满则打开一个空箱,成功后系统将提示管理员存储成功。对于同一类属的不同物品,可以存放在同一个柜子当中。
当科研人员取器件时,需输入实验器件的编码,系统会根据输入的编码进行校验检测,如果匹配成功,则打开对应的柜门取出物品。如果未匹配成功,即输入错误,则系统会提示重新输入,若连续输错3次,则系统会退出取器件界面。
结合系统功能,总体的流程图如图1所示。
图1 设计总流程图
整个系统的硬件构成部分为:电控锁模块(用于连接储物柜),微控制器,显示屏,外接键盘。为了降低开发成本,同时为了更加通俗易懂的说明问题,微控制器选用STC系列芯片。
系统可由多个这样的子系统构成,多个子系统组合起来并具有分层结构时,可形成多层的神经网络。构成一个子系统的硬件结构框架如图2所示。
(1) 微控制器。STC系列芯片[10]采用STC89C54,共40个引脚,其中有4个8位并行I/O口(P0,P1,P2,P3)。其中P0口用于控制柜门的打开与闭合;P1口用于微控制器与外设键盘之间的通信;P2口用于微控制器与显示器之间的数据传递,P3口用于微控制器对显示器发各种的控制信息,用于屏幕的初始化,切换等的控制。
图2 子系统结构框架图
(2) 电控锁模块。电控锁的电学性质大致上为给予某个电平时会打开锁,给予相反的电平时则会关闭,由于微控制器使用的是5 V电压,而电控锁工作电压为DC12V,开锁瞬时电流(1~3 A),故电路连接时需通过连接NE555集成芯片进行电流的放大,以驱动电控锁中的电磁继电器[11]吸合,从而控制电控锁的开和闭。图3所示即为电路设计,当NE555芯片CV端给予一个低电平时,电控锁中的电磁继电器就会短时间内吸合,电控锁打开,配合储物柜柜门的弹簧,就能实现柜门的自动打开,其延时时间可调节电阻R8与电容C4进行调节,延时时间t=1.1×R8×C4,电路设计中的延时大约为100 ms。
图3 电控锁模块仿真图
(3) 显示屏模块。采用液晶显示屏LCD 12864,其在便携式仪器中有着广泛的使用[12],如转速表、计算器、万用表等。便携式仪表基本都具备键盘输入模块和液晶显示模块,以便于人机操作和设置。由于液晶模块程序操作简单,故在微控制器的开发过程中经常作为常用的电路模块进行系统的整体结构设计。
采用AMPIRE128X64型LCD12864,将P2口作为数据传输端与LCD12864的DB0~DB7相连,控制端与P3口相接,使能端E与P3.0相接,命令数据选择端RS与P3.5相接,读写选择端R/W与P3.1相接,左屏片选CS1与右屏片选CS2分别与P3.6和P3.7相接,按照LCD12864通信协议,用单片机C语言编写程序以控制LCD显示预期效果,如图4所示。
图4 LCD12864与单片机连接图
为实现上述功能,需要重点考虑的问题有对权限密码和编码的生成,记录,核对及消除,显示界面的切换,以及同一柜子储存多种物品的算法设计。
各界面的切换算法是根据外接键盘扫描模块所返回得到的键值进行不同的操作[13]。为使程序编程简单明朗化,将该模块分两个函数[14]来编写:operation(uchar key)函数和show(uchar n)函数,编程时对每个界面编一个号,设置一个全局变量interface记录当前界面标号,程序operation(key)根据键值对各全局变量进行改动和记录。同时根据处理情况的不同,对interface进行赋值。show(interface)函数为界面的显示函数,需设置一个全局变量记录上一次的界面标号,show(n)函数运行前先将当前界面标号和上一次标号进行对比,假如改变则清一次屏,再显示当前界面。
一柜多物多码算法是利用计算机网络[15]中的循环冗余校验算法,将管理员存入器件的数据信息,即柜子号,器件种类号,器件自身二进制编号,储存在微控制器中,并将其除以生成多项式,把结果作为冗余码,并附在数据后面,类似于发送方。取件者输入的信息加上冗余码构成接收方接收到的数据。通过判断数据除以生成多项式的余数是否为0来确定是否输入错误。
此编码实际上是一个循环移位的模2运算,本文以 5 bits的寄存器为例来说明这种算法。通过反复的移位和进行冗余码的除法,最终该寄存器中的值去掉最高一位就是所要求的余数。上述步骤用下面的伪代码描述为:
把reg中的值置0.
把原始的数据后添加r个0.
While (数据未处理完)
Begin
If (reg首位是1)
reg = reg XOR 0011.
把reg中的值左移一位,读入一个新的数据并置于register的0 bit的位置。
End
reg的后四位就是我们所要求的余数。
这种算法简单,容易实现,对任意长度生成多项式的G(x)都适用。在器件编码信息不长的情况下可以使用。
软件设计还包括:LCD12864显示界面设计和矩阵键盘按键扫描模块等,这些模块算法设计相对简单,这里不再表述。
系统调试阶段中,每一部分设计都先单独进行测试,整个硬件系统也是先在电脑上进行仿真设计后,再进行实物测试,最后进行了系统软硬件联调[16]。在系统设计过程中,遇到了一些问题,并对设计过程进行总结归纳,得到了问题的解决方法。
(1) LCD12864 显示不出字问题。①问题描述。LCD12864 在Rv1连接确认无误的情况下,屏幕显示空白,并且没有对比度,屏幕上有很多白点,无法清除。②原因。因为采用的是不带字库的12864,器件引脚本身的参数特性不稳定,导致字体时有时无。③解决办法。在LCD12864背面的贴片上焊接一个20 kΩ的滑动变阻器,用以调节Rv1。由于实验室中没有此参数的变阻器,故用两个10 kΩ的滑动变阻器代替。
(2) LCD12864 显示串屏问题。①问题描述。在进行实物操作时,会发现当屏幕切换时,如果新的屏幕有地方没有字,则会被上一个屏幕的字替换掉,一直清除不掉。并且当开发板断电之后立即重新通电,会保留断电前的界面,除非断电后很长一段时间后再上电。②原因。LCD12864 切屏方式的问题,它默认只改变新的屏幕中新出现的地方,不会对未改变的地方清除。③解决办法。通过编程,将原本没有字的地方写空,这样屏幕上所有的点在屏幕切换中,都会接受新的数据,这样就彻底将原本的屏幕数据覆盖,从而达到屏幕清晰显示的特点。
(3) 继电器控制不稳定问题。①问题描述。在实物连接早期,会出现一个现象,即使单片机控制继电器的引脚发出的是高电平,继电器仍能够触发(继电器设置低电平触发方式)。②原因。继电器触发电平范围比较大,单片机提拉电阻取值不合适。③解决办法。选用合适阻值的提拉电阻。
整个系统可由多个子系统分布式组合而构成,而整个大系统又可以分为若干个区域,每一个管理员管理一个区域,管理员存器件和科研人员取器件同时完成,实现多人同时存取。
由于每一个子系统都含有一个微控制器,多个微控制器组合则构成一个快速,高效的处理器,这些处理器分层分布时,可以构成多层的隐含层,使整个系统具有深度学习的功能。结合当下人工智能领域的计算机视觉技术的发展,可以将管理员权限密码推广为管理员面部识别。