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

總網頁瀏覽量

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

2019/10/01

[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


> Johnny-Five 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 留言:

張貼留言