AMG8833 Arduino Processing Program Code Schematic

Posted on

Panasonic AMG8833 Arduino

AMG8833 Arduino Processing Non-Interpolation – AMG8833 is an infrared array sensor manufactured by Panasonic. The AMG8833 sensor has 64 pixels with a resolution of 8×8.

The AMG8833 sensor can be used in various applications that can detect temperature without touch an object.

The AMG8833 sensor is very good for use in temperature selection applications, electronics manufacturing, detecting the position of humans or objects and others.

This Panasonic AMG8833 Infrared array sensor has a maximum value:

  • The maximum VDD voltage is 6.5 VDC
  • Input Voltage (SCL, SDA, AD_SELECT) up to 0.3 VDC
  • INT and SDA currents up to 10mA.

AMG8833 Arduino Circuit

AMG8833 uses I2C to communicate with the microcontroller. The pins used are SCL and SDA. Please assemble the sensor to Arduino as in the following image.

AMG8833 Arduino Processing Code Schematic Non-Interpolation

Download AMG8833 Library

To make easier to work in accessing the data from the amg8833 sensor, we need a library. There is already a library available below, please download it.

Download AMG8833 Library

Then, include the library into your arduino IDE by steps:

  • Click the Sketch menu
  • Then select Include Library
  • Click Add ZIP Library
  • Navigate to the downloaded library file
  • Click OK

Now, I have coded the program below. There are two program codes, namely, for Arduino IDE and for Processing.

AMG8833 Arduino Code

#include <Wire.h>
#include <SparkFun_GridEYE_Arduino_Library.h>

GridEYE grideye;


void setup() {
  Wire.begin();
  grideye.begin();
  Serial.begin(115200);
}

void loop() {
  readAMG();
}

void readAMG() 
{
  for (unsigned char i = 0; i < 64; i++) 
  {
    Serial.print(grideye.getPixelTemperature(i));
    Serial.print(",");
  }
  Serial.println();
}

AMG8833 Processing Code

/*
Chip Piko Thermal Camera Non Interpolation
 This code is editing from the amg8833 sparkfun library
 */
import processing.serial.*;

String myString = null;
Serial myPort;  
PFont f;
float split;
int q;

float[] show =  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
float[] temps =  {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


void setup() {
  size(600, 680);  
  f = createFont("Arial", 16, true);


  // Print a list of connected port in serial monitor processing
  printArray(Serial.list());

  //In this case, I using /dev/ttyUSB0 in linux
  //In serial monitor this processing show in array 32
  //If you windows user, please change Serial.list()[your number]
  myPort = new Serial(this, Serial.list()[32], 115200);
  myPort.clear();
  myString = myPort.readStringUntil(13);
  myString = null;
  // change to HSB color mode, this will make it easier to color
  // code the temperature data
  colorMode(HSB, 360, 100, 100);
}


void draw() { 
  if (myPort.available() > 64) {
    myString = myPort.readStringUntil(13);

    if (myString != null) {
      String splitString[] = splitTokens(myString, ",");


      // Map a temperature from AMG8233
      for (q = 0; q < 64; q++) {
        split = (float(splitString[q]));
        show[q] = float(splitString[q]) ;

        //Map a Red color pixel 
        if (split >= 28.5) {
          temps[q] = map(float(splitString[q]), 28.5, 35, 30, 0);
        }

        //Map a Orange color pixel 
        if ((split >= 27.50) && (split <= 28.2)) {
          temps[q] = map(float(splitString[q]), 27.50, 28.2, 50, 30);
        }

        //Map a Blue color pixel 
        if (split <= 27.250) {
          temps[q] = map(float(splitString[q]), 20, 27.25, 240, 180);
        }

        println(split);
      }
    }
  }



  int x = 0;
  int y = 80;
  int i = 0;
  background(0);   // Clear the screen with a black background

  while (y < 630) {
    fill(0, 0, 0);
    rect(0, 0, 220, 80);
    textSize(40);
    fill(0, 0, 100); 
    text("CHIP PIKO", 15, 45);

    textSize(16);
    text("www.chippiko.com", 50, 65);

    fill(0, 0, 100);
    rect(225, 0, 600, 80);

    textAlign(LEFT, CENTER);
    textSize(16);
    fill(0, 0, 0); //HBS

    text("Thermal Camera Non Interpolation", 240, 11);
    line(220, 27, 600, 27);
    line(330, 27, 330, 55);
    line(460, 27, 460, 55); 
    text("Piksel : 8x8    Range : 0-80°C     Accuracy : ±2.5°C", 240, 39);

    line(220, 55, 600, 55);
    text("Labuhan Haji - Aceh , 8:57pm 2 November 2019", 240, 65);


    while (x < 550) {
      fill(temps[i], 100, 100);
      rect(x, y, 75, 75);

      //Show Temp Value
      textAlign(CENTER, CENTER);
      textFont(f, 11);
      fill(0);
      text((show[i]), (x+37.5), (y+37.5));

      //Show Pixel Digit
      textAlign(LEFT, LEFT);
      fill(100);
      text(i, (x+3), (y+12));

      x = x + 75;
      i++;
    }

    y = y + 75;
    x = 0;
  }
} 

The result is:

AMG8833 Arduino Processing Program Code Schematic

AMG8833 Datasheet:

If you need a datasheet, I attach the AMG8833 datasheet below.

Hopefully this AMG8833 Arduino Processing article is useful.