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));
}
}
}

前へ

SpresenseでLチカから始める (5) Wireライブラリ グラフィック・ディスプレイ

次へ

M-DUINO PLCで始めるArduino (1) PLCとしては使わない