這篇文章來源于DevicePlus.com英語網(wǎng)站的翻譯稿。紅外線是一種沒有特殊設(shè)備的輔助就無法看到的光線,但是我們可以通過熱量感受到它的存在。這種光線被稱為“紅外線”,是因?yàn)樗牟ㄩL超出了可見光譜中的紅色光線邊界。
這引起了設(shè)備制造商的興趣,有一部分原因是人類、動物和物體會一直輻射紅外線。
雖然這聽起來很奇怪,但是其實(shí)您應(yīng)該已經(jīng)對某些類似的東西很熟悉了:火,溫度非常高,會發(fā)出熱量和可見光。
雖然火可以達(dá)到足夠高的溫度來發(fā)出可見光,但是我們的身體不會,而且我們所輻射的光—紅外線—人眼是無法看到的。
如果Raspberry Pi可以利用紅外線來查看是否有人出現(xiàn),會不會有人覺得很便利呢?
通過使用非常便宜、可用、耐用、可靠和經(jīng)濟(jì)的組件,我們可以做到這一點(diǎn)!
這種設(shè)備叫“被動紅外運(yùn)動傳感器”,通常稱為“被動紅外傳感器”或者簡稱“PIR傳感器”。
PIR運(yùn)動傳感器是如何工作的
PIR運(yùn)動傳感器由一對熱釋電傳感器上的透鏡組成:一種晶體材料,當(dāng)它接收到紅外光時會產(chǎn)生電壓。
但是任何含有一定熱量的物體都會輻射出一些紅外線。這意味著單個熱釋電傳感器會一直產(chǎn)生電壓,即使視野中的所有物體都是完全靜止的。
那么如何將它變成一個運(yùn)動傳感器呢?這很簡單,但是很有技巧性。將兩個熱釋電傳感器進(jìn)行連接,這種連接使得來自環(huán)境紅外線的信號可以相互抵消。
當(dāng)足夠大且具有一定溫度的物體在鏡頭前移動時,兩個信號將會停止相互抵消,傳感器會報告有物體在移動。
PIR運(yùn)動傳感器可能會產(chǎn)生誤報
當(dāng)您將PIR運(yùn)動傳感器連接到電源時,它需要30秒到60秒才能穩(wěn)定下來。在還沒有穩(wěn)定的時候就運(yùn)行可能會引發(fā)誤報,這在某些電路中會很讓人頭疼。在Raspberry Pi項(xiàng)目中,很容易編寫出軟件來讓它在啟動后等待片刻再運(yùn)行。
更大的問題是由動物、昆蟲甚至陣風(fēng)所觸發(fā)的傳感器響應(yīng)。
您通常可以將組件校準(zhǔn)到更低的敏感度,這樣可以阻止您的小貓或者小狗觸發(fā)警報。而對于在傳感器前飛行的昆蟲來說,這種調(diào)整的作用不大。
但是,不要把這些誤報看作是一個破壞者,而是想想如何聰明地處理它們。
在Python中處理PIR運(yùn)動傳感器
從可視化編程工具(如Scratch down)到“close-to-the-metal(能夠以編程方式管理操作系統(tǒng)內(nèi)存)”的編程語言(例如C),有很多方法可以將PIR運(yùn)動傳感器和Raspberry Pi進(jìn)行連接。
在這里,我們將使用Python 和GPIO Zero庫,這些庫已經(jīng)幫我們整理好了大部分的細(xì)節(jié)內(nèi)容。
如果您從來沒有寫過Python代碼,可以嘗試學(xué)習(xí)來自“Automate the Boring Stuff With Python(用Python將枯燥的工作自動化)”的一些教程。如果您不打算了解這些內(nèi)容,也可以直接使用下面的代碼,如果您能理解下文代碼中的內(nèi)容,將會學(xué)到更多的知識。
本文假設(shè)您對GPIO 引腳有了基本的了解。如果它對您來說是全新的知識,請查看過去的指南。下面的圖表會提醒您有哪些相關(guān)基礎(chǔ)知識。
將PIR運(yùn)動傳感器連接到Raspberry Pi
為了開始構(gòu)建您的Raspberry Pi 運(yùn)動傳感器,您將需要:
一個帶電源的Raspberry Pi以及一個安裝了Raspbian的SD卡 | |
一個面包板 | |
一個GPIO 擴(kuò)展板(可選,但是推薦使用) | |
一個PIR 運(yùn)動傳感器 (我使用的是XC-4444) |
您還需要一些可以讓您輸入代碼的設(shè)備,例如USB鍵盤或者SSH連接。
將組件連接到面包板
從背面看這臺XC-4444,可以看到引腳在底部,這些引腳為:
? 左邊用于5伏電源
? 中間用于數(shù)字輸出
? 右邊用于接地
雖然PIR運(yùn)動傳感器往往大同小異,但是不同型號上的引腳可能順序會有所不同。如果您不確定的話,請查看組件規(guī)格。
將Raspberry Pi上的5伏引腳連接到正電源軌,然后將接地引腳連接到負(fù)電源軌。
然后,讓鏡頭背對您,將運(yùn)動傳感器的電源引腳連接到正電源軌,將接地引腳連接到負(fù)電源軌,并將數(shù)字輸出引腳連接到面包板中間的某處。
最后,將該面包板行連接到GPIO引腳,我使用的是引腳13。
將其與GPIO Zero接合
現(xiàn)在是時候編寫一個快速腳本了。啟用命令提示符,并通過輸入以下內(nèi)容打開文本編輯器:
nano intruderAlarm.py
GPIO Zero已經(jīng)為我們的運(yùn)動傳感器創(chuàng)建了一個類,所以我們直接導(dǎo)入這個類,并導(dǎo)入來自time模塊的sleep函數(shù)。
from time import sleep
from gpiozero import MotionSensor
現(xiàn)在我們編寫一個函數(shù),功能為當(dāng)傳感器檢測到運(yùn)動物體時將消息打印到屏幕上。
def detectIntruders():
pir.wait_for_motion()
print(‘Intruder Alert!’)
sleep(5)
sleep指令表示打印完消息后將等待5秒鐘。如果沒有該指令,我們的腳本將在脈沖持續(xù)時間內(nèi)用消息填滿整個屏幕,這樣的話就很難了解運(yùn)行狀況了。
如果我們不對MotionSensor對象進(jìn)行初始化,那么detectIntruders()函數(shù)將無法工作,所以讓我們將其設(shè)置為引腳13:
pir = MotionSensor(13)
您能相信到此我們已經(jīng)快要完成了嗎?現(xiàn)在我們只需要一個循環(huán)程序來運(yùn)行我們的函數(shù)就可以完成了。
while True:
detectIntruders()
按下Ctrl+O來保存腳本,然后按下Ctrl+X退出文本編輯器。想要運(yùn)行程序,請輸入:
python3 intruderAlarm.py
現(xiàn)在起身并走過傳感器,您看到打印的信息了么?
如果不起作用,請檢查所有引腳是否正確連接。PIR運(yùn)動傳感器的接地和電源引腳很容易混淆。
如果想要停止腳本的運(yùn)行,請按下Ctrl+C。
校準(zhǔn)PIR運(yùn)動傳感器
這款XC-4444有兩個關(guān)鍵指標(biāo):一個是脈沖長度,標(biāo)記為Tx,另一個是靈敏度,標(biāo)記為Sx。
在某些項(xiàng)目中,調(diào)整脈沖長度可能會很有用,但是我傾向于保持它的大小,通過編寫代碼來處理Raspberry Pi對信號的響應(yīng)工作。
調(diào)整靈敏度會更有趣。您可以通過調(diào)整靈敏度來決定傳感器需要檢測出什么程度的運(yùn)動才能發(fā)出信號。
一些PIR運(yùn)動傳感器具有更多的控件。對于一些響應(yīng)特征,比如只要檢測到運(yùn)動,脈沖就一直維持,或者模塊是否發(fā)處重復(fù)的脈沖,這些傳感器會有所不同。
PIR運(yùn)動傳感器有多種用途
我們剛剛探討的工作原理不僅僅只適用于警報。
它們還適用于各種家庭中的自動化項(xiàng)目:照明、溫度控制、開門,甚至還可以在您下班回家時為您播放一些專業(yè)的摔跤風(fēng)格的入口音樂。
如果您想要在某人出現(xiàn)的時候獲悉消息,這將會是您的得力助手。
評論