树莓派+SR510传感器+闲置摄像头实现智能自动拍摄系统
上回用树莓派和PowerBI DIY了实时的温湿度监控平台,却始终没有得到领导的赞赏,更别提升职加薪的夙愿了,让我好生愤懑。
好在像我这样性别男爱好女的大好青年,兴趣非常广泛,可以找到别的兴趣点。
最近办公室来个女同事,面容姣好,身材高挑,长发披肩,眉宇之间还有些女明星的神韵。可惜像我这样羞涩的大男孩始终不敢正面与其对视,但是心中却早已翻江倒海。虽然你还不知道我的名字,但是我已经想好了我们孩子的名字。
所以我要想个办法让她的美360°无死角呈现在我面前,实现的方法还是树!莓!派!
首先要准备需要的配件。淘宝上的3代树莓派开发板一个,一般是200多块钱,可以自己选择配件,比如外壳、电源、TF卡、散热风扇等等。值友们也不用私信问我购买的链接了,树莓派基本上没假货,找个销量高的链接购买即可。
杜邦线面包板,方便线材拼接。
人体红外传感器,我用的是HC-SR501,淘宝上不到5块钱一个,非常便宜。
传感器另一端的菱镜像半个足球,这是为了增加感应角度范围。
任意USB摄像头一个,我翻箱倒柜找到了个中古罗技C170摄像头,精度为500万像素,非常小巧,可以隐藏在任意角落。
树莓派的安装和之前那篇文章方法无异,推荐直接到官网下载,下载地址。我这里下载的是标准版RASPBIAN。
RASPBERRY还包括完整版和轻量版,我选择下载了完整版,下载完整可以验证SHA-256保证数据完整性。
下面就是拿出TF卡烧录系统了,我是购买的闪迪的16GB TF卡,RASPBIAN裸系统也就2GB左右。
选择镜像文件,对应的读卡器所在盘符,等待写入完成。
然后将TF卡装到树莓派开发板中。
考虑到这个检测装置的长期使用,我还加装了风扇,当然,有风扇就会有点噪音。
连接方法可以参照下图,红线接4针脚,黑线接6针脚。
接好后如图。
另外选用了一个黑色的树莓派硬壳,将风扇用螺丝固定在外壳上,连线太长打了个结。
然后再将外壳扣上去,就很完美了。
连接传感器
首先看一下树莓派GPIO针脚详图。
连接方式非常简单,一共三根线,Vcc 接 +5v,Gnd 接 Gnd(0V),out 接 GPIO针脚。
传感器上的接口见下图。如果讲究的话可以接个光敏电阻,可以防止干扰源。
我这边就随意接了下,之前温湿度传感器的模块也没有拆,所以略显杂乱。
百度到的传感器原理,通过检测人体红外线来探测人类的接近。
人体都有恒定的体温,一般在37度,所以会发出特定波长10UM左右的红外线,被动式红外探头就是靠探测人体发射的10UM左右的红外线而进行工作的。人体发射的10UM左右的红外线通过菲泥尔滤光片增强后聚集到红外感应源上。
红外感应源通常采用热释电元件,这种元件在接收到人体红外辐射温度发生变化时就会失去电荷平衡,向外释放电荷,后续电路经检测处理后就能产生报警信号。
介绍中看传感器探测范围还是挺大的,不过我实际使用差距比较大。
当然传感器上可以调节距离和延时。
传感器有两种触发方式,可以依据自己的实际需要选择。
a、 不可重复触发方式:即感应输出高电平后, 延时时间段一结束, 输出将自动从高电平变成低电平;
b、 可重复触发方式:即感应输出高电平后,在延时时间段内,如果有人体在其感应范围活动,其输出将一直保持高电平,直到人离开后才延时将高电平变为低电平(感应模块检测到人体的每一次活动后会自动顺延一个延时时间段,并且以最后一次活动的时间为延时时间的起始点。
将C170摄像头和树莓派的USB接口相连,至此物理连接全部完成。
开放树莓派的SSH连接,方便传输文件调试等等。
在命令行输入:sudo raspi-config,然后回车,如下图:
回车开启SSH。然后就可以通过Putty等工具远程连接到树莓派上了,如果习惯图形交互界面可以用VNC等工具。
检测树莓派能否识别出USB口上连接的摄像头,命令为lsusb。很完美,可以看到已经认出了005口上的罗技C170,所以驱动问题应该不用担心。
然后输入命令ls /dev/video*查看摄像头的实际设备号,后面的代码需要使用。
下图可以看到设备号为/dev/video0
下面就可以写代码了,创建一个Python文件(.py),放入以下参考代码,其实原理很简单:
代码查看传感器状态,发生变化后启动拍照函数。
注意代码中加粗部分是需要根据自己实际情况修改的。检测的GPIO口,拍照使用的设备,和照片保存的路径等等。放在/tmp下面每次树莓派重启就把照片清空了,实现阅后即焚的效果,嘿嘿。
import RPi.GPIO as GPIO
import time
import os
import datetime
GPIO.setmode(GPIO.BOARD)
GPIO_PIR = 12
#photo settings
VIDEODEV = "/dev/video0"
PHOTOREPEATTIMES = 3
RESOLUTION = "800x600"
DIRECTORY = "/tmp/"
def photo_capture():
filename='%s%s%s' % (DIRECTORY,'%d%m%Y_%H%M-%S','.jpg')
for i in (0,PHOTOREPEATTIMES):
os.system('fswebcam -d /dev/video0 -S 30 -F 5 ' + filename)
time.sleep(0.5)
print "PIR Module Test (CTRL-C to Exit)"
GPIO.setup(GPIO_PIR,GPIO.IN)
Current_State = 0
Previous_State = 0
try:
print "Waiting for PIR to settle ..."
while GPIO.input(GPIO_PIR)==1:
Current_State = 0
print "waiting for ready..."
while True:
Current_State = GPIO.input(GPIO_PIR)
if Current_State == 1 and Previous_State == 0:
print "Someone is passing!"
photo_capture()
Previous_State = 1
elif Current_State == 0 and Previous_State == 1:
print "waiting for ready..."
Previous_State = 0
time.sleep(0.01)
except KeyboardInterrupt:
print "Quit"
GPIO.cleanup()
利用命令sudo python xxxxx.py运行脚本,大概实现的效果如下:
因为人物都是动态经过检测设备的,所以拍摄出来的照片大多比较模糊,这和摄像头的精度有关。清晰的我也不会给你看,发上来还要打马赛克,多此一举。
这个小实验证明利用树莓派加上红外传感器还是有不少应用的领域的,除了可以偷拍,还可以做个安保系统之类的,当然拍照设备的精度越高越好,另外可以加上其他设备以避免其他红外源的干扰。
看到这里,可能诸位值友依旧有些好奇,新来的女同事到底长啥样呢?满足你们!
是不是很有仙气呢?
注:以上情节纯属虚构。
热血魔兽
校验提示文案
巨大直
校验提示文案
eirc007
校验提示文案
空樽对月
校验提示文案
Waltere
校验提示文案
玩乐世
校验提示文案
玩乐世
校验提示文案
Waltere
校验提示文案
空樽对月
校验提示文案
热血魔兽
校验提示文案
巨大直
校验提示文案
eirc007
校验提示文案