人が侵入したらアクションを起こす その3 赤外線アレイ・センサで人をキャッチ

 人を感知する焦電型赤外線センサの欠点は、動かないと検知できないことです。多くの用途では問題となりません。人を検知する目的で、どの方向から人が入ってきたかを検知するには、複数の焦電型赤外線センサの設置が必要です。
 そのような用途に、天井付近に取り付けると、8×8ポイントの温度を測定できるセンサ「赤外線アレイセンサ Grid-EYE AMG8833があります。部屋の中央付近の天井に1個取り付ければ、どの方向から人が入って出ていくかを検知できます。

AMG8833

 使いやすいプリント基板に実装した製品もいくつか販売されています。

  スイッチサイエンス Conta サーモグラフィー AMG8833搭載

 ここでは、ピッチ変換基板にはんだ付けして利用しました。スペックなどはラズパイで利用したページを参照ください。

接続

(訂正2018/8/5) 下記の図でAMG8833のA4とA5への配線が逆でした。申し訳ございません。SCLはA5へ、SDAはA4へ配線してください。

データを読み出すスケッチ

 8×8のセンサの左上のデータが0x80から読み出せます。
 Wireライブラリでは、最初に0x80の読み出す先頭アドレスをスレーブであるAMG8833へ書き込み、そこから1列分の16バイトを読み出します。それを8回繰り返して、64個のデータを全部読み出します。

 温度データは下位、上位の順番で入っています。データは12ビットなので、上位ビットは0x07でマスクします。上位バイトは8回シフトもしくは256倍し、それに下位バイトを足すと12ビット・データになります。最小ビットLSBが0.25℃なので、乗じて温度に換算します。

#include <Wire.h>
const byte AMG8833addr=0x68;
byte readbuffer[8][16];
float temp[8][16];

void setup() {
Wire.begin();
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);
readbuffer[j][1] = Wire.read();readbuffer[j][0] = Wire.read();
readbuffer[j][3] = Wire.read();readbuffer[j][2] = Wire.read();
readbuffer[j][5] = Wire.read();readbuffer[j][4] = Wire.read();
readbuffer[j][7] = Wire.read();readbuffer[j][6] = Wire.read();
readbuffer[j][9] = Wire.read();readbuffer[j][8] = Wire.read();
readbuffer[j][11] = Wire.read();readbuffer[j][10] = Wire.read();
readbuffer[j][13] = Wire.read();readbuffer[j][12] = Wire.read();
readbuffer[j][15] = Wire.read();readbuffer[j][14] = Wire.read();
Serial.print(j); Serial.print(":");
for (int i=0; i<16;i=i+2){
temp[j][i] =( ((readbuffer[j][i] & 0x07)<<8 )+ readbuffer[j][i+1])*0.25;
Serial.print(temp[j][i],0);Serial.print(" ");
}
Serial.println();
}
Serial.println();delay(1000);
}

 実行結果です。

前へ

温度を測る その7 温度センサはいらない

次へ

人が侵入したらアクションを起こす その4 人の動きを映像化