這篇文章來源于DevicePlus.com英語網站的翻譯稿。
目錄
1. PIR傳感器簡介
1.1 優點和缺點
1.2 您將要學習的內容
2. 將PIR傳感器與Raspberry Pi連接
2.1 設置環境
2.2 GPIO引腳編號方案
2.3 示例PIR電路和代碼
1. PIR傳感器簡介
PIR是被動紅外的首字母縮寫,具有很棒的性能,因為它不發射任何紅外光(這意味著低功耗),只用于檢測其視場中快速變化的紅外光。
傳感部分是一個雙金屬熱釋電傳感器,由對紅外光響應方式不同的兩種材料組成,其微弱的電輸出信號會被低噪JFET放大,以產生可用的電壓輸出。
由于熱釋電傳感器板是平的,不適合用于諸如110度這樣的視場,所以可以添加一個菲涅爾透鏡進行聚焦,這與美國宇航局的深空天線非常相似。該圓形塑料部件位于傳感器前側,旨在將紅外線反射到構成熱釋電傳感器的兩個金屬板上,從而讀取紅外熱像的變化。
根據設計,通過放大級,PIR傳感器能夠觸發繼電器(例如打開燈光)或向附近的裝置發送信號,通知它在特定區域有運動發生。這種功能在我們的現代生活中無處不在,比如您附近每一次低沉的“咔嗒”聲和突然的照明,都是通過使用這些先進的傳感器實現的。
1.1 優點和缺點
PIR傳感器可靠性好、壽命長,最重要的是,可以靈活應用于很多場景,通常具有可調節的紅外閾值和開啟時間。
然而,PIR傳感器也存在局限性。它們容易出現誤報(出于一些常見的情況,如氣流),而高度準確的運動檢測最好使用微波傳感器,例如,昂貴的汽車報警器都會使用微波傳感器。
PIR在首次通電時還需要長達30-60秒的時間才能穩定下來,并且通常首次通電時會在信號引腳上觸發至少一個誤報。這是因為它們會響應不斷變化的紅外熱像,而通電構成了變化。這意味著您的設備可能不得不延遲操作,直到PIR穩定下來。具體情況取決于不同的應用場景,這可能會有點麻煩。
1.2 您將會學到的內容
在后文中我們將要使用的基于Raspberry Pi的 HC-SR501帶有很多旋鈕和控制桿。您可以對所有的功能和交互方式進行調整來為您的應用提供完美的感應輸入信息。
您的PIR傳感器必需要與其他元件連接,否則不會有任何作用。通過本文,您將學習如何將其與您的Raspberry Pi連接。我們提供了示例代碼,在shell腳本中使用了WiringPi的“gpio”庫。
您可以根據自己的意愿對其進行修改,這很容易,尤其是參照《高級Bash腳本編程指南》的話,我們接下來就會安裝該指南。
2. 將PIR傳感器與Raspberry Pi連接
您需要先設置自己的Raspberry Pi,請根據本指南快速完成此操作。
2.1 設置環境
完成后,將下面的腳本復制到您的Raspberry Pi,然后運行它:
sudo bash rpi_prepare.sh
該命令將用于安裝與GPIO硬件接口相關的大多數軟件包。“abs-guide”包將用于安裝《高級Bash腳本編程指南》,建議所有用戶都安裝該指南??梢栽谝韵挛恢谜业剿?/p>
“/usr/share/doc/abs-guide/html/index.html”。
專業提示:作為用戶“pi”,將以下內容粘貼到您的終端中:
cd /usr/share/doc/abs-guide/html && python -m SimpleHTTPServer >/dev/null 2>&1 & cd -
并在 http://raspberry.local:8000 查看指南—如果您的工作站和Pi之間的mDNS無法正常運行,請使用:
hostname -I
然后獲取IP地址,接下來訪問 http://pi-ip:8000 …
— 或者,可以點擊此處下載PDF格式文件。
即使您不打算編寫腳本,而只是使用終端,本指南也會非常有用。
[ begin rpi_prepare.sh ]
#! /usr/bin/env bash set -eu -o pipefail export DEBIAN_FRONTEND DEBIAN_PRIORITY DEBCONF_NOWARNINGS _pkg_list="vim zip unzip curl wget pigpio wiringpi rsync wiringpi python-rpi.gpio python3-rpi.gpio rpi.gpio-common git python3-serial python-serial abs-guide python-gpiozero python-gpiozero-doc python3-gpiozero" # Upgrade system and installed packages sudo apt update || ech o failed to update index list sudo dpkg --configure -a || ech o failed to fix interrupted upgrades sudo apt --fix-broken --fix-missing install || ech o failed to fix conflicts sudo apt -y --allow-downgrades --fix-broken --fix-missing dist-upgrade # Install $_pkg_list sudo apt update sudo apt-get -y install $_pkg_list
[ end rpi_prepare.sh ]
如果您在無頭模式下運行Raspberry Pi 并希望添加SSH連接,請在 微SD的第一個分區(/boot)上創建一個名為“ssh”的文件,以允許在首次啟動時進行SSH訪問。如果您使用的是USB-TTL適配器,請發出以下命令以確保串行連接:
sudo ech o 'enable_uart=1' >> /PATH/TO/BOOT/MOUNTPOINT/config.txt
2.2 GPIO引腳編號方案
中級/高級用戶可以跳過此部分。剛接觸GPIO的人需要了解一下該部分內容。在Raspberry Pi系統上,引腳的編號至少有兩種方案:BCM和BOARD。BCM方式晦澀難懂,但是很便攜。而BOARD簡單易懂,就像“1-2-3”這樣,GPIO引腳位于板的右側,微SD槽在背對您的位置。但請注意,這可能會因具體情況有所變化!
引腳1為3V3,引腳2為5V,以此類推。此編碼方案可以讓您從頂部開始計數,直到找到所需引腳為止。第三個是WiringPi的編號方案,可以直接使用GPIO編號,我不選擇使用這個方法,也不推薦您使用。請使用BCM或BOARD編號,這絕對是正確的選擇。
您可以通過以下命令使用“wiringpi”軟件中的gpio實用程序來臨時查看這些編號方案的編號對應方式。
gpio readall
輸出內容如下所示:
顯示內容可能會因所使用開發板的不同而不同。請參閱Pinout.xyz網站了解所有Raspberry Pi板的引腳圖信息,這可以節省很多時間!
2.3 示例PIR電路和代碼
您將需要以下元件來構建
電路:
BOM:
Raspberry Pi 4 | https://www.amazon.com/Raspberry-Model-2019-Quad-Bluetooth/dp/B07TD42S27/ref=sr_1_3?keywords=raspberry+pi+4&qid=1581051818&sr=8-3 |
HC-SR501 PIR 傳感器 | https://protosupplies.com/product/hc-sr501-pir-motion-sensing-module/ |
杜邦電線 | https://www.amazon.com/Elegoo-EL-CP-004-Multicolored-Breadboard-arduino/dp/B01EV70C78/ref=sr_1_2?keywords=dupont+wire&qid=1581051893&sr=8-2 |
面包板 | https://www.amazon.com/Pcs-MCIGICM-Points-Solderless-Breadboard/dp/B07PCJP9DY/ref=sr_1_8?keywords=breadboard&qid=1581051922&sr=8-8 |
ROHM SLR343BC4TT32 3mm LED | https://www.digikey.com/products/en?keywords=ROHM%20SLR343BC4TT32 |
2x 1kOhm 電阻 | https://www.amazon.com/Projects-100EP5121K00-Ohm-Resistors-Pack/dp/B0185FIJ9A/ref=sr_1_3?keywords=resistor+1k+ohm&qid=1581052039&sr=8-3 |
一旦您把元件組裝在了一起,完成面包板上的電路連接就很容易了。請按照下圖連接,特別注意您要連接的Pi GPIO引腳。
HC-SR501接受5到12V的輸入電壓,因此請從5V引腳(既然我們已經熟練掌握引腳編號方案了,可以直接說是BOARD2和BOARD4)拉一根條線到面包板的5V/紅色電源軌。
然后將一根條線從GND(BOARD6)拉到黑色軌上。
從那里將5V連接到HC-SR501的引腳3,并將GND連接到引腳1。
在PIR的引腳2和Raspberry Pi的BCM25/BOARD22引腳之間放置一個1kOhm的電阻,以延長Pi引腳的使用壽命,且信號不會受到影響。這就是我們的輸入。
當您希望調整信號引腳3V3上信號的IR靈敏度、觸發行為(位置為H和L的3P接頭)以及導通時間時,請參閱HC-SR501的指南。技術規格書可點擊此處獲取。
在下文中您會看到我將跳線設置為“無重復”(L),這意味著只要有運動,它的信號就會保持在3V3—這有點不可靠。電容器看起來也不可靠,但是只要使用一些熱膠,它們就永遠不會脫離模塊。
在第二張圖片中,您會看到兩個電位器。左側用于調整靈敏度(CW用于增加,反之用于減少),右側用于調整導通時間(CW用于增加,反之用于減少)。非常簡潔。
我們還想添加一個小LED用于在檢測到運動時發出指示。我用的是藍色 ROHM SLR343BC4TT32 3mm LED。需要將一個限流電阻與Pi的BCM25/BOARD18引腳和LED的陽極(長腿)串聯,限流電阻至少為1kOhm。將LED的陰極連接到GND軌,就完成了。
在示例應用程序中,我們將使用WiringPi的“gpio”庫從PIR讀取3V3/0V到Pi。我傾向于捕捉上升沿并忽略整個信號導通時間,但這需要一個硬件濾波器(2個1kOhm電阻、1個0kOhm電阻和1個100nF電解電容器)來消除抖動。
也許還需要加上一個軟件過濾器(檢查,等待5毫秒,再次檢查)以可靠地進行工作。不需要確定引腳的狀態,但是您會發現相比于Arduino,在Raspberry Pi上捕捉瞬間波形需要做更多的工作。
[ begin pir_wiringpi.sh ]
#! /bin/bash # Detects when BOARD22/BCM25/WiringPi6 goes to 3V3, # and lights a LED for $_action_time seconds when this # happens. # Notes: # * Depends on 'gpio' utility from the wiringpi package. Install it # with 'apt-get -y install wiringpi'. # * Give PIR sensor 30-60s to adjust to ambient IR, you may # want to delay before reading signal from it. set -eu -o pipefail PATH=/bin:/usr/bin _pir_pin=25 # BCM25/BOARD22/WiringPi6 _led_pin=24 # BCM24/BOARD18/WiringPi5 # How long should the action run? _action_time=5 # Clean up on ^C and TERM, use 'gpio unexportall' to flush everything manually. trap "gpio unexport $_pir_pin ; gpio unexport $_led_pin" INT TERM # Explicitly uses BCM_GPIO pin numbering, no '-g' flag needed. gpio export $_pir_pin in gpio export $_led_pin out # Let PIR settle to ambient IR to avoid false positives? # Uncomment line below. #sleep 30 while true do _ret=$( gpio -g read $_pir_pin ) if [ $_ret -eq 1 ] then ech o "[!] PIR is tripped, LED on ..." ech o "( Do real stuff here ... helloworld with a bullhorn *wink* )" # ... gpio -g write $_led_pin 1 s leep $_action_time elif [ $_ret -eq 0 ] then gpio -g write $_led_pin 0 fi s leep 0.1 done
[ end pir_wiringpi.sh ]
這段代碼大約是使用了相同RPi.GPIO庫的Python3腳本長度的一半,但是更清晰。
您可能會對腳本剛開始的“陷阱”感到困惑—它只是一個shell信號處理程序。如果按下CTRL+C退出正在運行的程序,GPIO狀態將會被清除。
除此之外,該腳本都用于執行相關程序,檢查PIR引腳的讀數是0(0V)還是1(3V3)。如果讀數為0,則沒有任何反應;如果讀數為1,則會在5秒內執行一些新的動作。
這個新的動作究竟是什么完全取決于您!
如果您沒什么想法,可以考慮一下我去年萬圣節想到的反向門鈴。用PIR代替按鈕,用室外擴音器代替室內門鈴(我有一個36W的擴音器,這很棒!)。那么這個裝置什么時候可以派上用場呢?
只是在萬圣節嗎?可以通過拒絕給別人家的孩子糖果來對抗兒童糖尿病!做一個新穎的慈善家!
Lasse Efrayim Jespersen
Lasse出生于以色列,后移居到緯度較冷的地區。出于個人天然的興趣愛好,他一步步走近了直接的Perl、高效的C/C++、以及優雅的MicroPython。他非常喜歡用ESP8266/ESP32/Raspberry Pi和Arduino來構建機器。
審核編輯黃宇
-
檢測
+關注
關注
5文章
4492瀏覽量
91513 -
Raspberry Pi
+關注
關注
2文章
559瀏覽量
22284
發布評論請先 登錄
相關推薦
評論