概述
PIR傳感器使您能夠感知運動,幾乎總是用于檢測人類是否已移入或移出傳感器范圍。它們體積小,價格便宜,功耗低,易于使用且不會磨損。因此,它們通常在家庭或企業使用的電器和小工具中找到。它們通常被稱為PIR,“被動紅外”,“熱電”或“ IR運動”傳感器。
PIR基本上是由熱釋電傳感器制成的(您可以在下面看到,這是圓形金屬罐,中心帶有矩形晶體) ),它可以檢測紅外輻射的水平。一切都散發出一些低水平的輻射,而東西越熱,發射的輻射就越多。實際上,運動檢測器中的傳感器分為兩半。這樣做的原因是我們希望檢測運動(變化)而不是平均IR水平。將兩半連接起來,以便彼此抵消。如果有一半的紅外輻射比另一半多,則輸出將擺動得高或低。
與熱釋電傳感器一起的是一堆支持電路,電阻器和電容器。似乎大多數小型愛好者傳感器都使用BISS0001(“微功率PIR運動檢測器IC”),這無疑是非常便宜的芯片。該芯片接收傳感器的輸出,并對其進行一些小的處理,以從模擬傳感器發出數字輸出脈沖。
我們的舊式PIR如下所示:
我們的新PIR具有更多可調設置,并且在3針中安裝了接頭地面/外部/電源墊
對于許多需要檢測人員何時離開或進入該區域或接近該區域的基本項目或產品,PIR傳感器非常有用。它們功耗低,成本低,堅固耐用,鏡頭范圍廣且易于接口。請注意,PIR不會告訴您周圍有多少人或他們與傳感器有多近,鏡頭通常固定在一定的范圍和距離(盡管可以在某處砍死),有時還會被地毯掀起。實驗是關鍵!
一些基本統計信息
這些統計信息用于Adafruit商店中的PIR傳感器,該傳感器非常類似于Parallax。盡管幾乎所有PIR的工作原理相同,但幾乎所有PIR的規格都會略有不同。如果有數據表,您將要參考它
尺寸:矩形
價格: 10.00美元在Adafruit商店
輸出:觸發時(檢測到運動)數字脈沖為高電平(3V),閑置時(未檢測到運動)為數字低。脈沖長度由PCB上的電阻和電容器確定,并且因傳感器而異。
靈敏度范圍:最多20英尺(6米)110°x 70°的檢測范圍
電源:大多數模塊的5V-12V輸入電壓(它們具有3.3V穩壓器),但如果穩壓器規格不同,則5V是理想選擇
BIS0001數據表(使用的解碼器芯片)
RE200B數據表(最可能使用的PIR感應元件)
NL11NH數據表(使用了等效透鏡)
視差數據表(傳感器版本)
更多鏈接!
有關GLOLAB PIR傳感器的精彩網頁\\
PIR的工作方式
PIR傳感器比本教程中介紹的許多其他傳感器(例如光電管,FSR和傾斜開關)要復雜得多,因為其中有多個變量會影響傳感器的輸入和輸出。為了開始解釋基本傳感器的工作原理,我們將使用此漂亮的圖
PIR傳感器本身具有兩個插槽,每個插槽均由對IR敏感的特殊材料制成。這里使用的鏡頭并沒有做太多事情,因此我們看到兩個插槽可以“看到”某個距離(基本上是傳感器的靈敏度)。當傳感器閑置時,兩個插槽都檢測到相同量的IR,即從房間或墻壁或室外輻射的環境量。當像人或動物這樣的溫暖物體經過時,它首先會攔截PIR傳感器的一半,這會導致兩半之間的“正向差異”變化。當溫暖的身體離開感應區域時,情況會發生相反的變化,從而使傳感器產生負的差分變化。這些變化脈沖就是被檢測到的。
PIR傳感器 IR傳感器本身被封裝在一個密封的金屬罐中,以提高抗噪聲/溫度/濕度的能力。有一個由紅外透射材料制成的窗口(通常是涂覆硅,因為這樣很容易獲得),可以保護傳感元件。窗口后面是兩個平衡傳感器。
Murata數據表的左圖
RE200B數據表中的圖像
您可以在圖表上方看到顯示元素窗口,兩種傳感材料
RE200B數據表中的圖像
此圖顯示了內部原理圖。實際上,內部存在一個JFET(一種晶體管),它的噪聲非常低,并將傳感器的極高阻抗緩沖到低成本芯片(如BIS0001)可以感知的東西中。
鏡頭 PIR傳感器相當通用,并且在很大程度上有所不同僅在價格和敏感性上。大多數真正的魔術都發生在光學器件上。這是一個非常好的制造想法:PIR傳感器和電路是固定的,花費幾美元。鏡頭僅需幾美分,并且可以很容易地改變寬度,范圍和感應模式。
在上圖中,鏡頭只是一塊塑料,但這意味著檢測區域只有兩個矩形。通常,我們希望檢測區域更大。為此,我們使用一個簡單的鏡頭(例如在相機中找到的鏡頭):它們將大面積(例如風景)凝結成一個很小的鏡頭(在膠片或CCD傳感器上)。出于很快就會明白的原因,我們希望將PIR透鏡做得又小又薄,并且可以用便宜的塑料成型,盡管它可能會增加變形。因此,傳感器實際上是菲涅耳透鏡:
來自傳感器雜志的圖像
菲涅耳透鏡會聚光,從而為傳感器提供更大的紅外范圍。
來自BHlens.com
來自賽普拉斯應用筆記2105的圖像
確定,所以現在我們可以使用的范圍更大。但是,請記住,我們實際上有兩個傳感器,更重要的是,我們不希望有兩個非常大的感應區域矩形,而是要分散多個小區域。因此,我們要做的是將鏡頭分成多個部分,每個部分都是菲涅耳透鏡。
在這里您可以看到多個構面部分
此微距照片顯示了每個小面上不同的菲涅耳透鏡!
不同的刻面和子透鏡創建了一系列相互交錯的檢測區域。這就是為什么上面各面的鏡頭中心“不一致”的原因-每隔一個指向PIR感應元件的另一半
來自NL11NH數據表的圖像
這里是另一幅圖像,更具定性,但不定量。 (請注意,Adafruit商店中的傳感器是110°而不是90°)
來自IR-TEC的圖像
連接到PIR
大多數PIR模塊的側面或底部都有3針連接。模塊之間的引腳排列可能有所不同,因此請仔細檢查引腳排列!通常在連接旁邊就進行絲網印刷(至少是我們的!)。一個引腳將接地,另一個引腳將是信號,最后一個引腳將是電源。電源通常為3-5VDC輸入,但可能高達12V。有時,較大的模塊沒有直接輸出,而是只操作一個繼電器,在這種情況下,有接地,電源和兩個開關連接。
某些繼電器的輸出可能是“集電極開路”-這意味著它需要一個上拉電阻。如果您沒有獲得可變的輸出,請確保嘗試在信號和電源引腳之間連接一個10K上拉電阻。
使用PIR傳感器進行原型制作的一種簡單方法是將其連接到面包板上,因為有連接端口間距為0.1英寸。一些PIR上已經帶有插頭,adafruit的插頭上有一個直的3針插頭,用于連接電纜
對于我們的PIR,紅色電纜是+電壓電源,黑色電纜是-接地電源,黃色是電纜
測試PIR
現在,當PIR檢測到運動時,輸出引腳將“高”到3.3V并點亮LED!
一旦連接好面包板,插入電池并等待30-60秒,使PIR達到“穩定”狀態。在此期間,LED可能會閃爍一點。等到LED熄滅后,再揮動手等在其前面移動,以查看LED點亮!
重新觸發您的PIR可能有幾個選項。首先,我們將探討“重新觸發”選項。
一旦LED閃爍,請看一下PIR傳感器的背面,并確保將跳線置于 L 位置,如下所示。
現在再次設置測試板。您可能會注意到,當按上述方式連接PIR傳感器時,LED在其前面移動時并不會保持點亮狀態,而是實際上每隔一秒鐘左右就會打開和關閉一次。這就是所謂的“非觸發”。
現在更改跳線,使其位于 H 位置。如果設置測試,您會發現現在LED 會一直停留在移動的整個過程中。稱為“重新觸發”。
(上面的圖來自BISS0001數據表,它們有點爛)
對于大多數應用程序,“重新觸發”(如下所示處于H位置的跳線)模式要好一些。
如果您需要將傳感器連接到邊緣觸發的物體上,然后將其設置為“非觸發”(跳線處于L位置)。
更改靈敏度
Adafruit PIR的背面有一個調整電位器,用于調節靈敏度。如果您的PIR太敏感或不夠敏感,則可以調整此值-順時針使其更敏感。
脈沖時間和超時長度。PIR傳感器有兩個“超時”。其中之一是“ Tx ”超時:檢測到移動后LED點亮的時間-由于有電位計,因此在Adafruit PIR上很容易進行調整。
第二個是“ Ti ”超時,該超時是指在不移動的情況下保證關閉LED的時間。這不是容易更改的,但是如果您方便使用烙鐵,這是可以的。
首先,讓我們再次看一下BISS數據表
在Adafruit PIR傳感器上,有一個微調電位器標有 TIME。 這是一個1兆歐可調電阻,已添加到10K串聯電阻中。并且 C6 為0.01uF,因此
Tx = 24576 x(10K + Rtime)x 0.01uF
如果Rtime電位計為完全逆時針旋轉(至0歐姆),然后
Tx = 24576 x(10K)x 0.01uF = 2.5 秒(大約)
如果Rtime電位計一直沿順時針方向一直調至1兆歐,然后
Tx = 24576 x(1010K)x 0.01uF = 250 秒(大約)
如果RTime在中間,大約需要120秒(兩分鐘),因此您可以根據需要進行調整。例如,如果您想讓某人運動至少打開風扇1分鐘,則將Rtime電位計設置為大約1/4。
用于較舊/其他PIR傳感器
如果其他地方的PIR傳感器沒有電位器調節,則可以通過以下方式找出調節電阻:
確定R10和R9并不難。不幸的是,這個PIR傳感器貼錯了標簽(看起來好像他們交換了R9 R17)。您可以通過查看BISS001數據表并找出它們是什么引腳來跟蹤這些引腳-R10連接到引腳3,R9連接到引腳7。確定電容的難度稍大一些,但是您可以根據時序對其進行“反向工程”傳感器并求解!
例如:
Tx = 24576 * R10 * C6 =?1.2秒
R10 = 4.7K和 C6 = 10nF
類似,
Ti = 24 * R9 * C7 =?1.2秒
R9 = 470K和 C7 = 0.1uF
您可以通過交換不同的電阻器或電容器來更改時序。有關此內容的不錯的教程,請參見Keith的PIR駭客頁面。
使用帶Arduino的PIR
讀取PIR傳感器
將PIR傳感器連接到微控制器非常簡單。 PIR充當數字輸出,可以是高電壓或低電壓,因此您需要做的就是通過監聽Arduino上的數字輸入來監聽引腳變為高電平(檢測到)或低電平翻轉(未檢測到)
可能需要重新觸發,因此請確保將跳線置于 H 位置!
為PIR供電5V,并將地線連接到地面。然后將輸出連接到數字引腳。在此示例中,我們將使用引腳2。
代碼非常簡單,基本上只是跟蹤引腳2的輸入是高還是低。它還跟蹤銷的 狀態 ,以便在運動開始和停止時打印出一條消息。
下載:文件
復制代碼
/*
* PIR sensor tester
*/
int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println(“Motion detected!”);
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println(“Motion ended!”);
// We only want to print on the output change, not state
pirState = LOW;
}
}
} /*
* PIR sensor tester
*/
int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
}
void loop(){
val = digitalRead(inputPin); // read input value
if (val == HIGH) { // check if the input is HIGH
digitalWrite(ledPin, HIGH); // turn LED ON
if (pirState == LOW) {
// we have just turned on
Serial.println(“Motion detected!”);
// We only want to print on the output change, not state
pirState = HIGH;
}
} else {
digitalWrite(ledPin, LOW); // turn LED OFF
if (pirState == HIGH){
// we have just turned of
Serial.println(“Motion ended!”);
// We only want to print on the output change, not state
pirState = LOW;
}
}
}
別忘了有時候您不需要微控制器。 PIR傳感器可以連接到繼電器(可能帶有晶體管緩沖器),而無需使用微型傳感器!
CircuitPython代碼
在帶有簡單數字輸入的CircuitPython中使用PIR傳感器很容易。 PIR傳感器的外觀和行為有點像按鈕或開關,即它只有高或低邏輯級別,因此您不需要任何特殊的庫或其他代碼即可從Python讀取一個。繼續之前,先熟悉CircuitPython數字輸入和輸出!
首先請確保您的PIR傳感器已連接到板上,如上一頁所示。將PIR傳感器連接到Arduino和CircuitPython板沒有什么區別。您必須將電源,接地和傳感器輸出連接到板上。傳感器輸出應連接到板上的任何數字I/O線。在此示例中,我們將在TrinketM0上使用引腳D2。
Fritzing Source
下一步連接到開發板的串行REPL,因此您位于CircuitPython的》》》 提示符下。
運行以下代碼以導入 board 和 digitalio 模塊,這些模塊可讓您讀取數字輸入:
下載:文件
復制代碼
import board
import digitalio import board
import digitalio
然后為PIR創建簡單的數字輸入。請記住,使用正確的板針來將傳感器連接到板上。此示例在飾條M0上使用引腳D2:
下載:文件
復制代碼
pir = digitalio.DigitalInOut(board.D2)
pir.direction = digitalio.Direction.INPUT pir = digitalio.DigitalInOut(board.D2)
pir.direction = digitalio.Direction.INPUT
此時,您可以通過讀取value屬性來讀取傳感器的狀態。如果該值處于低邏輯電平或為False,則傳感器看不到任何運動。如果它處于邏輯高電平或True,則傳感器正在檢測運動!
請注意,您可能希望傳感器的跳線處于H位置,以進行重新觸發模式,如上一頁所述。
例如,傳感器前沒有移動,您可能會看到:
下載:文件
復制代碼
pir.value pir.value
然后將手在傳感器前面揮動,并在揮動它時再次運行相同的命令。注意,您得到的結果是真實的!
下載:文件
復制代碼
pir.value pir.value
這是在CircuitPython中使用PIR傳感器的全部內容!
這是一個完整的示例,就像上一頁一樣,從PIR傳感器開始的移動將打開板上的LED并打印一條消息。這是上一頁Arduino示例到CircuitPython的直接端口。嘗試將其另存為板上的 main.py 并連接到串行終端,以查看運行時的輸出! (請確保將板針號更改為傳感器和LED布線!)
下載:文件
復制代碼
import board
import digitalio
LED_PIN = board.D13 # Pin number for the board‘s built in LED.
PIR_PIN = board.D2 # Pin number connected to PIR sensor output wire.
# Setup digital input for PIR sensor:
pir = digitalio.DigitalInOut(PIR_PIN)
pir.direction = digitalio.Direction.INPUT
# Setup digital output for LED:
led = digitalio.DigitalInOut(LED_PIN)
led.direction = digitalio.Direction.OUTPUT
# Main loop that will run forever:
old_value = pir.value
while True:
pir_value = pir.value
if pir_value:
# PIR is detecting movement! Turn on LED.
led.value = True
# Check if this is the first time movement was
# detected and print a message!
if not old_value:
print(’Motion detected!‘)
else:
# PIR is not detecting movement. Turn off LED.
led.value = False
# Again check if this is the first time movement
# stopped and print a message.
if old_value:
print(’Motion ended!‘)
old_value = pir_value import board
import digitalio
LED_PIN = board.D13 # Pin number for the board’s built in LED.
PIR_PIN = board.D2 # Pin number connected to PIR sensor output wire.
# Setup digital input for PIR sensor:
pir = digitalio.DigitalInOut(PIR_PIN)
pir.direction = digitalio.Direction.INPUT
# Setup digital output for LED:
led = digitalio.DigitalInOut(LED_PIN)
led.direction = digitalio.Direction.OUTPUT
# Main loop that will run forever:
old_value = pir.value
while True:
pir_value = pir.value
if pir_value:
# PIR is detecting movement! Turn on LED.
led.value = True
# Check if this is the first time movement was
# detected and print a message!
if not old_value:
print(‘Motion detected!’)
else:
# PIR is not detecting movement. Turn off LED.
led.value = False
# Again check if this is the first time movement
# stopped and print a message.
if old_value:
print(‘Motion ended!’)
old_value = pir_value
示例項目
一個簡單的房間迎賓員,當被入侵的airwick清新劑單元中的PIR觸發時,播放超級馬里奧兄弟主題音樂。/em》
雨傘
使用PIR傳感器(內置在Start Trek面板中!)的自制安全系統
PIR傳感器+ Arduino +伺服=自動貓門!
Lucky Larry的2-PIR運動跟蹤器
基于PIR的遠程攝像機觸發器(也是Lucky Larry的作品)
使用PIR傳感器“原始”跟蹤運動的有趣技巧。
責任編輯:wv
-
運動傳感器
+關注
關注
9文章
165瀏覽量
30789
發布評論請先 登錄
相關推薦
評論