== AMG88の使い方 ==
[https://www.switch-science.com/ Panasonic製 AMG8832 赤外線センサアレイ(リンク追加予定)] の使い方説明とAdruino用サンプルスケッチです。
メーカーからデータシートが公開されています。しかし、これだけでは制御出来ないので、
他から集めた情報なども合わせて本ページでは説明します。
AMG88は赤外線センサアレイです。
赤外線強度を元に、サーモカメラのように二次元的な赤外線情報を読み取ることができます。
データシートですが、
公式データシート(日本語)(レジスタなどの情報なし) [[BR]]
(https://industrial.panasonic.com/cdbs/www-data/pdf/ADI8000/ADI8000CJ1.pdf)
Digi-Keyの公開しているデータシート(レジスタなどの情報あり) [[BR]]
(https://eewiki.net/download/attachments/20938914/Grid-EYE%20Full%20Datasheet.pdf?version=1&modificationDate=1379520699720&api=v2)
出所不明ですがarduino向けのサンプルスケッチが書かれたpdf [[BR]]
(http://www.netzmafia.de/skripten/hardware/Datenblaetter/Movement/Grid-Eye_Designguideline_460495954.pdf)
があります。
----
== 特徴 ==
販売中のAGM8832は3.3V DC駆動のローゲインタイプです。
* 電源電圧: 3.3 ± 0.3 V DC
* 測定対象物の温度範囲: 0 ~ 80 ℃
* 通信方式: I2c
* フレームレート: 毎秒 10 又は 1 フレーム
* 出力モード: 温度出力
* 温度出力分解能: 0.25℃
* サーミスタ出力温度範囲: -20 ~ 80 ℃
* サーミスタ出力分解能: 0.0625 ℃
== 使い方 ==
本製品はI^2^C接続で通信されます。実体配線図は下記のとおりです。
=== 実体配線図 ===
(後日掲載予定)
また、3.3V動作系のArduino R3フォームファクターのボードであればA1~A5ピンに直接刺さるかもしれません。
本製品にはI2C通信時のプルアップ用抵抗は実装されていません。ピンヘッダと合わせて各自で実装してください。
プルアップ抵抗はR1とR2に1608サイズの10kΩ程度のチップ抵抗をはんだ付けしてください。また、ArduinoのWireライブラリを使用する場合は内蔵プルアップが有効になりますので、プルアップ抵抗を省略してもかまいません。
=== 通信方法 ===
I^2^Cアドレスは、7bit表記で0x69です。これは裏面のジャンパをつなげることで0x68に変更可能です。
=== サンプルスケッチ ===
==== Arduino用 ====
[https://github.com/SWITCHSCIENCE/samplecodes GitHubでも公開(予定)]しています。
{{{
#include
#define PCTL 0x00
#define RST 0x01
#define FPSC 0x02
#define INTC 0x03
#define STAT 0x04
#define SCLR 0x05
#define AVE 0x07
#define INTHL 0x08
#define TTHL 0x0E
#define INT0 0x10
#define T01L 0x80
#define AMG88_ADDR 0x69 // in 7bit
void setup()
{
Serial.begin(115200);
Wire.begin();
int fpsc = B00000000;// 1fps
datasend(AMG88_ADDR,FPSC,&fpsc,1);
int intc = 0x00; // diff interrpt mode, INT output reactive
datasend(AMG88_ADDR,INTC,&intc,1);
// moving average output mode active
int tmp = 0x50;
datasend(AMG88_ADDR,0x1F,&tmp,1);
tmp = 0x45;
datasend(AMG88_ADDR,0x1F,&tmp,1);
tmp = 0x57;
datasend(AMG88_ADDR,0x1F,&tmp,1);
tmp = 0x20;
datasend(AMG88_ADDR,AVE,&tmp,1);
tmp = 0x00;
datasend(AMG88_ADDR,0x1F,&tmp,1);
int sensorTemp[2];
dataread(AMG88_ADDR,TTHL,sensorTemp,2);
//Serial.print("sensor temperature:");
//Serial.println( (sensorTemp[1]*256 + sensorTemp[0])*0.0625);
}
void loop()
{
Serial.print("[\n");
// Wire library cannnot contain more than 32 bytes in bufffer
// 2byte per one data
// 2 byte * 16 data * 4 times
int sensorData[32];
for(int i = 0; i < 4; i++)
{
// read each 32 bytes
dataread(AMG88_ADDR, T01L + i*0x20, sensorData, 32);
for(int l = 0 ; l < 16 ; l++)
{
int16_t temporaryData = (sensorData[l * 2 + 1] << 8 ) + sensorData[l * 2];
float temperature;
if(temporaryData > 0x200)
{
temperature = (-temporaryData + 0xfff) * -0.25;
}else
{
temperature = temporaryData * 0.25;
}
Serial.print(temperature);
if( (l + i * 16)<63 ) Serial.print(",");
}
Serial.println();
}
Serial.println("]");
delay(100);
}
void datasend(int id,int reg,int *data,int datasize)
{
Wire.beginTransmission(id);
Wire.write(reg);
for(int i=0;i json.getFloat(i)) min = json.getFloat(i);
}
dataRange = max-min;
for (int i=0; i 2) drawingMode =0;
}
}
}}}
==== 出力例(processing) ====
キーボード上の `b` を押すことで描画アルゴリズムを変更できます。
以下の画像は、センサー前に氷の入ったグラスを置いた時のものです。
コップの形にそって測定温度が下がっている事がわかると重います。
[[Image(amg88_proccessing_img1.png,500pix)]]
取得データの-20~100℃を色相の赤~青に割り当てています。
[[Image(amg88_proccessing_img2.png,500pix)]]
取得データの20~40℃を色相の赤~青に割り当てています。画像では20℃以下の領域が青~紫~赤の色相に入っています。
[[Image(amg88_proccessing_img3.png,500pix)]]
取得データの最大最小を色相の赤~青に割り当てています。