Skip to content
Jaap Daniëlse edited this page May 19, 2022 · 45 revisions

AMG8833 Thermal Camera

AMG8833ThermalCamera
AMG8833 Thermal Camera Based on the AMG8833 Grid-EYE sensor by Panasonic I built a simple thermal camera by hooking up the sensor module to an Arduino Uno (4 wires). Using VirtualPanel as display and control panel it was easy to build a usable camera. Part of the challenge was to make this work on a ATMega328 (Uno, Nano) which has limited memory and processing power. I think I succeeded although the frame rate could be better.

AMG8833 Module

The AMG8833 Grid-EYE is a low cost infrared sensor array developed by Panasonic. For use with microcontrollers it is integrated in a module with level shifters and voltage regulator allowing 3 - 5v power and data.

The sensor has only 64 (8x8) pixels, which is not much but enough for experiments, simple to work with and it is cheap. I bought my module from Aliexpress for around $25,- similar modules are available from Sparkfun and Adafruit although a bit more expensive.

AMG8833 Module

The module can be hooked up to an UNO (just 4 wires) to retrieve the temperature data.

AMG8833 library

Searching in the Arduino IDE library manager I found 3 AMG8833 libraries and chose randomly the Melopero. It has a few quirks but works fine for this project.

Display and control

For display and control I chose VirtualPanel which is another project of mine. Part of my intend with this project was see if VirtualPanel could cope with this type of data. VirtualPanel is designed as a generic UI for use with Arduino IDE programmed microcontrollers to support experimenting and prototyping. There is no need to program anything on the Windows side. Writing only relatively simple Arduino code is all it takes. With the Melopero temperatureMatrix example as a starting point I was able to create a basic working camera in less than an hour. After reaching this point I spent (to be honest) a multitude of this time in refining and improving.

Interpolation

The sensors 8 x 8 pixels is not an abundance. I however found lots of examples of it using interpolation. I created a very simple implementation of this going to 29 x 29 pixels (3 interpolated pixels between the measured ones).

AMG8833 interpolationS
Interpolation strategy

This was surprisingly a big improvement but as a consequence the frame rate dropped significantly from about 10fps to 1fps. This is largely to blame on the limited processing power of the UNO and the VirtualPanel protocol being not (yet) optimized for streaming data. On the plus side I could set the sensor in its 1fps mode which implements a rolling average. From the first implementation I created a more generic one which is used for both 29 x 29 pixels and 64 x 64 pixels (which is the maximum achievable given the memory constrains). The latter is unfortunately quite slow.

Simple build

I started with a simple hookup to an Uno but later I built a very simple unit with just a (fero) printboard as chassis (no casing) which made it easier to handle. You can probably think of a more robust and even handier construction but this was good enough for me.

IMG_20220409_160002ss

Manual/Quick reference: https://github.com/JaapDanielse/AMG8833-Thermal-Camera/wiki/Reference
Building instructions: https://github.com/JaapDanielse/AMG8833-Thermal-Camera/wiki/Build

Clone this wiki locally