-
Notifications
You must be signed in to change notification settings - Fork 6
Home
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.
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.
The module can be hooked up to an UNO (just 4 wires) to retrieve the temperature data.
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.
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.
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).
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.
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.
Manual/Quick reference: https://github.com/JaapDanielse/AMG8833-Thermal-Camera/wiki/Reference
Building instructions: https://github.com/JaapDanielse/AMG8833-Thermal-Camera/wiki/Build