樹莓派感測器實作(二):入侵者警報器

樹莓派感測器實作(二):入侵者警報器

本文譯自樹莓派雜誌 112 期(MagPi issue 112),原文標題為 Make an intruder alarm(圖片來源取自雜誌內頁),相關原始程式碼可參考官方程式碼。本篇與原文同樣使用CC 3.0 BY-NC-SA授權,歡迎標註原作者轉載,若有任何不妥與指教敬請告知。

👀 樹莓派初學者看這邊!

想了解入門的教學教材嗎?推薦參考「夜市小霸王尤濬哲老師的網站,一起進入 Raspberry Pi 樹莓派的世界吧!

一、前言

「樹莓派感測器實作」系列我們將探索一些常見的感測器,並製作出可執行的專案。在實作(一)我們製作了火焰與瓦斯洩漏警報系統,這次要使用感測器製作不同的警報器-入侵者警報器。

要偵測附近是否有人有很多可行的方法,例如使用人體紅外線感測器或鏡頭,本次我們將使用雷射光感測器與聲音感測器,當其中一項被觸發時,便會發出視覺與聽覺的警報。

二、所需設備

1. 雷射光感測器 x1

2. 聲音感測器 x1

3. LED 燈 x1

4. 蜂鳴器 x1

5. 麵包板 x1

6. 330Ω 電阻 x1

7. 杜邦線材

三、實作步驟

1. 連接雷射光感測器

回想一下,我們曾經在電影中看過,當秘密特工或是小偷要潛入目的地獲取物品時,不小心觸動了雷射光並且警鈴大作的場景。沒錯!本次我們要實作的正是「入侵者警報器」。

雷射光感測器不斷地發射雷射光,並僅接收相同波長的光束(650 nm),因此它並不會因為其他的可見光而被觸發。當它偵測到光束時,數位腳位發出訊號 1;當光束被中斷時發出訊號 0。

首先關閉 Raspberry Pi 樹莓派的電源,將雷射光感測器連接到開發板如下圖表所示:

樹莓派感測器實作(二):入侵者警報器
圖1. 入侵者警報器接線圖
Raspberry Pi 樹莓派雷射光感測器
3.3 VVCC
GNDGND
IO21DO

2. 定位雷射光感測器

當連接好雷射光感測器後,開啟 Raspberry Pi 樹莓派的電源,若是連接正確將會看到感測器右側亮起紅燈。感測器將會從金屬管中發射雷射光束,因此切記勿直視它!

將光束對準附近的牆壁(大約 1.5 m 的距離),並檢查左側的 LED 是否亮起(指示燈),確認它正在偵測雷射光束。你可能需要透過水平和垂直的傾斜來調整感測器,或者是將其更靠近牆壁。為了完成警報器,我們建議將警報器安裝在離地板很近的地方,如此一來,有人經過便會中斷光束也不會太靠近人們的眼睛。

3. 雷射光測試

首先,我們要撰寫一個 Python 程式「laser_test.py」,去讀取感測器的數位輸出,並在光束中斷時顯示訊息。從電腦桌面的選單中,打開 Thonny IDE 軟體平台開始撰寫程式。

現在就透過手遮蔽來中斷光束,試試看訊息是否有改變吧!

在開始撰寫程式之前,我們選擇使用 GPIO Zero 程式庫,如下所示:

第 1~3 行:在程式碼中,我們使用 Button 方法檢測雷射光感測器的數位訊號,當訊號為 0 時就等同於按下按鈕。如同連接的腳位為 IO 21,因此我們將 laser  物件依照 Button 方法設定為 laser = Button(21)。

第 6~11行:設定一個迴圈 while True: ,當中使用 if…else 來判斷與顯示感測器數位訊號的高低,if laser.value == 0 為光束被中斷 ,Thonny Shell 顯示窗為「Intruder!」;反之則顯示「All clear」。

第 12 行:在顯示設定中我們加入了 end = “\r” ,如此一來每次顯示文字就都會出現在同一行。

現在就執行「laser_test.py」程式碼,並使用您的手遮蔽中斷光束,看看顯示窗的訊息是否會變為「Intruder!」。過程中會發現,當手離感測器比較遠時,效果較為顯著。即使 LED 指示燈只有瞬間熄滅,這樣就足以觸發我們後面要製作的警報。

注意!

雷射光感測器會持續發射雷射光束,使用時切勿將其直射人的頭部,可能會造成眼睛視力的損傷。

4. 加入聲音感測器

我們已經成功讓雷射光感測器運作了,為了要提高防止入侵者的規格,現在就讓我們增加聲音感測器吧!

聲音感測器有類比與數位輸出腳位,我們的警報系統僅需要使用數位輸出的腳位。將聲音感測器連接到 Raspberry Pi 樹莓派如圖1,接線請參照下表:

Raspberry Pi 樹莓派聲音感測器
3.3 VVCC
GNDGND
IO14DO

Raspberry Pi 樹莓派上的3.3 V 與 GND 腳位透過麵包板與雷射光感測器共用。

開啟 Raspberry Pi 樹莓派的電源後會看到感測器左側的電源指示燈亮起。如果製造大的噪音會看到感測器右側的指示燈亮起,這就表示噪音有被偵測到。

5. 聲音測試

現在我們就來建立一個程式「sound_test.py」來測試聲音感測器吧!

第 1~3 行:使用與前面一樣的 Button 方法,將 Raspberry Pi 樹莓派的 GPIO14 指定為 sound  物件 sound = Button(14),來偵測感測器是否有觸發。

第 6~11行:設定一個迴圈 while True: ,當中使用 if…else 來判斷與顯示感測器數位訊號的高低,if sound.value == 1 為偵測到噪音,Thonny Shell 顯示窗為「Intruder!」;反之則顯示「All clear」。

6. 實測聲音感測器

現在就讓我們來測試聲音感測器是否有正確運作吧!

執行「sound_test.py」Python 程式碼,並製造噪音使聲音感測器右側的指示燈亮起,會發現要讓噪音需持續約一秒鐘,訊息會短暫地從「All clear」變成「Intruder!」。

如果測試時有無法觸發的狀況,可以嘗試調整感測器上印有 D 符號的十字旋鈕,以逆時針的方向旋轉,調低可變電阻來增加感測器的靈敏度,但請勿過度旋轉,不然會導致指示燈恆亮。

7. 增加視覺警報

如果前面的感測器與程式碼都已經能夠正常運作了,那麼我們就可以進入到下一個階段囉!

雖然警報器能夠顯示訊息效果已經相當不錯了,但是為了要追求更好的警報器,因此需要增加視覺與聲覺的警示效果。

在上一篇實作(一)中,我們使用了5 mm 的紅色 LED 燈來作為視覺的警示(當然也可以選擇其他尺寸)。一如既往的,為了要避免 LED 燒壞,因此我們還要加入一個電阻去限制電流。

將 LED 的兩隻腳插在麵包板不同行上,並在陰極(短)腳連接一個 330Ω 的電阻在麵包板的負電區,而陽極(彎曲,長)腳連接到 Raspberry Pi 樹莓派 IO16 的腳位,如圖1 所示。

8. 連接蜂鳴器

在聽覺警報的部分,我們使用一個有源蜂鳴器發出聲響。有源蜂鳴器較長的腳為陽極,較短的腳為陰極(蜂鳴器本身可能會標示它們的位置)。將陰極腳連接到麵包板的負極,而陽極腳連接到 Raspberry Pi 樹莓派 IO25 的腳位,如圖 1 所示,完成後的成品如圖 2 所示。

樹莓派感測器實作(二):入侵者警報器
圖 2. 入侵者警報器完成圖

9. 撰寫警報器程式碼

當所有硬體都如圖1設置完成後,我們就可以準備開始撰寫入侵者警報器的程式碼了!

第 1~2 行:在最終版的「intruder_alarm.py」程式碼中,我們首先輸入 GPIO Zero 程式庫的 LED 與蜂鳴器,並且使用時間程式庫中的休眠,用來作為延遲使用。

第 9~14 行:可以依照不同的警報建立獨立的警示訊息(就像實作(一)的火焰與瓦斯警報系統),但是這次我們為了要簡化在沒有偵測到入侵者狀態的程式,因此並沒有分成兩種警示訊息。

當觸發時,將會執行 for 迴圈來控制 LED 與蜂鳴器開關切換的次數,並且加入 0.5 秒的休眠作為延遲。

第16~22 行:在 while True: 迴圈中,我們用來檢測 pin 腳從感測器所接收到的訊號,當雷射光被中斷(laser.value == 0),或是當聲音已到達閥值時(sound.value == 1),便會觸發警報。若是在未觸發的情況下,預設顯示訊息為「All Clear」, LED 與蜂鳴器皆為關閉的狀態。

10. 實測警報系統

接著就來測試入侵者警報器吧!

首先,嘗試將雷射光感測器的雷射光束中斷如下圖 3 所示,此時 LED 閃爍,蜂鳴器會發出聲響,Shell 視窗顯示「Intruder!」。接下來,我們製造一個較長時間的噪音,測試聲音感測器是否正常運作。

樹莓派感測器實作(二):入侵者警報器
圖 3. 中斷雷射光測試

小秘訣

為了簡化硬體配置,我們使用聲音感測器的數位輸出去觸發我們的警報器。如果是使用類比輸出,將會需要增加一個類比數位轉換器(如 MCP3008),將訊號轉換作為數位讀取。下一個實作我們將教學如何使用類比數位轉換器。

四、小結

現在我們有一個簡易的入侵者警報器了!為了更進一步的完善它,還可以增加額外的感測器,例如人體紅外線感測器,或者是使用鏡頭去偵測動態入侵者,也可以增加更大的燈號,或者是喇叭撥放警示音,當然也可以設定當發生警報時發送 email 或提示訊息到手機。就看各位的創意發想囉!

下一次我們將分享如何實作簡易氣象站的文章,有興趣的夥伴們請幫我們多多分享並持續關注我們喔!下次見~

CIRCUS Pi 的忠實粉絲們,許願的時間來了!
邀請各位將您想要瞭解的技術主題填寫表單,日後就有機會閱讀到相關的內容喔!