微控制器(MCU)在現(xiàn)實(shí)世界的另一個(gè)用途是在報(bào)警系統(tǒng)中。從早上叫你起床的鬧鐘到火災(zāi)警報(bào)、防盜警報(bào),甚至是核電站出現(xiàn)問(wèn)題時(shí)發(fā)出的警報(bào),微控制器幫助保護(hù)我們所有人的安全。
本篇將帶你構(gòu)建自己的防盜報(bào)警器,實(shí)現(xiàn)一個(gè)特殊的運(yùn)動(dòng)傳感器,不斷掃描任何人進(jìn)入房間的事件。無(wú)論你是在保護(hù)銀行金庫(kù),還是只是想防止兄弟姐妹們出現(xiàn)在你的房間里,防盜報(bào)警器肯定會(huì)派上用場(chǎng)。
這個(gè)項(xiàng)目需要用到:
樹莓派 Pico
面包板
任何顏色的 LED 燈
一個(gè) 330Ω 電阻
有源蜂鳴器
一個(gè)或多個(gè) HC-SR501 被動(dòng)紅外(PIR)傳感器
若干公對(duì)公、公對(duì)母杜邦線
microUSB 數(shù)據(jù)線
將 Pico 連接到樹莓派或其他運(yùn)行 Thonny MicroPython IDE 的計(jì)算機(jī)。
HC-SR501 PIR 傳感器
在前面的系列教程中,你已經(jīng)使用了按鈕開關(guān)形式的簡(jiǎn)單輸入組件。這一次,你將使用被稱為被動(dòng)紅外傳感器(PIR)的傳感器。有數(shù)百種不同的 PIR 傳感器可用,HC-SR501 低成本、高性能,并與 Pico 完美適配。
被動(dòng)式紅外傳感器被設(shè)計(jì)用來(lái)檢測(cè)運(yùn)動(dòng),特別是人和其他生物的運(yùn)動(dòng)。它的工作原理有點(diǎn)像照相機(jī),但它不是捕捉可見光,而是尋找以紅外輻射的形式從活體發(fā)出的熱量。它被稱為被動(dòng)紅外傳感器,而不是主動(dòng)紅外傳感器,因?yàn)榫拖裣鄼C(jī)傳感器一樣,它自己不發(fā)出任何紅外信號(hào)。
實(shí)際的傳感器被埋在一個(gè)塑料鏡頭下,通常形狀像半個(gè)球。鏡頭在技術(shù)上并不是傳感器工作所必需的,但可以供更寬的視野(FOV),如果沒有透鏡,PIR 傳感器只能看到傳感器正前方一個(gè)非常窄的角度的運(yùn)動(dòng)。這種鏡頭可以從更寬的角度吸收紅外線,這意味著一個(gè) PIR 傳感器就可以觀察到房間里大部分的移動(dòng)情況。
在商業(yè)防盜報(bào)警系統(tǒng)中,PIR 傳感器只是使用的傳感器之一。其它的傳感器還包括:能告知窗 戶何時(shí)被打碎的碎玻璃傳感器、能監(jiān)測(cè)門是開著還是關(guān)著的磁傳感器、能捕捉竊賊腳步聲的聲音傳感器以及能告知門鎖是否被撬開的振動(dòng)傳感器。
然而,一個(gè)簡(jiǎn)單的 PIR 傳感器對(duì)于低安全級(jí)別的地方就足夠了。
現(xiàn)在拿起你的 HC-SR501 傳感器看一看。首先要注意的是,它有自己的電路板。除了傳感器和鏡頭,還有其他幾個(gè)組件:驅(qū)動(dòng)傳感器的黑色芯片、一些電容和微小的貼片電阻。你也可以看到幾個(gè)電位器,你可以用螺絲刀擰動(dòng)它們,來(lái)調(diào)整傳感器的靈敏度,以及當(dāng)觸發(fā)時(shí)它保持激活的時(shí)間。
你還會(huì)看到三個(gè)公排針,和 Pico 底部的排針一模一樣。但是,你不能直接將它們插入面包板,因?yàn)槊姘迳系慕M件會(huì)礙事。取三根公對(duì)母杜邦線,將母線端插入 HC-SR501 的針腳上。接下來(lái),拿起公的一端,把它們連接到面包板和 Pico 上。在將傳感器連接到 Pico 上時(shí),需要確認(rèn)傳感器的文檔。不同公司生產(chǎn)的 HC-SR501 傳感器,它們引腳的順序會(huì)略有不同。
這里的傳感器,引腳順序?yàn)?GND 在底部,信號(hào)或觸發(fā)引腳在中間,電源引腳在右邊。
傳感器的信號(hào)引腳連接到 Pico 的 GP28 引腳。GND 和 VCC 分別連接 Pico 的 GND 和 5V 引腳。
警報(bào)器代碼
對(duì) Pico 進(jìn)行編程才能識(shí)別傳感器。這和讀取按鈕的操作類似。幾乎可以使用相同的代碼:
import machine sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN)
就像上一篇教程中做的反應(yīng)游戲一樣,防盜報(bào)警器的輸入應(yīng)該作為一個(gè)中斷,停止程序正在做的任何事情,并在傳感器被觸發(fā)時(shí)做出反應(yīng)。和前面一樣,首先定義一個(gè)回調(diào)函數(shù)來(lái)處理中斷:
def pir_handler(pin): print("ALARM! Motion detected!")
最后,設(shè)置中斷本身:
sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)
單擊 Run 按鈕,并將程序保存到 Pico 中,命名為 Burglar_Alarm.py。
在 PIR 傳感器前面揮一揮你的手,你會(huì)看到一條消息出現(xiàn)在 Shell 區(qū)域,確認(rèn)傳感器檢測(cè)到了手的移動(dòng)。如果你一直揮動(dòng)你的手,信息將持續(xù)輸出,但是在每條消息之間有一個(gè)延遲,
這種延遲和內(nèi)置在 HC-SR501 上的電位器設(shè)置相關(guān)。你可以插入一個(gè)螺絲刀,把它朝一個(gè) 方向轉(zhuǎn)動(dòng)來(lái)減少延遲,朝另一個(gè)方向轉(zhuǎn)動(dòng)來(lái)增加延遲。請(qǐng)參考傳感器的文檔,以確定哪個(gè)電位器是控制延遲的。
組裝輸入和輸出之后的代碼
真正的防盜警報(bào)器有燈和警報(bào)器來(lái)醒周圍的人有問(wèn)題了,下面我們就來(lái)添加它們。如圖所示添加 LED 和有源蜂鳴器。其中,LED 正極與 Pico 的 GP15 引腳相連,蜂鳴器的正極與 Pico 的 GP14 相連。GND 均與 Pico 的 GND 引腳相連。
加入 LED 和蜂鳴器之后的完整代碼如下:
import machine import utime sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN) led = machine.Pin(15, machine.Pin.OUT) buzzer = machine.Pin(14, machine.Pin.OUT) def pir_handler(pin): print("ALARM! Motion detected!") for i in range(50): led.toggle() buzzer.toggle() utime.sleep_ms(100) sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler) while True: led.toggle() utime.sleep(5)
點(diǎn)擊 Run 按鈕,然后在 PIR 傳感器前再次揮舞你的手,這時(shí)不僅會(huì)有消息提示出現(xiàn)在 Shell 區(qū)域,LED 將開始快速閃爍 50 次并伴隨著警報(bào)器嗶聲(間隔 100 毫秒)。
為了讓防盜報(bào)警器更具震懾力,它在沒有察覺到任何動(dòng)靜的情況下也會(huì)緩慢閃爍(每 5 秒一次),以此 警告潛在的入侵者,你的房間已經(jīng)被人監(jiān)視了。
祝賀你,這應(yīng)該足以嚇入侵者了!
如果你使用的是無(wú)源蜂鳴器,嘗試這個(gè)版本的程序代替:
import machine import utime sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN) led = machine.Pin(15, machine.Pin.OUT) buzzer = machine.Pin(14, machine.Pin.OUT) def pir_handler(pin): print("ALARM! Motion detected!") for i in range(50): led.toggle() for j in range(25): buzzer.toggle() utime.sleep_ms(3) sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler) while True: led.toggle() utime.sleep(5)
在蜂鳴器的使用上,上面的代碼是通過(guò)快速切換蜂鳴器引腳的電壓來(lái)模擬有源蜂鳴器振蕩器的效果。
嘗試將延遲時(shí)間從 3 毫秒改為 4 毫秒,你會(huì)發(fā)現(xiàn)蜂鳴器的聲音音調(diào)更低。改變延遲會(huì)改變蜂鳴器振蕩的頻率:延遲越長(zhǎng),蜂鳴器振蕩的頻率就越低,聲音的音調(diào)就越低;延遲越短,它的振動(dòng)頻率 就越高,聲音的音調(diào)也就越高。
擴(kuò)展警報(bào)器
添加多個(gè) HC-SR501 傳感器可以覆蓋更多區(qū)域。我們以兩個(gè)為例,將新增的傳感器信號(hào)腳連接到 Pico 上的 GP22 引腳,如圖所示。
在設(shè)置第一個(gè)傳感器的地方添加一行新代碼:
sensor_pir2 = machine.Pin(22, machine.Pin.IN, machine.Pin.PULL_DOWN)
然后創(chuàng)建一個(gè)新的中斷,同樣在第一個(gè)中斷的下面:
sensor_pir2.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler)
請(qǐng)記住,一個(gè)處理程序可以有多個(gè)中斷,因此不需要更改終端處理程序的部分。
點(diǎn)擊 Run 按鈕,并在第一個(gè) PIR 傳感器上揮一揮你的手,你會(huì)看到警報(bào)信息,LED 閃光,蜂鳴器的聲音和之前一樣。等他們完成,然后在第二個(gè) PIR 傳感器上揮揮手,你會(huì)看到你的防盜警報(bào)以完全相同的方式響應(yīng)。
為了使鬧鐘變得非常智能,你可以根據(jù)哪個(gè)引腳負(fù)責(zé)中斷來(lái)自定義消息,它的工作方式與你之前編寫的雙人反應(yīng)游戲中完全相同。
回到你的中斷處理程序并修改它:
def pir_handler(pin): if pin is sensor_pir: print("ALARM! Motion detected in bedroom!") elif pin is sensor_pir2: print("ALARM! Motion detected in living room!") for i in range(50): led.toggle() buzzer.toggle() utime.sleep_ms(100)
就像在系列教程「反應(yīng)游戲」項(xiàng)目中,這段代碼讓中斷報(bào)告它被哪個(gè)引腳觸發(fā)。最終完整的代碼如下:
import machine import utime sensor_pir = machine.Pin(28, machine.Pin.IN, machine.Pin.PULL_DOWN) sensor_pir2 = machine.Pin(22, machine.Pin.IN, machine.Pin.PULL_DOWN) led = machine.Pin(15, machine.Pin.OUT) buzzer = machine.Pin(14, machine.Pin.OUT) def pir_handler(pin): if pin is sensor_pir: print("ALARM! Motion detected in bedroom!") elif pin is sensor_pir2: print("ALARM! Motion detected in living room!") for i in range(50): led.toggle() buzzer.toggle() utime.sleep_ms(100) sensor_pir.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler) sensor_pir2.irq(trigger=machine.Pin.IRQ_RISING, handler=pir_handler) while True: led.toggle() utime.sleep(5)
祝賀你!你現(xiàn)在學(xué)會(huì)如何構(gòu)建一個(gè)模塊化的防盜報(bào)警器來(lái)覆蓋你需要的所有監(jiān)測(cè)區(qū)域了!
-
微控制器
+關(guān)注
關(guān)注
48文章
7565瀏覽量
151572 -
傳感器
+關(guān)注
關(guān)注
2551文章
51189瀏覽量
754356 -
mcu
+關(guān)注
關(guān)注
146文章
17172瀏覽量
351554 -
報(bào)警器
+關(guān)注
關(guān)注
12文章
926瀏覽量
108792 -
樹莓派
+關(guān)注
關(guān)注
117文章
1708瀏覽量
105703
原文標(biāo)題:竊賊報(bào)警器:在樹莓派 Pico 上使用 PIR 傳感器
文章出處:【微信號(hào):趣無(wú)盡,微信公眾號(hào):趣無(wú)盡】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論