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

- URL: https://wuming.si/blog/810/
- Author: Aaron
- Published: 2014-11-05
- Language: zh-Hans
- Categories: Uncategorized
- Originally published at: http://blog.wo.ai/archives/810

### 概览

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

[![lesson12_1](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/6476e287bb_e203f7b1f1c4ccf95864fd86116d8769.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/6476e287bb_e203f7b1f1c4ccf95864fd86116d8769.jpg "Adafruit的树莓派教程第十二课：感知运动")

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

### 你需要的

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

PIR人体热式传感器([Adafruit 189号产品](http://www.adafruit.com/products/189))

[![lesson12_2](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/0ed3aff6fe_347157ea308ddcb60ee2685042574b96.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/0ed3aff6fe_347157ea308ddcb60ee2685042574b96.jpg "Adafruit的树莓派教程第十二课：感知运动")

电磁门禁传感器([Adafruit 375号产品](http://www.adafruit.com/products/375))

[![lesson12_3](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/99e1a13888_f5a10e37fecc28d3bb81d605fa1675ea.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/99e1a13888_f5a10e37fecc28d3bb81d605fa1675ea.jpg "Adafruit的树莓派教程第十二课：感知运动")

树莓派扩展板

[![lesson12_4](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/0c0efcdf62_7a721b9c7ef9ce89aa4c39b5578593ac.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/0c0efcdf62_7a721b9c7ef9ce89aa4c39b5578593ac.jpg "Adafruit的树莓派教程第十二课：感知运动")

小型面包板

[![lesson12_5](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/e1eb3c84ed_fbb14e041fcb05df9f98894cc3c83811.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/e1eb3c84ed_fbb14e041fcb05df9f98894cc3c83811.jpg "Adafruit的树莓派教程第十二课：感知运动")

一把跳线

[![lesson12_6](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/4d5babc9e2_ad5c6c6b5e2a9e85815ed6b97d2d3a1a.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/4d5babc9e2_ad5c6c6b5e2a9e85815ed6b97d2d3a1a.jpg "Adafruit的树莓派教程第十二课：感知运动")

最后，当然是小派啦

[![lesson12_7](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/65de97abbe_26ea130d8c1c2a7d525d84876bb1939e.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/65de97abbe_26ea130d8c1c2a7d525d84876bb1939e.jpg "Adafruit的树莓派教程第十二课：感知运动")

### 硬件部分

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

[![lesson12_8](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/93ddec433c_8443f55d5dfbf662048ffd20bacafb7c.png)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/93ddec433c_8443f55d5dfbf662048ffd20bacafb7c.png "Adafruit的树莓派教程第十二课：感知运动")

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

[![lesson12_9](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/bd6b4e2dea_40c694a9007636f2a4a59ef38b160387.jpg)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/bd6b4e2dea_40c694a9007636f2a4a59ef38b160387.jpg "Adafruit的树莓派教程第十二课：感知运动")

尽管PIR传感器需要5V的电源供电，但它的输出却是对小派友好的3.3V，所以它可以直接连接到GPIO的上作为输入。

门禁开关使用了一个叫做磁簧开关(reed switch)的东西。在一个玻璃管里装着两个簧片相互连接，然后外面包裹着塑料。当一个磁性物体(另一个白色方块)靠近这个磁簧开关的时候，两个簧片接触，然后开关关闭。因为这是个开关，所以正着接反着接都行。

我们会利用小派自身来在磁簧开关针脚上创建一个内部的上拉电阻，所以我们就不需要额外的上拉电阻了。

### 软件部分

这个程序只是一个循环，在侦测到运动的时候打印一个消息，或者磁力从门上移除。

程序使用了Rpi.GPIO类库。见[第四课](http://www.geekfan.net/8972/ "Adafruit的树莓派教程第四课：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(见[第六课](http://www.geekfan.net/9128/ "Adafruit的树莓派教程第六课：使用SSH"))并使用下面的命令打开一个编辑器：
    
    
    nano switches.py

..然后把代码粘贴进去，按Ctrl+X保存。

[![lesson12_10](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/eb5e755a46_7e24201b71545ef2a2c3b435cf1ef8b7.png)](http://blog.wo.ai/wp-content/plugins/wp-o-matic/cache/eb5e755a46_7e24201b71545ef2a2c3b435cf1ef8b7.png "Adafruit的树莓派教程第十二课：感知运动")

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

然后使用下面的命令运行程序：
    
    
    sudo python switches.py

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

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

[Adafruit的树莓派教程第十二课：感知运动](http://www.geekfan.net/11376/)，首发于[极客范 – GeekFan.net](http://www.geekfan.net)。
