Adafruit的树莓派教程第十二课:感知运动

概览

在这节课里,你将学习到如何使用PIR人体热式传感器连接GPIO来激活门禁。

lesson12_1

这节课,我们将把注意力放到感知运动和激活门禁开关上。我们会在第十三课构建这个安全感知系统,使用小派作为数字输出来在侦测到运动时控制电力设备。

你需要的

要完成这节课讲述的内容,你需要下面的东西。

PIR人体热式传感器(Adafruit 189号产品)

lesson12_2

电磁门禁传感器(Adafruit 375号产品)

lesson12_3

树莓派扩展板

lesson12_4

小型面包板

lesson12_5

一把跳线

lesson12_6

最后,当然是小派啦

lesson12_7

硬件部分

我们将会把两个传感器都连接到树莓派上。两个传感器都不需要额外的部件。

lesson12_8

PIR人体热式传感器是带插座的引脚。一定要确保引脚插得是正确的,红色的应该插在5V上,黑色接地,黄色的插在扩展板的18引脚上。

lesson12_9

尽管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保存。

lesson12_10

在开始运行程序之前,把磁铁靠近开关并且在PIR传感器上盖上一些东西。

然后使用下面的命令运行程序:

sudo python switches.py

..然后你可以看到终端有输出了,当你移走磁铁,或者把盖在PIR传感器上的东西拿开。

一个好的方式或许是把你的孩子放在PIR传感器前面,看他们能坚持多久!(译者:这主意简直棒(sang)极(xin)了(bing)啊(kuang))

Adafruit的树莓派教程第十二课:感知运动,首发于极客范 – GeekFan.net