樹莓派感測器實作(一):火焰與瓦斯洩漏警報系統

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

👀 樹莓派初學者看這邊!

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

一、前言

人類透過各種感官(視覺、嗅覺、觸覺、味覺、聽覺)去感受這個世界,如此便能夠知道所處的環境發生什麼樣的變化,並且做出相對應的反應。

同理,我們也能夠利用手中的 Raspberry Pi 樹莓派連接各式各樣的感測器達到相同的效果。

「樹莓派感測器實作」系列我們將探索一些常見的感測器,並製作出可執行的專案。本次實作的專案目標:製作一個簡易的小型火焰與瓦斯洩漏警報系統,當警報系統偵測到危險狀況發生時,便會發出聲光警報提醒人們。

二、所需設備

1. 火焰感測器 x1

2. 氣體感測器 x1

3. LED 燈 x1

4. 蜂鳴器 x1

5. 麵包板 x1

6. 330Ω 電阻 x1

7. 杜邦線材

三、實作步驟

1. 連接火焰感測器

火焰感測器使用 PIR(passive infrared,被動紅外線) 偵測周圍環境溫度的變化,感測器上有類比與數位輸出,我們僅需要使用數位輸出的腳位,當感測器偵測到火焰時便會發送訊號。

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

樹莓派感測器實作(一):火焰與瓦斯洩漏警報系統
圖1. 火焰與瓦斯洩漏警報系統
Raspberry Pi 樹莓派火焰感測器
3.3 VVCC
GNDGND
IO21DO

2. 撰寫感測火焰程式碼

連接好火焰感測器後,開啟 Raspberry Pi 樹莓派的電源,若是連接正確將會看到感測器亮起紅燈

首先,我們要撰寫一個簡單的 Python 程式「flame_test.py」,去讀取感測器並顯示觸發時的訊息,也藉此來測試硬體是否正常運作。

從電腦桌面的選單中,打開 Thonny IDE 軟體平台開始撰寫程式。在這邊為了簡化設定,我們選擇使用 GPIO Zero 程式庫,而不是 RPi.GPIO 程式庫,程式碼如下圖所示: 

第 1~3 行:在程式碼中,我們使用 Button 方法檢測火焰感測器的訊號,按下按鈕即為感測到火焰(通電,訊號為1),反之為無感測到火焰(不通電,訊號為0)。

火焰感測器是連接到 IO21,因此我們將 flame 物件依照 Button 方法設定為 flame = Button(21)。

第 6~10行:設定一個迴圈 while True: ,當中使用 if…else 來判斷與顯示感測器是否有感測到火焰,if flame.value == 1 為偵測到火焰 ,Thonny Shell 顯示窗為「Fire!」;反之則顯示「No fire」。

第 11 行:在顯示設定中我們加入了 end = “\r” ,如此一來每次顯示文字就都會出現在同一行,而不是換行顯示,可以讓畫面看起來更為乾淨整齊。

3. 實測火焰感測器

現在就將火焰放在感測器附近,實測看看是否會觸發警報文字吧!

我們使用打火機來測試,當然也可以用其他火源代替(例如:燭火、火柴棒),切記要小心使用,並且不要將火源直接放在不防火的感測器旁邊,以免高溫損壞感測器,造成危險。

現在就使用前面寫好的「flame_test.py」程式搭配火源靠近感測器,我們這邊設定的是當火焰距離感測器約 30cm 時,便會發生觸發感測器(可以透過感測器板上的十字旋鈕調整成適合的距離)。

當感測器偵測到火焰時,紅色 LED 會亮起,Thonny Shell 視窗會從「No fire」 顯示為「Fire!」,如下圖所示:

樹莓派感測器實作(一):火焰與瓦斯洩漏警報系統
圖2. 實測火焰感測器

小秘訣

為了簡化操作,我們使用數位輸出觸發警報系統;若是使用類比輸出的話,將會需要額外增加一個 ADC 晶片(例如:MCP3008)將其轉換成數位訊號讀取。

4. 連接氣體感測器

接著要使用氣體感測器(MQ-5)來偵測瓦斯,氣體感測器裡面有一層氧化錫,可以高靈敏度地感測丁烷、甲烷和丙烷等氣體是否存在空氣中。

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

Raspberry Pi 樹莓派火焰感測器
3.3 VVCC
GNDGNC
IO14DO

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

5. 增加氣體感測器程式

雖然我們也可以另外建立一個新的程式碼單獨測試氣體感測器,但是這邊示範直接在原先撰寫好的的程式中,連接增加氣體感測器的部份,這樣就可以更簡單地進階到我們最終的警報系統程式。

第 4~6 行:在「flame_gas_test.py」程式碼中,我們使用與前面一樣的 Button 方法,將 Raspberry Pi 樹莓派的 GPIO18(譯註:原文為 GPIO18,應該是筆誤,實際是 GPIO14 才對)指定為氣體偵測器 gas = Button(14)。接著新增一行自定義的 msg2 ,我們將用來設定欲顯示在 Shell 視窗的訊息。

第 8~16 行:設定一個迴圈 while True:,當氣體感測器感測到欲偵測的氣體而腳位被觸發時(if gas.value == 1),便會顯示「Gas leak!」,反之則顯示「No gas」。

第 17 行:最後我們在 msg1 後方加入 msg2 並包含 end = “\r” ,這樣顯示文字就會都顯示在同一行。

6. 實測氣體感測器

現在就來實測看看氣體感測器是否運作正常吧!

我們在不點燃火焰的情況下使打火機洩漏些許瓦斯氣體,也可透過瓦斯爐或瓦斯氣瓶取得少量的瓦斯氣體,但是必須確保是在安全的狀態下使用。

現在就開始使用「flame_gas_test.py」程式碼,並在感測器周圍釋放少量的瓦斯氣體。氣體感測器與火焰感測器使用方法一樣,可透過板上的十字旋鈕調整可變電阻,藉此改變氣體感測器的靈敏度。

當氣體感測器偵測到周圍的瓦斯時,紅色的 LED 會亮起以表示觸發,並且 Shell 視窗會從原本的「No gas」顯示為「Gas leak!」。

7. 連接 LED

如果在前面的操作步驟已經能讓感測器正確地運作並顯示訊息了,那麼就可以進入到下一個階段。

雖然能夠顯示正確訊息已經相當不錯了,但是一個好的警報系統怎麼能少了視覺與聽覺的警報效果呢?

在視覺警報的部分,我們加入一個紅色 5mm LED (當然也可以選擇其他尺寸),而為了要避免 LED 燒壞,因此我們還要加入一個電阻去限制電流。

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

8. 連接蜂鳴器

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

9. 警報程式碼整合撰寫

當一切硬體如圖1 都設置完成後,我們就準備開始撰寫火焰與瓦斯洩漏警報吧!

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

第 9~21 行:我們建立 fire_alarm 與 gas_alarm 兩種警報程式,使用 for 迴圈來控制 LED 與蜂鳴器開關切換的次數,並且加入 0.5 秒的休眠作為延遲。

第23~31 行:最後,在 while True: 迴圈中,我們用來檢測 pin 腳從感測器所接收到的訊號,並觸發相關的警報器。若是在未觸發的情況下,預設顯示訊息為「All OK」, LED 與蜂鳴器接為關閉的狀態。

10. 實測警報系統

現在就來測試火焰與瓦斯洩漏警報系統吧!

首先我們將火源靠近火焰感測器,來確認警報系統是否有被觸發,觸發的狀態為 LED 閃爍、蜂鳴器發出聲響,Shell 視窗顯示正確的訊息。同樣地,透過釋放少量的瓦斯來測試氣體感測器,是否有正常觸發警報系統。

注意!

請勿玩火!使用火源測試時,請勿太靠近感測器與其他零件。
使用瓦斯氣體時,須確保環境通風,並且僅使用少量測試。
本次分享僅作為範例參考,勿將其作為實際生活中的安全警報系統之用。
當發生火災或瓦斯外洩時,請盡速撥打 119 通知消防單位。

四、小結

現在我們已經擁有了簡易的火焰與瓦斯洩漏警報系統了!如果想要讓警報效果更加明顯的話,可以添加一個繼電器去開啟 12V 的信號警報燈,也可以設定當發生警報時發送 email 或提示訊息到手機。

下一次我們將分享如何實作入侵者警報器的文章,有興趣的夥伴們請幫我們多多分享並持續關注我們喔!下次見~

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