把遇到錯誤的、學習到的前端筆記在這邊

總網頁瀏覽量

Copyright © Tzeng Ying-chi. 技術提供:Blogger.

2019/10/05

[2019鐵人賽] - 21.筆記IoT初練習看- 偵測一個Move!Hold住你的動作 - Johnny Five 之 Motion 動作感測器


tags: iT邦幫忙鐵人賽2019

[Day 21]用JS控制Arduino吧!偵測一個Move!Hold住你的動作 - Johnny Five 之 Motion 動作感測器

Sensor 篇第三彈!今天要介紹的是
PIR Sensor - Passive Infrared Sensor
無源紅外線感測器,
世面上有個通俗的名字叫 -「人體感測器
但其實他不只可以感測人體,還可以感測動物等~
本魯:我是覺得它叫「動作感測器」會比較好啦~ ( •́ _ •̀)?

PIR Sensor 介紹

而 PIR Sensor 模組為「熱釋電傳感器(Pyroelectric sensor)」和「菲涅耳透鏡(Frenzel Lens)」所組成。
本魯的 PIR Sensor -
白色的鏡頭蓋為菲涅耳透鏡(Frenzel Lens)
在透鏡裡頭的 Sensor 就是 熱釋電傳感器(Pyroelectric sensor)

工作原理

世界上所有的物體都會發出熱能又稱「遠紅外線 - (Far Infrared,縮寫FIR)」
遠紅外線為不可見光,當中生物體可以以「熱」的形式感受存在。
因為人或動物(下簡稱目標物)都會發出熱能,
當目標物進入傳感器範圍,所發出的熱能會以紅外線的形式散發出來,
傳感器檢測到熱能與環境的溫度差,便開始輸出電位訊號,檢測目標物是否有運動的事件發生。
PIR 的全名為 Passive infrared sensor
其中 passive 術語名稱叫「無源」,又有被動的意思;

有源傳感器?無源傳感器?

斯斯有兩種,傳感器也有分兩種~
從工作原理來看,****
有源傳感器自身會輸出能量來檢測被測對象
無源傳感器則不會發出任何的能量,靠的是透過接收被測物發出的能量來檢測
PIR Sensor 就是透過接收人、動物發出來的熱能,因此「passive」便是這個意思~
(  ̄□ ̄) /    <( ̄ㄧ ̄ ) <( ̄ㄧ ̄ )

模組上的圓形塑膠蓋 - 「菲涅耳透鏡」

可以觀察模組上有一個白色的圓形塑膠物,那個是「菲涅耳透鏡」,
主要用來將外在的紅外線信號聚焦到熱釋電傳感器。

PIR 模組的結構

PIR 模組有兩個可變電阻,一個用來調整傳感器的靈敏度,另外一個用來調整延時時間
  • 靈敏度 (Sensitivity) - 有關觸發的距離
  • 延時時間 (Delay time) - 和觸發模式有關係

PIR 模組的兩種觸發模式

PIR 模組有兩種觸發的模式,
  • repeat-mode 可重複觸發模式
    Sensor 觸發輸出 high 訊號後,在延時時間內,
    如果有目標物在感應範圍內活動,會一直保持 high 訊號,
    直到目標物動作停止 Sensor 不再觸發,開始再算一次延時時間,延時時間結束訊號才會從 high 到 low。
  • non-repeat-mode 不可重複觸發模式
    即感應輸出 high 訊號後,會持續一段時間,
    這段期間內不會有進行任何偵測觸發的動作,時間結束後訊號自動從 high 到 low ;
PIR Sensor的模組後面有三個隻 Pin 腳,我們可以用跳線(Jumper)選擇觸發模式。

截圖自 - Youtube - How PIR Sensor Works and How To Use It with Arduino
相關連結:
本魯宅:痾…這個Sensor有點複雜…找了好多資料啊…(●▼●; )
原來這麼小小的一個感測器原理這麼複雜,好險電路方面很簡單…

硬體部分 - PIR 電路

電路方面

由於已經模組化,接線部分就只有3隻Pin腳分別是
  • VCC
  • Output
  • GND
PIR Sensor 的輸出腳選擇數位接腳即可。
介紹完後,我們開始來實作吧~
準備需要的東西有~ヽ(・×・´)ゞ

硬體方面

  • Arduino Uno 一片 + USB TypeB 線材一條 (標配~
  • PIR Sensor
  • 杜邦線 看你用幾條準備幾條

軟體部分

Johnny Five - Motion
http://johnny-five.io/examples/motion/
GO~ GO~( • ̀ω•́ )

使用寫法-範例

要使用 PIR Sensor 的話,需要呼叫 Johnny-Five 的 Motion 物件,
物件參數 pin 填連接 Arduino 的數位腳。

var motion = new five.Motion({
  pin: 7,
  // controller:XXX //  選填
});

如果使用特殊型號的 Sensor,controller則填寫如 Controller Alias Table 相對應的字串。
Johnny-Five 的 Motion 物件如果參數只有 pin 腳的話,則也可以簡寫成

new five.Motion(7);

Events

Johnny-Five Motion Events
http://johnny-five.io/api/motion/#events
event 除了有介紹過的 changedata,還多了
  • calibrated
    校準事件,當傳感器準備好在可觀察範圍內檢測運動時,將觸發 calibrated 事件。
  • motionstart
    運動開始事件,當在可觀察範圍內目標物發生運動時,觸發 motionstart 事件。
  • motionend
    停止運動事件,當在可觀察範圍內目標物停止運動時,觸發 motionend 事件。

實作 -

這邊要注意的是 calibrated 事件
當程式執行 board ready 後,傳感器會處於校準狀態
主要因為熱釋電傳感器物理性特徵的關係
因為傳感器需要幾秒的時間來預熱,才能開始感測接收目標物散發出的紅外線

var five = require('johnny-five');
var board = new five.Board();

board.on('ready', function() {
  var motion = new five.Motion({
    pin: '7',
    freq: 250,
  });

  // 開始時 Sensor 會處於校準狀態,最一開始的偵測到動作即觸發 calibrated 事件
  // calibrated 事件只會發生一次。
  motion.on('calibrated', function() {
    console.log('calibrated');
  });

  // 在calibrated 事件結束後,
  // 當在可觀察範圍內目標物發生運動時,觸發`motionstart`事件。
  motion.on('motionstart', function() {
    console.log('motionstart');
  });

  // 如果若干X毫秒內未發生移動時,
  // 將在`motionstart`事件之後觸發`motionend`事件
  motion.on('motionend', function() {
    console.log('motionend');
  });
});

可以看到執行程式,當 board on ready 後,初始化觸發 calibrated 事件,直到觸發 motionstart 事件後,calibrated 事件就不會在觸發了!
一個完整的觸發事件當
motionstart 事件開始 → 經過一段時間後 → 觸發motionend → 結束。

(欸~有貓亂入?)
PIR Sensor 就介紹到這囉~
今天講到這邊了~感謝收看~(๑´ㅂ`๑)

文後

今天去抓寶可夢走的好累…Orz

本系列的程式碼皆會上傳到 GitHub 上開源
喜歡按個星星吧~乾蝦乾蝦<(_ _)>

團隊系列文:

同步連載於blogger-King 學習前端之人生

0 留言:

張貼留言