Adafruit的树莓派教程:热释电传感器感知运动
概览
在这节课里,你将学习到如何使用PIR热释电传感器连接GPIO来激活门禁。
这节课,我们将把注意力放到感知运动和激活门禁开关上。我们会在后面的课程中构建这个安全感知系统,使用小派作为数字输出来在侦测到运动时控制电力设备。
你需要的
要完成这节课讲述的内容,你需要下面的东西。
PIR热释电传感器
电磁门禁传感器
树莓派扩展板
小型面包板
一把跳线
最后,当然是小派啦
硬件部分
我们将会把两个传感器都连接到树莓派上。两个传感器都不需要额外的部件。
PIR热释电传感器是带插座的引脚。一定要确保引脚插得是正确的,红色的应该插在5V上,黑色接地,黄色的插在扩展板的18引脚上。
尽管PIR传感器需要5V的电源供电,但它的输出却是对小派友好的3.3V,所以它可以直接连接到GPIO的上作为输入。
门禁开关使用了一个叫做磁簧开关(reed switch)的东西。在一个玻璃管里装着两个簧片相互连接,然后外面包裹着塑料。当一个磁性物体(另一个白色方块)靠近这个磁簧开关的时候,两个簧片接触,然后开关关闭。因为这是个开关,所以正着接反着接都行。
我们会利用小派自身来在磁簧开关针脚上创建一个内部的上拉电阻,所以我们就不需要额外的上拉电阻了。
软件部分
这个程序只是一个循环,在侦测到运动的时候打印一个消息,或者磁力从门上移除。
程序使用了Rpi.GPIO类库。
import time
import RPi.GPIO as io
io.setmode(io.BCM)
pir_pin = 18
door_pin = 23
io.setup(pir_pin, io.IN) # activate input
io.setup(door_pin, io.IN, pull_up_down=io.PUD_UP) # activate input with PullUp
while True:
if io.input(pir_pin):
print("PIR ALARM!")
if io.input(door_pin):
print("DOOR ALARM!")
time.sleep(0.5)
程序里把pir_pin置为一个普通的输入针(a plain old input)。这是因为PIR传感器有一个3.3V或0V的数字输出。与之相比,door_pin是一个开关,不会产生电压作为数字输入。所以,这个输入针使用了一个额外的参数(pull_up_down=io.PUD_UP)。这将激活一个内部的电阻使得输入变高(上拉)除非有更强的电流(比如开关接地)来把它拉低。
然后循环轮流读取输入然后打印一条响应的消息。记住门禁开关报警只会在磁力从传感器附近移除时才会被激活。
配置与测试
有许多方式可以连接到你的树莓派上。也许最简单的方式是使用SSH并使用下面的命令打开一个编辑器:
nano switches.py
然后把代码粘贴进去,按Ctrl+X保存。
在开始运行程序之前,把磁铁靠近开关并且在PIR传感器上盖上一些东西。
然后使用下面的命令运行程序:
sudo python switches.py
然后你可以看到终端有输出了,当你移走磁铁,或者把盖在PIR传感器上的东西拿开。
一个好的方式或许是把你的孩子放在PIR传感器前面,看他们能坚持多久!