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