我一直在寻找一些能给自己孩子带来教益的瞬间。当我五岁的儿子来寻求我的帮助,别再让他的弟弟偷偷溜进他的房间的时候,我突然灵光一现,发现这是教他关于输入、输出和其他一些编程知识的绝佳时机。而且让他在解决自己实际问题中学习这些也会相对容易。
我本来可以用很多不同的方法来建立一个简单的警报系统,但是我想要让这个系统是一体化的并且在功能上不止能满足我儿子最初的原始需求。选择树莓派作为控制器是因为它很容易连接到网络、能播放MP3格式的文件、可以和像摄像机这样的USB外围设备进行交互,而且它具有GPIO(通用的输入输出),这样就可以把它和按钮、传感器、灯这样的简单电子元件连接起来。
这个警报系统的源代码非常简单,你可以在我的GitHub上查看。为了利用Linux系统下多线程的优势,我把任务分解了到两个Python脚本中。一个Python脚本(keypadd.py)负责监视小键盘上的有效编码。系统启动时被设置为”disarmed”状态。一旦检测到arm/disarm代码,系统状态就会因为一个在”armed.txt”文件中设置的字节发生翻转而改变。
第二个Python脚本(alarmd.py)利用树莓派的GPIO来监视PIR(无源红外线传感器)。如果检测到动作发生,脚本接着检查”armed.txt”文件判断系统是否产生警报。如果检测到动作的时候产生了警报,警报就会响起。
我建立这个警报系统来满足我自己的需求。下面的内容会一步步地指导你建立一个类似这样的系统。当建立系统的时候,一定要根据自己的需求来定制,比如可以增加激光绊线或者蜂窝式无线电等。
步骤 1:搭建树莓派
- 尽管从头开始搭建树莓派超出了这个项目的范围,但是别担心,一些帮助还是会有的。你可以在网上找到一些教程,但是我建议你读一下Matt Richardson和Shawn Wallace合著的《Getting Started With Raspbery Pi》。这本书不仅仅在PiLarm这个项目上会对你有所帮助,更会帮助你去发掘树莓派的各种功能,这样你才可能会把树莓派的功能结合到自己全新的、有趣的创造上面。
- 通过那些有关树莓派的指导,将你的树莓派连接到互联网。这样就可以从网上下载在接下来的几步中所需要的库文件和代码,树莓派也就能通过推特和电子邮件来发送检测到的入侵者的图片了。
步骤2:安装GPIO
这个库文件允许你控制树莓派的GPIO来使用PIR和键盘作为输入,旋转灯作为输出。在终端中使用下面三条命令来安装:
安装GPIO库
sudo apt-get update sudo apt-get install python-dev sudo apt-get install python-rpi.gpio
步骤3:安装fswebcam
- 如果你在使用第三方摄像头,比如Playstation Eye,那么fswebcam可以让你用它拍摄静态图片。如果你使用的是树莓派自带的摄像头,请参考树莓派官方的安装说明,不需要安装fswebcaam。可以用下面的命令来安装fswebcam:
安装fswebcam
sudo apt-get install fswebcam
- 你可以用这个命令手动拍摄照片:fswebcam -r 640×480 -d /dev/video0 testpictire.jpg。然后使用 “ls” 命令查看拍摄的照片是否出现在当前工作目录中。
步骤4:安装mgp123
- mgp123是脚本”alarmd.py”用来播放”System armed(系统警报)”、”Motion detected.Please enter passcode(检测到物体移动,请输入密码)”等声音文件的命令行音频播放器。安装命令如下:
安装mpg123
sudo apt-get install mpg123
- 现在开始添加我创建的实现PiLarm功能的代码。它位于:https://github.com/BabyWrassler/PiLarm
- 为了把代码放到没有头部没有显示器,只能通过互联网使用SSH进入)的树莓派中,你可以使用git。树莓派并不自带git,但是你可以通过命令安装:
安装git
sudo apt-get install git-core
- 然后使用”clone”命令将代码下载到你的树莓派:
下载PiLarm代码
git clone https://github.com/BabyWrassler/PiLarm.git
- 现在,你有了一个叫作PiLarm的目录,它包含PiLarm项目的python文件和音频文件。在/etc/rc.local文件中含有”exit 0″的行之前添加下面两行设置alarmd.py和keypadd.py为开机启动。
设置开机启动脚本
python /home/pi/Alarm/keypadd.py & python /home/pi/Alarm/alarmd.py &
- 请自己熟悉代码,将代码和以上的流程图比较,弄清楚代码中的语句是怎样运行的。
- keypadd.py文件的第96行包含了用于给系统警报和解除警报的密码(1912)。第97 行的是关机密码(5764),是用来正常关闭树莓派使它可以拔下电源。
- 如果你使用的是树莓派的摄像头组件,请返回去参考树莓派的官方指导查看你需要用哪些命令来替换alarmd.py中与fswebcam相关的命令。
步骤6:设置Twitter
- 在https://dev.twitter.com/apps/new页面中新建一个”App”来获得Twitter的API接口密钥。
- 在”Access Level”中,选择访问权限的等级设置为”Read and Write”。这样之后你会获得”Consumer Key”, “Consumer Secret”, “Access Token”, “Access Secret”的值,而这些都是需要在创建TweetPony API对象的函数中插入的(插入位置在alarmd.py文件的第10行,默认内容为 “api = tweetpony.API(consumer_key = “abcd”, consumer_secret = “efgh”, access_token = “ijkl”, access_token_secret = “mnop”)。
步骤7:焊封面板套件Perma-Proto
- Adafruit公司的面板套件Perma-Proto非常棒,因为它自带有适合树莓派上通用输入输出(GPIO)的连接器。树莓派上的引脚通过连接器固定在板子上,这让连接其余的部件变得非常简单。
- 将树莓派的3.3V电源接到Perma-Proto的正极上,树莓派的地线接到Perma-Proto的接地端。接下来的问题就是熟练、小心的布线,来把所有部件连接起来。我使用公引脚和母引脚作为连接器连接无源红外线传感器之类的器件,但你也可以把它们直接焊接起来。
- 注意音频放大器是在Perma-Proto板上的,从Perma-Proto的电源端获得电源,它并没有通过GPIO接头连接到树莓派上。音频线单独连接到放大器上,扬声器连接到放大器的螺丝接线端上。
- 键盘的连接线很短,因此在焊封前请一定设计好你的布局。
步骤8:完整的系统测试
- 现在你一定很想把这些都放进一个盒子里完成这个项目了,但是在你首先还得测试各个组件是否工作正常,因为一旦把它们放到一个狭小的空间中封装起来,出错的时候再解决故障就变得麻烦多了。
- 如果你的旋转灯出问题了,可能的一个原因是极性连接错误(polarity issue)。我在面包板上测试了自己的系统,手动把TIP120三极管接到电源或地端看看是否能解决问题。
- 如果是代码有问题,可能是一些组件连接到了错误的引脚,也可能是你忘记了设置一些常量的值,比如在第六步中要设置Twitter的一些键值。解决代码的错误,你可以使用Python的”print”命令来打印一些变量的内容到控制台,或者在代码中将一些事件标记为已执行。为了查看alarmd.py或者keypadd.py的控制台输出,你需要通过SSH进入到树莓派中通过命令”sudo python keypadd.py”或者”sudo python alarmd.py”自己运行这些脚本。
步骤9:安装外壳
- 大多数警报系统都被安装成永久固定不变的,但是我设计的这套系统是便携式的,这样可以很容易地扩展功能和重新作为其他用途。最后我选择了能把所有多西都装进去的最小的盒子。
- 我建立第一个PiLarm系统的时候树莓派的摄像头组件还不能使用,但是这些功能马上就要来了。如果你使用这个组件,弄清楚你要怎样加载它。如果你只是直接在外壳上钻一个孔把镜头露出来,你可能会使摄像头的视角范围变小。最好要么把摄像头安装在一个转轴上,要么把整个装置放置在一个三角架上来确保摄像头的视角。
- 如果你使用的是USB摄像头,直接用双面胶把它粘到外壳外面就行了,最好把露在外面的线孔都盖住。
- 外壳倒过来用效果更好,所以盖子的位置其实是底部。
- 在放置组件之前,要在外壳上为树莓派的螺母柱、Perma-Proto板的螺母柱、为扬声器预留的网格孔、LED灯、PIR、USB插孔、摄像头和旋转灯的连接线钻孔。可以不这样,但你肯定不想在某个连接器上掉下了钻孔留下的碎屑或者不小心钻透了某个很昂贵的器件。
- 键盘的连接线需要钻一排相互挨着的1/8″(10.3mm)的孔,用美工刀切掉相互之间的材料,做成一个槽。
- 双面胶会把摄像头和旋转灯固定到合适的位置。键盘可以用粘合剂。扬声器被螺栓固定到外壳上,Perma-Proto板和树莓派使用电路板的螺母固定到外壳上。
- 选择放置电路板的位置时,确保会为连线留下足够的空间。不要把连接线扭在一起或者在连接器上拉得过紧。连接线应该有适当的弯曲,连接器不应该承受任何拉力。PS3摄像头上的连接线很长,你可以把它整齐地盘绕成圈以免带来麻烦。
步骤10:和他人分享,激发他人的兴趣
恭喜你终于完成了!给我们发来你已经完成的系统的照片或者视频,让我们知道你是怎么个性化设计方案来满足自己的不同需求的。把你的杰作展示给那些你认为会因此产生灵感而成为创作者的人!
发表评论