SpresenseでLチカから始める (6) Wireライブラリ 非接触の温度計AMG8833
I2Cインターフェースは、複数のスレーブ・デバイスをつないで利用できます。
- 8×8非接触の温度センサAMG8833
- 128×64 OLEDディスプレイ
の二つをつなぎます。スレーブ・アドレスは、0x68と0x3cです。
●AMG8833の概要
8×8ポイントの温度を測定できる赤外線アレイ・センサは Grid-EYEと呼ばれ、天井などに取り付けておくと、人の動きを検知できます。人を感知する焦電型赤外線センサは、対象物が動かないと出力はないですが、このセンサは常時検知できます。
次の記事を参照しました。
人が侵入したらアクションを起こす その3 赤外線アレイ・センサで人をキャッチ
人が侵入したらアクションを起こす その4 人の動きを映像化
●接続
上記の記事で組んだ回路のままなので、I2C信号に6.8kのプルアップ抵抗が入っています。Spresenseでは不要ですが、このままで動作します。
●スケッチ
map関数を使って人の体温付近を単純な0~3に置き替えることで、テキストの表示で温度部分布を見やすくしました。
#include <Wire.h>
#include <ACROBOTIC_SSD1306.h>
const byte AMG8833addr=0x68;
byte readbuffer[8][16];
float temp[8][16];
long PP;
void setup() {
Wire.begin();
oled.init(); // Initialze SSD1306 OLED display
oled.clearDisplay(); // Clear screen
Serial.begin(9600);
Serial.println("\n Start ");
}
void loop() {
for (int j=0; j<8; j=j+1){
Wire.beginTransmission(AMG8833addr);
Wire.write(0x80+0x10*j);
Wire.endTransmission();
Wire.requestFrom(AMG8833addr, 16);
oled.setTextXY(j,0); oled.putString(String(j)); oled.putString(":");
for (int i=0; i<16;i=i+2){
readbuffer[j][i+1] = Wire.read();readbuffer[j][i] = Wire.read();
temp[j][i] =( ((readbuffer[j][i] & 0x07)<<8 )+ readbuffer[j][i+1])*0.25;
PP=map(temp[j][i],25,35,0,3);
oled.putString(String(PP));
}
}
}