== AMG88の使い方 == [https://www.switch-science.com/catalog/3395/ Panasonic製 AMG8832 赤外線センサアレイ(リンク先はConta™版)] の使い方説明と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 ℃ * 通信方式: I^2^c * フレームレート: 毎秒 10 又は 1 フレーム * 出力モード: 温度出力 * 温度出力分解能: 0.25℃ * サーミスタ出力温度範囲: -20 ~ 80 ℃ * サーミスタ出力分解能: 0.0625 ℃ === 通信方法 === I^2^Cアドレスは、7bit表記で0x68です。これは表面のジャンパをつなぎかえることで0x69に変更可能です。 === サンプルスケッチ === ==== Arduino用 ==== [https://github.com/SWITCHSCIENCE/samplecodes/tree/master/AMG88_breakout/Arduino/AMG88_Arduino GitHubでも公開]しています。 {{{ /******************************************************************************* // SWITCHSCIENCE wiki -- http://trac.switch-science.com/ // AMG88 Arduino Sample *******************************************************************************/ #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) ==== キーボード上の `バックスペースキー` を押すことで描画アルゴリズムを変更できます。 取得データに従って64個の箱の奥行きが変わります。マウスの位置で視点変更ができます。 以下の画像は、センサー前に氷の入ったグラスを置いた時のものです。 コップの形にそって測定温度が下がっている事がわかると重います。 [[Image(amg88_processing_img1.png,500)]] 取得データの-20~100℃を色相の赤~青に割り当てています。 [[Image(amg88_processing_img2.png,500)]] 取得データの20~40℃を色相の赤~青に割り当てています。画像では20℃以下の領域が青~紫~赤の色相に入っています。 [[Image(amg88_processing_img3.png,500)]] 取得データの最大最小を色相の赤~青に割り当てています。