前邊的esphome教程裏講過怎麽使用esp-01s制作智慧開關、智慧彩燈控制器、溫濕度檢測儀、土壤濕度檢測儀等等,今天呢我們再講講人體傳感器。
目前主流的人體傳感器檢測元件不外呼紅外和微波兩種,像安防系統中用到的雙鑒探頭、多元三鑒探頭,都是用的這個。下圖就是被動紅外模組和微波模組。
PS:講解下被動紅外的概念,探測器本身不發射任何能量而只被動探測、接收來自環境的紅外放射線。一旦有人體紅外線放射線進來,經光學系統聚焦後熱釋電器件就會產生突變電訊號。與被動紅外相對應的是主動紅外,安防中用的紅外對射就是主動紅外。
該紅外傳感器是5V-12V供電,輸出3.3V高電平(切記不要使用3.3V供電,會帶不起來),它有兩種觸發模式:
1、當檢測到有人活動時,會持續輸出高電平,等延時時間一結束就變為低電平(公共區域的感應照明就是這個模式);
2、當檢測到有人活動時,會輸出高電平,在延時時間段內,如果有人體在其感應範圍活動,將一直保持高電平輸出,直到人體離開檢測範圍,才輸出低電平(感應模組檢測到人體的每一次活動後會自動順延一個延時時間段,並且以最後一次活動的時間為延時時間的起始點)。
PS:我們需要用到的是模式2,原理:透過ESP 監測模組輸出引腳,當有高電平時(即有人活動時),觸發相應動作(比如控制一個燈開啟;夜間觸發報警)。
話不多說,上程式碼:
esphome:
name: pir_sensor ##這裏的名稱一定要與你建立這個模組時的名稱相同;
platform: ESP8266 ##這裏不能變;
board: esp01_1m ##這裏不能變;
wifi:
ssid: "test-wifi" ## wifi帳號;
password: "12345678" ## wifi密碼;
manual_ip:
static_ip: 192.168.123.198 ##固定此裝置IP地址為192.168.123.198;
gateway: 192.168.123.1 ##路由器、閘道器地址;
subnet: 255.255.255.0 ##子網路遮罩;
# Example configuration entry
debug:
# Logger must be at least debug (default)
logger:
level: debug
# Enable Home Assistant API
api:
password: "1" ## api密碼,用於連結ha驗證;
ota:
password: "1" ## ota密碼,用於後續線上升級;
web_server: ## web控制,添加了這2行,就可以在網頁端開啟裝置ip;
port: 80
switch:
- platform: gpio
name: "PIR light relay"
pin: GPIO2 ##使用GPIO-0
id: relay
binary_sensor:
- platform: gpio
pin: GPIO0 ##使用GPIO-0
name: "PIR Sensor"
device_ class: motion ##傳感器型別
id: pir_motion ##設定傳感器ID
on_press: ##如果觸發,則執行繼電器開合的動作
- switch.turn_on: relay
- platform: template ##引入自動化樣版
name: temp_motion ##樣版名稱
lambda: 'return id(pir_motion).state;'
filters:
- delayed_off: 2min ##若觸發紅外傳感器,則延時2min後關閉繼電器
on_release:
- switch.turn_off: relay
上面程式用到自動化樣版控制項Template,它的作用在於觸發紅外傳感器時,能夠自動將繼電器開啟 ,延時一段時間後自動關閉,如果光使用relay,是達不到自動關閉的效果的。
目前只測試了下自動延時的效果,其實還可以改成if_else、while和wait_until的觸發模式,也就是說,不需延時,只要檢測到人體就一直保持觸發狀態,讓繼電器一直閉合(這裏需要將紅外模組設定成連續觸發模式)
這個可以用於衛生間、起床小夜燈的場景,當檢測到人體活動時,一直保持觸發狀態,讓燈一直開著。
下面以if_else程式碼為例:
##前面配置部份省略
switch:
- platform: gpio
name: "PIR light relay"
pin: GPIO2 ##使用GPIO-0
id: relay
binary_sensor:
- platform: gpio
pin: GPIO0 ##使用GPIO-0
name: "PIR Sensor"
device_ class: motion ##傳感器型別
id: pir_motion ##設定傳感器ID
on_press: ##如果觸發,則執行繼電器開合的動作
- switch.turn_on: relay
- platform: template ##引入自動化樣版
name: temp_motion ##樣版名稱
on_press:
then:
- if:
condition:
lambda: 'return id(pir_motion).state;'
then:
- logger.log: "Detected somebody activity"
- switch.turn_on: relay
##這裏也可以加延時語句,這樣就跟上面的一樣了
else:
- logger.log: "There is no one around"
- switch.turn_off: relay
如果只是單純當人體傳感器,用來當安防探頭用的話,直接這樣寫就好:
binary_sensor:
- platform: gpio
pin: GPIO0 ##使用GPIO-0
name: "PIR Sensor"
device_ class: motion
PS:當然你按最後這個寫,然後在homeassistant的自動化中再關聯燈也是可以的。總之「條條大道通羅馬」。
燒錄及homeassistant中的操作見前邊的文章。下邊為homeassistant中的顯示情況。
PS:上述模組,可單用一個,也可以兩個都有(兩個都用會更準確,減少誤報率)。
本人實際使用中,發現蹲廁所時,總是要動一下才行。本來出個恭,結果順帶打了一套太極拳;這種事情「是可忍,孰不可忍也」。於是我又用了下邊這個模組,公釐波雷達。
PS:人體存在感應器就用的這玩意兒,不過那個頻率更高,79G的(人體存在感應器就是人在微動的情況下就能檢測到,比如呼吸時)。
塗鴉智慧和綠米是有成品賣的,價格在400多。不過這個模組也不便宜,見下圖。
PS:關於esphome系列,目前先講到這裏吧;如果後續有太另類的東西,再開講吧。
-- -- -- -- -- -- END -- -- -- -- -- --
我是小白,智慧家居愛好者、一卡通行業從業者、曾經的建築智慧化從業者。致力為開源智慧家居平台添磚加瓦。