obnizでオムロンの非接触温度センサを使ってみた

## 前置き
オムロンが[個人向けにオープンプラットフォームでの利用をサポートしたセンサ](https://fabcross.jp/news/2019/20190115_omron_openplatformsensors.html)を販売を開始しています。その中の[非接触温度センサ](https://www.omron.co.jp/ecb/product-detail?partId=5747)を手に入れたので早速遊んでみました。

センサを販売している[スイッチサイエンス](https://www.switch-science.com/catalog/1297/)に作例が載っていたのでこちらを参考にさせてもらいました。作例ではarduinoを使っていますが、今回は最近流行りのobnizで動かしてみます。

## 使ったもの
- オムロン MEMS非接触温度センサ D6T-44L-06
- オムロン D6T変換基板 TECHNOALTA-D6T-44L-GC
    - D6TをGroveコネクタで接続できるようにする基板です
- Grove→2.54mmピッチ変換基板
    - obnizはGroveコネクタが無いので[こちらのブログ]
(https://www.1ft-seabass.jp/memo/2019/01/15/grobe-and-obniz-convert-pitch-board/)を参考に自作しました
- obniz

## 接続方法
以下のような順番で接続しています。
温度センサ - Grove変換基板 - Grove→2.54mmピッチ変換基板 - obniz
![IMG_1352.JPG](https://qiita-image-store.s3.amazonaws.com/0/149785/e2731e85-d40a-56bf-df0c-d9bc62a32b3a.jpeg)

センサとobnizのピン配置は以下の通りです。

| obniz側 | センサ側 | |
|:-:|:-:|:-:|
| 0 | SCL |I2C(5V) クロック|
| 1 | SDA |I2C(5V) データ|
| 2 | VCC |VCC 電源端子（5V ±10%）|
| 3 | GND |GND 電源端子|

## I2Cでデータ取得
これで物理的には接続ができたので、次はデータの取得です。
オムロンが用意している[ユーザーズマニュアル](https://omronfs.omron.com/ja_JP/ecb/products/pdf/CDSC-019.pdf)が参考になります。

このセンサでは温度データは以下のように4x4のマトリックスで16個が取得できます。

<img width="220" alt="スクリーンショット 2019-01-31 17.59.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/149785/28be71ef-6880-1bcb-14f9-70378e9e4a15.png">
([オムロンのマニュアルから引用](https://omronfs.omron.com/ja_JP/ecb/products/pdf/CDSC-019.pdf))

## obnizの実装
温度データを1秒ごとに取得し4x4に並べてobnizのディスプレイに表示するようにしました。コードは以下の通りです。

```
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
  <script src="https://unpkg.com/obniz@2.0.0/obniz.js" crossorigin="anonymous"></script>
</head>
<body>

<script>
var obniz = new Obniz("OBNIZ-ID");
obniz.onconnect = async function () {

  var i2c = obniz.getFreeI2C();
  obniz.io2.output(true);
  obniz.io3.output(false);
  i2c.start({mode:"master", sda:1, scl:0, clock:100000});

  obniz.repeat(async function(){

    await obniz.wait(100);    
    i2c.write(0x0A, [0x4C]);
    await obniz.wait(160);
    var data = await i2c.readWait(0x0A, 35);
    var t = [];
    
    for(var i=2; i<34; i++){
      t[i] = ((data[i]+(data[i+1]<<8))*0.1).toFixed(1);
      console.log(t[i]);
      i++
    }
    obniz.display.clear();
    obniz.display.font(null,14);
    obniz.display.print(t[2] +" "+t[4] +" "+t[6] +" "+t[8]);
    obniz.display.print(t[10]+" "+t[12]+" "+t[14]+" "+t[16]);
    obniz.display.print(t[18]+" "+t[20]+" "+t[22]+" "+t[24]);
    obniz.display.print(t[26]+" "+t[28]+" "+t[30]+" "+t[32]);

  }, 1000)
}

</script>
</body>
</html>
```

## テスト
では実際に温度が取れているか試してみましょう。
左に温かい缶コーヒー、右に冷たい缶コーヒーを置いて計測してみました。
obnizのディスプレイに表示された温度が左端中央が43.2度、右端中央が9.2度を示していて、左右の温度差を計測できている事がわかります。

![IMG_1361.JPG](https://qiita-image-store.s3.amazonaws.com/0/149785/c9735e51-b07b-3558-ff95-3aa7d5008f0f.jpeg)

[Youtube](https://www.youtube.com/watch?v=cfm49YdUjJw)にもテストした際の動画をアップロードしています。

## 今後の活用
データを取得するのはとても簡単にできました。次は

- 温度が数字だと直感的に分かりづらいのでビジュアル化
- 通常の温度センサと異なる「非接触」「4x4でデータ取得」という特徴を活用
- 温度をトリガーに何かのアクションを起こす

という観点で何か作ってみようと思います。（続く）