[2019鐵人賽] - 17.筆記IoT初練習- 用JS控制Arduino吧!手心的溫度~Johnny Five 之 Thermometer
倒不如說是手指的溫度啦 XD (標題騙人法
上篇簡介了各種 Sensor ,下半系列就要開始做一些有的沒的~
謎之音:所以上半系列就不是有的沒的嗎.....
本魯:也是啦....(大誤
今天要來介紹的是 Sensor 篇之 溫度量測 - 溫度計
Temperature Sensor 介紹
溫度感測器有很多種,本魯使用的 Temperature Sensor 是 LM35外觀很像電晶體,有三隻接腳
- 第一隻為 電壓 VCC
供電電源為直流 DC 4~20V,普通狀況下都是接5V就好
- 第二隻為 輸出腳 Out
可量測的溫度範圍為 -55°C ~ 150°C 訊號類比線性輸出
- 第三隻為 接地腳 GND
LM35 的工作原理為其輸出電壓與攝氏溫度成線性比例,每上升一度即上升10mV
> 公式為 Vout = 10mv/℃ * T
- Vout 為 LM35 輸出電壓
- T 為溫度即 ℃
不需要特別的進行校正,室溫誤差值 +-0.25 度,可量測的溫度範圍為 -55°C ~ 150°C,而接腳方面單純容易連接使用,
由於LM35僅從電源汲取60μA電流,因此晶片自體發熱的溫度不到0.1°C。
> Data Sheet - LM35 Precision Centigrade Temperature Sensors
http://www.ti.com/lit/ds/symlink/lm35.pdf
電路方面
因為溫度是連續的類比訊號,所以我們要把LM35的輸出腳接到Arduino的類比輸入pin腳
> 附上電路圖
介紹完後,我們開始來實作吧~
準備需要的東西有~ヽ(・×・´)ゞ
硬體方面
- Arduino Uno 一片 + USB TypeB 線材一條 (標配標配!
- LM35
- 杜邦線 看你用幾條準備幾條
軟體部分
> Johnny Five- Thermometer
> http://johnny-five.io/api/thermometer/
開始吧!
可以看到 Johnny-Five 支援非常多不同種類的溫度 Sensor
清單裡的 DHT 系列也是很常見的溫濕度 Sensor 本魯也有買來試試看,
不過上次試測發現用 Johnny-Five 好像還要再接一塊 Arduino 支援 I2C ,所以先拿LM35來寫~
使用 Johnny-Five Thermometer 元件,初始化元件要先new一個 five.Thermometer 物件,
pins為必要參數,接腳則必須使用類比的腳位。
```
new five.Thermometer({
pin: "A0",
controller:"LM35",
});
```
範例 - 使用寫法
可以透過 Thermometer 取得三種度量衡溫度,就不用很辛苦的轉換啦~
```
var five = require("johnny-five");
var board = new five.Board();
board.on("ready", function() {
var temperature = new five.Thermometer({
pin: "A0"
});
temperature.on("data", function() {
console.log("celsius: %d", this.C);
//取得 攝氏溫度
console.log("fahrenheit: %d", this.F);
//取得 華氏溫度
console.log("kelvin: %d", this.K);
//取得 凱氏溫度
});
});
```
API
> Johnny-Five Thermometer API
Johnny-Five `Thermometer` 的 API 只有兩個,主要是用來控制 event 事件。
- enable()
開始 `Thermometer` 的 `data` / `change` 事件,如果 `Thermometer` 已經啟動則無作用。
- disable()
停止 `Thermometer` 的 `data` / `change` 事件,如果 `Thermometer` 已經停止動作則無作用。
Events
event 則有 `change` 和 `data ` 事件可以用,兩者有什麼不同呢?
- change
當溫度數值有變化時,才會輸出數值出來。
- data
以開發者定義的頻率 `freq` 來發送溫度數值,頻率為毫秒(milliseconds)。
實作 - 溫度為什麼不上升,我吹的很累.... 。゚(゚´ω`゚)゚。
最後 Demo 使用 `data` 一秒取一次數值,到攝氏 30 度時呼叫 API `disable()` 做為結尾~
程式碼
```
var five = require('johnny-five');
var board = new five.Board();
board.on('ready', function() {
var temperature = new five.Thermometer({
controller: 'LM35',
pin: 'A0', // 類比輸入腳
freq: 1000, // 一秒取一次溫度值
});
temperature.on('data', function() {
console.log(this.celsius + '°C');
temp = this.celsius;
// 取攝氏溫度
if (temp == 30) {
// 當溫度 30 度時停止偵測動作
temperature.disable();
}
});
});
```
明天會結合 socket.io 讓溫度的數值視覺化,感謝收看~(๑´ㅂ`๑)
喜歡訂閱一下吧~
0 留言:
張貼留言