Arduino UNOで空間温度を測る

MEMS非接触温度センサ D6T

スイッチサイエンスで販売しているオムロン製 MEMS非接触温度センサD6Tを用いて空間的な温度を測定してみます。

特徴
 静止人物も検出できる
高感度な人感センサを実現

ここでは「D6T-44L-06」を用います。
これは4×4の空間の16点の温度を測定できるセンサーです。


信号は下図のようになります。
Vccは5Vであることに注意してください。



【注意事項】
I2Cのプロトコルなので、SCL及びSDAは10KΩ程度の抵抗でプルアップする必要があります。

sclとsdaはコネクターの左上のAREFの横です



基板を横から見たところです。SCLとSDAと印刷されています。



ここでは、fenrirさんの作成したWireExtを利用させて貰います。

温度計測
#include <Wire.h>
#include "WireExt.h"
 
#define D6T_addr 0x0A
#define D6T_cmd 0x4C
 
int rbuf[35];
float tdata[16];
float t_PTAT;
 

void setup()
{
  Wire.begin();
  Serial.begin(9600);
  Serial.flush();
}
 
void loop()
{
  Wire.beginTransmission(D6T_addr);
  Wire.write(D6T_cmd);
  Wire.endTransmission();
  if (WireExt.beginReception(D6T_addr) >= 0) {
    for (int  i = 0; i < 35; i++) {
      rbuf[i] = WireExt.get_byte();
    }
    WireExt.endReception();
 
    t_PTAT = (rbuf[0]+(rbuf[1]<<8));
    for (int  i = 0; i < 16; i++) {
      tdata[i]=(rbuf[(i*2+2)]+(rbuf[(i*2+3)]<<8))-t_PTAT;
    }
     output_csv();  // CSVで出力
     delay(500);                // 500ミリ秒待つ
  }
}
 
// CSVで温度を出力
void output_csv() {
  for (int i = 0; i < 16; i++) {
    Serial.print(tdata[i]);
    if (i < 15) {
      Serial.print(",");
    }
    else {
      Serial.println();
    }
  }
}