This is the GRID EYE an IR array sensor in a thermopile type infrared sensor develop by Panasonic which detects the amount of infrared rays. This high precision sensor is based on advanced MEMS Microelectromechanical systems) a package on a microscopic devices technology. Grid-eye has 8×8 64 pixel temperature detection achieved on a 2 dimensional view of 360 degree horizontal/vertical dimension area that can be easily be manage direct connection using 2wire/i2C protocol on ease to your Microcontroller, Microcomputers, etc.
This device is useful for Thermal imaging, Robotics, People Counting, Thermal Mapping, Medical Imaging, Security Systems, Lightning Control, Internet of Things Sensor Application, Human Motion Detection, Industrial Automatons, Home Appliances, Home & Building Automations, and Automotive. Etc.
Required Components
- Arduino Microcontroller, NodeMCU, Teensy Board, TeensyDuino, ESP8266 12, 12E, ESP8266 NodeMCU, ESPDuino, ATMEGA328 16/12, ATMEGA32u4 16/8/ MHz, ESP8266, ATMEGA250 16 MHz, ATSAM3x8E, ATSAM21D, ATTINY85 16/8 MHz (Note: The Diagram below is using NANO. (please refer to the respective pin-outs)
- AMG88xx Sensor / Module
- Capacitors (See the diagram below for soldering manually)
- Resistors (See the diagram below for soldering manually)
- Jumper Wires / DuPont Wires
- Prototyping PCB board
Wiring Guide
Source Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
#include <Wire.h> byte gridtempLow; byte gridtempHigh; char addr = 0x69; //Grid Eye I2C Address float gridtempCelsius; float averagetemp; int irqPin = 2; // IRQ Pin int pwmPin = 3; // PWM Pin void setup() { Serial.begin(115200); Serial.println("14CORE | GRID EYE 8X8 SENSOR"); Serial.println("Starting...."); delay(500); Serial.pirntln("---------------------------- "); delay(1000); Serial.println("Initializing wire continuous...."); Wire.begin(); pinMode(irqPin, INPUT); pinMode(pwmPin, OUTPUT); // analogWrite(pwmPin, 255); } void loop() { Serial.println("GRID EYE IR TEMP >"); gridtempLow = 0x80; averagetemp = 0; for(int pixel = 0; pixel < 64; pixel++){ Wire.beginTransmission(addr); Wire.write(gridtempLow); Wire.endTransmission(); Wire.requestFrom(addr, 2); byte lowerLevel = Wire.read(); byte upperLevel = Wire.read(); /* Wire.beginTransmission(addr); Wire.write(gridtempHigh); Wire.endTransmission(); Wire.requestFrom(addr, 1); byte upperLevel = Wire.read(); */ int temperature = ((upperLevel << 8) | lowerLevel); // int temperature = temp - 2048; if (temperature > 2047){ temperature = temperature - 4096; // temperature = -(2048 - temperature); } gridtempCelsius = temperature * 0.25; Serial.print("Grid Temp in Celsius > "); Serial.println(gridtempCelsius); Serial.print(""); if((pixel+1)%8 == 0){Serial.print("\r\n");} switch(pixel){ case 27: //pixels case 28: //pixels case 35: //pixels case 36: //pixels averagetemp += gridtempCelsius; break; default: break; } gridtempLow = gridtempLow + 2; } Wire.beginTransmission(addr); Wire.write(0x0E); Wire.endTransmission(); Wire.requestFrom(addr, 2); byte uplevel = Wire.read(); byte lowerLevel = Wire.read(); /* Wire.beginTransmission(addr); Wire.write(0x0F); Wire.endTransmission(); Wire.requestFrom(addr, 1); byte lowerLevel = Wire.read(); */ int tempst = ((lowerLevel << 8) | uplevel); float celsiusst = tempst * 0.0625; Serial.print("Celsius > ") Serial.println(celsiusst); Serial.print("\r\n\r\n"); averagetemp *= 0.25; delay(25); } |
i2C Device Finder / Scanner
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <Wire.h> void setup() { Serial.begin(9600); Serial.println("14CORE | i2C SCANNER"); Serial.println("Starting...."); Serial.pirntln("--------------------"); delay(1000); Wire.begin(); while (!Serial); // Scan i2C Address Serial.println("Initializing I2C Scanner"); delay(1000); } void loop() { byte error, address; int indevice; Serial.println("14CORE | Scanning please wait..."); indevice = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("14CORE | I2C device found at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); indevice++; } else if (error==4) { Serial.println("14CORE | Unknow error at address 0x"); if (address<16) Serial.print("0"); Serial.println(address,HEX); } } if (indevice == 0) Serial.println("14CORE | No I2C devices found\n"); else Serial.println("14CORE | Scanning Done\n"); delay(5000); // wait 5 seconds for next scan } |
Downloads
- Download AMG88XX Datasheet | PDF
- Download Grid Eye AMG88XX Application | Processing Code | Linux 32bit | Linux 64bit | Windows 32bit | MACOSX
- Download AMG88XX Application Manual | PDF