iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1
IoT

IoT沒那麼難!新手用JavaScript入門做自己的玩具~系列 第 22

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

  • 分享至 

  • xImage
  •  

IoT沒那麼難!新手用 JavaScript 入門做自己的玩具!(iT邦幫忙鐵人賽系列書)

★本系列文章已集結成冊,和系列文不同的是:

  • 本書使用大量的圖解來說明LED系列、多種感測器等原理。
  • 補足系列文程式碼的解說,增加逐行程式碼的詳細解說!
  • 全彩的書籍,用圖解的方式,讓讀者來理解Johnny-Five各種API的功能與效果,讓你不會只讀文字看到想睡覺而學不起來。

歡迎大家做出自己想要的玩具,為了樂趣而學習,讓學習變成你的樂趣!ヽ(・×・´)ゞ
讓Arduino也能用JavaScript創造出屬於自己的作品!

★購書連結-天瓏網路書局:
https://www.tenlong.com.tw/products/9789864345328

《IoT沒那麼難!新手用 JavaScript 入門做自己的玩具!(iT邦幫忙鐵人賽系列書)》
博客來、金石堂、momo、誠品、PChome、讀冊,均有販售喔!─=≡Σ((( つ•̀ω•́)つ
ISBN:9789864345328

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() {
  // Create a new `motion` hardware instance.
  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 上開源

2019ironman-JS-IoT :
https://github.com/tinatyc/2019ironman-JS-IoT

喜歡按個星星吧~乾蝦乾蝦<(_ _)>


團隊系列文:

CSScoke - 金魚都能懂的這個網頁畫面怎麼切 - 金魚都能懂了你還怕學不會嗎
Hina Hina - 陣列大亂鬥
阿斬 - Python 程式交易 30 天新手入門
Clarence - LINE bot 好好玩 30 天玩轉 LINE API
塔塔默 - 用Python開發的網頁不能放到Github上?Lektor說可以!!
Vita Ora - 好 Js 不學嗎 !? JavaScript 入門中的入門。


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


上一篇
[Day 20]-用JS控制Arduino吧!小財神啊!你看見那個鐵人在惡搞iT邦熊俠嗎?Johnny Five 之 光敏電阻- 小遊戲(?)應用篇
下一篇
[Day 22]-用JS控制Arduino吧!偵測老闆的一個Move~薪水小偷必備 - Johnny Five 之 Motion 動作感測器 - 實務應用(?)篇
系列文
IoT沒那麼難!新手用JavaScript入門做自己的玩具~33
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
dick
iT邦新手 5 級 ‧ 2019-10-07 08:52:17

PIR感測器介紹的很詳細ㄟ!謝謝大大分享,另外想請問一下上面的圖2是怎麼畫的呢?

感謝dick大大讚賞~/images/emoticon/emoticon41.gif
那個圖是我自己拉出來的,用這套軟體 sketch
但他 For macOS only
給大大參考參考^^ 謝謝您~

我要留言

立即登入留言