老虎机与行窃少年

那年我大概十岁。

家门口小店入驻了一台老虎机,每天放学回家路过小店,机器周围,围观者众。

晚饭后喜欢跑到小店,看人们下注、击键、大笑、咒骂、跺脚,我喜欢老虎机侧边的位置,从这里透过机器的缝隙,看得到里边的电路板,上边数字闪烁,毫无规律

此后许久,我对老虎机的兴趣一直很浓厚,多年之后,在大学图书馆的一角,饶有兴致地读到老虎机算法作者的书籍,他谈到你不可能赢过机器,唯一的获胜机会就是赢取你的同伴:你将机器视为中介,根据前边参与者的胜负,决定你的策略,这是你唯一获胜的可能

某天一早,小店门口停着警车,热闹非凡,凑热闹这种事十岁小孩再感兴趣不过了。挤入小店,看到4个少年垂首丧气,双手被扣,十五六岁年纪. 是店里老虎机坐上常客。

好事者纷纷问缘由,老板春风满面, 说起这群少年,如何三番五次,入室盗窃,手法精巧,行事谨慎.

人们又问,你既说他们机智,你又如何逮到他们。

老板等的便是这句,登时状如登上领奖台做获奖感言. 老板说自己早便发现他们入室盗窃,为了证据确凿,设计了一套精巧的陷阱:在柜台入口,近地面处系一根绳子,绳子一直连到老板睡觉的卧室,在卧室里系上易拉罐。少年们再次登门,触发开关,弄倒老板卧室的易拉罐,老板醒后,有备而来,少年们毫无知觉,来个瓮中捉鳖

末了老板感叹一句这等聪明,用到学习上得多出色

人们纷纷赞叹

基于树莓派的报警器

故事里,有一处不够优美:报警器竟是绳子做的!如果少年们更警觉些,看到绳子,或是踩到之后便逃离,老板恐怕要竹篮打水一场空。

我们可以基于树莓派来重构报警器

思路

将超声波传感器(或者红外线)放在柜台下边,当有人路过时,树莓派给老板手机发送一条短信(或邮件),这个隐形的卫士几乎没有破绽

实现(硬件)

硬件部分,我们使用移动电源为树莓派供电,便于藏匿(移动电源可用大约一周)

接线图如下(只需要关注超声波传感器):

实现(软件)

软件部分,我已经把源码放到这里了:raspberrypi_lab

这个项目的核心是,利用超声波传感器测距,当传感器前边有物体时,距离将发生变化,于是触发其他函数(发邮件)即可,核心源码为:echo_main

如果你想发送邮件,使用python的smtp库即可,如果你想发送短信,可以使用Twilio的api:

1
2
3
4
5
from twilio.rest import TwilioRestClient
account = "xxx"
token = "xxx"
client = TwilioRestClient(account, token)
message = client.messages.create(to="+86137xxx", from_="+166xxx", body="Wake up!")

代码跑起来后,把它放柜台下,有人路过时,即可悄无声息地发送短信报警!

守护你的私密空间

我们来继续发挥守护者这个概念,这次的目的是为了保护在房间里不好好学习,爱瞎折腾的你

想想你在自己房间里看哆啦A梦(当然你也可以看些别的(羞射脸))

班主任正在你家客厅家访。搞得你看动画片都不踏实,深怕有人破门而入

让我们发挥geek精神,把树莓派打造为私密空间守护者。这个守护者的职责是:当有人进入房间时,在led矩阵上亮起笑脸以示欢迎,同时用蜂鸣器演奏一首歌吸引注意(我用了葫芦娃,你可以用老师窗前之类的 ^_^)

led矩阵的源码如下:smile.py

蜂鸣器部分的源码为:beep.py

当门被打开时,超声波传感器将感觉到障碍物的出现,这是触发笑脸和音乐,最有意思的是下一步

切换电脑屏幕

你要知道你这个时候正看哆啦A梦看得兴起,你可能沉迷其中,听到音乐也来不及切换电脑屏幕,上班这段动作是典型的触发模式,适合让机器来做,把它自动化!

我们在电脑上跑起来一个进程,这个进程是个web服务,可以被调用,当被调用时(来自树莓派的http请求),我们的电脑屏幕将自动切换到iBook阅读界面,切换速度在毫秒级别,老师/家长一进门,便看到你在津津有味地看书,因为你还没从动画片里缓过神,肯定盯住屏幕的书。老师欣然离去

这是打开之前你的屏幕:

哦不对,拿错图片了:

这是房门打开之后你的屏幕:

这个web服务的源码在这里:pc_server, 这个功能涉及代码很短,只有几行:

1
2
3
4
5
6
@app.route('/study')
def study():
    print('to study')
    command = ["open","/Applications/iBooks.app"] 
    subprocess.call(command)
    return 'study'

有了树莓派守护者,你就可以不必反锁房门,在你的电脑上做任何事儿, 不用担心被察觉啦