http://www.geekfan.net/11376/
本文由 極客范 - Boyd Wang 翻譯自 Adafruit.com。歡迎加入極客翻譯小組,同我們一道翻譯與分享。轉載請參見文章末尾處的要求。
在這節課裡,你將學習到如何使用PIR人體熱式傳感器連接GPIO來激活門禁。
這節課,我們將把注意力放到感知運動和激活門禁開關上。我們會在第十三課構建這個安全感知系統,使用小派作為數字輸出來在偵測到運動時控制電力設備。
要完成這節課講述的內容,你需要下面的東西。
PIR人體熱式傳感器(Adafruit 189號產品)
電磁門禁傳感器(Adafruit 375號產品)
樹莓派擴展板
小型面包板
一把跳線
最後,當然是小派啦
我們將會把兩個傳感器都連接到樹莓派上。兩個傳感器都不需要額外的部件。
PIR人體熱式傳感器是帶插座的引腳。一定要確保引腳插得是正確的,紅色的應該插在5V上,黑色接地,黃色的插在擴展板的18引腳上。
盡管PIR傳感器需要5V的電源供電,但它的輸出卻是對小派友好的3.3V,所以它可以直接連接到GPIO的上作為輸入。
門禁開關使用了一個叫做磁簧開關(reed switch)的東西。在一個玻璃管裡裝著兩個簧片相互連接,然後外面包裹著塑料。當一個磁性物體(另一個白色方塊)靠近這個磁簧開關的時候,兩個簧片接觸,然後開關關閉。因為這是個開關,所以正著接反著接都行。
我們會利用小派自身來在磁簧開關針腳上創建一個內部的上拉電阻,所以我們就不需要額外的上拉電阻了。
這個程序只是一個循環,在偵測到運動的時候打印一個消息,或者磁力從門上移除。
程序使用了Rpi.GPIO類庫。見第四課。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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(見第六課)並使用下面的命令打開一個編輯器:
1
|
nano
switches
.
py
|
..然後把代碼粘貼進去,按Ctrl+X保存。
在開始運行程序之前,把磁鐵靠近開關並且在PIR傳感器上蓋上一些東西。
然後使用下面的命令運行程序:
1
|
sudo
python
switches
.
py
|
..然後你可以看到終端有輸出了,當你移走磁鐵,或者把蓋在PIR傳感器上的東西拿開。
一個好的方式或許是把你的孩子放在PIR傳感器前面,看他們能堅持多久!(譯者:這主意簡直棒(sang)極(xin)了(bing)啊(kuang))