谢作如 池梦茹
密码锁是锁的一种,开启时用的是一系列的数字或符号,在生活中十分常见。图1是一个常见的密码锁,用于锁皮箱、抽屉等私人空间。图2所示的也是密码锁,这是一个密码水龙头,只有输入正确的数字密码,才能打开。当然,这个设计在实际使用中未必很方便,但谁也不能否认这是个有趣的想法:连水龙头都可以设置密码,还有什么不可以设置密码呢?
常见的密码锁一般使用机械结构,转动一组刻有数字的拨轮圈,可以带动锁内部的机械。Boson Kit(具体介绍见上期文章)为我们提供了与、或、非等逻辑模块,那么能否用它来做一个基于逻辑的数字密码锁呢?本案例将具体介绍如何用Boson Kit设定密码来控制一只小灯。
● 功能分析
Boson Kit主板电源的功能很简单,只要输出给小灯的是高电位,就能控制小灯亮。但是我们希望达到的功能是:按下相应的按钮才能点亮小灯。为了使按钮能稳定在“按下”和“弹起”两种状态,我们选择了自锁开关模块作为密码按键。自锁开关是一种能够锁住自己的开关,在第一次按开关按钮时,开关接通并保持,即自锁;在第二次按开关按钮时,开关断开,同时开关按钮弹出来。用计算机的0、1表示其工作输出值,按下为1,弹起为0。如果想要一个数字密码键,只要给开关的按钮贴上数字就可以了。
假设我们的密码键有1、2、3三个数字,而我们的密码是3、1,只有先按下3再按下1,按键2处于弹起的状态时,才算解锁成功。下面,我们来逐步分析设置密码的过程。
1.利用And(逻辑与)模块实现3、1要同时按下才能解锁
在And模块的帮助下,实现按下2位数字解锁十分容易,如图3所示。
但是,这肯定存在问题:当按键1、2、3全部被按下的时候,小灯自然就亮了,完全没有达到密码的功效。
2.利用or(逻辑非)模块实现按钮2弹起状态才能解锁
要让按键1、3被按下而按键2未被按下,这里又多了一个条件,这就需要用到or(逻辑非)模块。线路图可以参考图4所示,此时只有按下1和3且2未按下,灯才能亮起。
3.实现3、1的先后次序按键才能解锁
细心的读者肯定能发现,完成了第二步后,其实还没有真正完成任务,因为还没有为密码设置顺序。因为无论是按1、3,还是按3、1,都是同样的效果,所以还需要再次改进。
我们可以采用一个有趣的思路,当用户(解锁人)先按下1,则输出一条线路,让3按下不起效果。但是如果先按下3,利用延时模块将信号保持1~2秒左右。只要在规定时间内按下1,就能点亮灯泡(解锁)。虽然按下1按键同样会导致3按键不可用,但是信号已经延时了,不受影响。连接图可参考图5所示。
● 拓展研究
密码之所以为密码,正是因为他人不知道密码的设置规律。这个装置的密码虽然简单,却非常好玩。为了降低猜中密码的概率,我们可以选择增加一些按键进行干扰。回到上面的例子,密码可能的组合有6种,即12、13、23、21、31、32这六种,因此猜对密码的概率为六分之一,如果增加一个按键使得按键总数为4个,而密码仍然为两位数的密码,那么密码的可能组合就有12种,即12、13、14、23、24、34、21、31、41、32、42、43,猜对密码的概率就变成十二分之一,降低了一半的概率。连接图可以参考图6所示。
该图的密码仍然是13。2、4处于弹开状态时,先按下1,再按下3,才能最终实现开灯的效果。
只要按键足够,还可以设置更多组合的密码,设置只有自己知道的奇葩密码。顺便说一下,其实多接几个无关紧要的按钮,也可以起到迷惑解锁人的作用。
● 外观美化
用密码控制开灯的功能已经实现,剩下的就是给它一个美丽的包装。建议找一个纸盒,挖几个小孔,将按键露出来(如图7)。当然,点亮灯没什么意思,可以装一个录音模块,按对密码就播放一句鼓励的话。也可以装一个马达,按对密码,盒子自动打开,超酷。
● 背后的数学知识
设置一个密码后,对于不知道密码的人而言,他猜中密码的概率是多少呢?像上面的例子概率是比较容易算的,但是当按键比较多的时候,一一列举就显得很不现实,如10个数字的按键密码锁,密码是2位不同的数字,我们可以列出密码的“可能组合”有90种,用数学中的树状图表示如图8所示。
所有的组合有90种,即每一个数字开头的都有9个组合,一共10个数字,计算公示为:10×9=90。同理,假设仍是10个数字,密码为3位有序数字,再用树状图表示部分情况,我们很快就知道组成的可能有10×9×8=720种,而真实密码只有一个,所以答对的概率为七百二十分之一。这样回到上面的例子,如果是4个数字的密码按键,密码是有序的2个数,则组合总数为4×3=12,答对的概率为十二分之一。可见用Boson Kit是无法做出安全性很高的密码锁的,但是完成一个密码锁原型却毫无悬念。
如果对相关内容感兴趣,请关注主持人博客。