CyberPi 人體紅外線感測器

有些物聯網互動裝置在沒有人靠近的時候是不需要有任何動作的,為了要達成有人的時候再運作,沒有人的時候就不要運作,需要靠一個叫做人體紅外線感測器(PIR)的協助,雖然CyberPi內建的感測器中並沒有PIR,但透過mbuild模組的PIR感測器卻可以輕易地達成。

mbuild PIR 感測器的外觀如下所示:

它有兩個連接埠,透過專屬連接線可以不斷地串接許多mbuild模組。如果把CyberPi連接上PIR Sensor,外觀如下:

連接完畢之後,就可以編寫一個簡單的程式來檢視目前的人體接近次數,如下所示:

import cyberpi as cp
import mbuild, time

count = 0
try:
    mbuild.pir_sensor.reset_count(1)
    while True:
        count = mbuild.pir_sensor.get_count(1)
        cp.display.show_label(count, 24, "center")
        time.sleep(1)
except Exception as e:
    cp.console.print(e)

當程式中需要使用到mubild模組時,需要先import mubild,之後再依據模組的名稱執行它的相對應函式。在此例中,我們先利用reset_count(1),把人體接近的次數先清除為零,然後再利用一個無窮迴圈去取得目前計數的次數,這個數字會一直累積,直到下一次執行了reset_count(1)為止。函式中的1指的是index=1,表示它是第1個此類型的模組,如果有串接了兩個以上的模組,該數字才需要調整。

在這個例子中還引用了一個例外處理的技巧,透過這個技巧,可以在程式編寫錯誤時,在例外處理的地方利用cp.console.println(e)取得程式出錯的訊息,此點在找出程式的錯誤時非常好用。

除了要瞭解目前接近過本感測器的人數次數之外,我們也可以讓CyberPi在有人接近的時候進行運作,離開的時候就靜止,這個偵測的函式是is_activated(1),請參考以下的程式:

import cyberpi as cp
import mbuild, time

count = 0
try:
    while True:
        action = mbuild.pir_sensor.is_activated(1)
        if action:
            cp.display.show_label("Hi", 32, "center")
        else:
            cp.display.show_label("Sleep", 32, "center")
        time.sleep(1)
except Exception as e:
    cp.console.print(e)

上述程式的執行影片如下所示:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *