/arduino-infrared-array-sensor

Arduino with infrared array sensor

Primary LanguageC++Apache License 2.0Apache-2.0

Arduino with infrared array sensor

AMG8833 is an infrared array sensor product from Panasonic. It is very popular among Arduino users.

Development environment

  • Arduino IDE on RasPi 3.
  • vi and g++ on RasPi 3.
  • OpenCV3 for thermography GUI development.

Note: you have to install OpenCV3 on Raspi3. In my case, I built OpenCV3 on RasPi3 taking a half day.

Architecture

    [GUI/RasPi3]/dev/ttyACM0----VCP/USB----[Arduino]----I2C----[AMG8833]

Data frame format (raster-scan 8x8 pixel image) over VCP/USB

The program on Arduino transfers 8x8 pixel image data to RasPi over VCP/USB at 10fps in the following data format:

   [BEGIN(0xFE)][byte#0]...[byte#63][END(0xFF)]

Arduino shield of AMG8833

=> schematic

Note: the shield is powered by 3V3 pin on Arduino UNO. Although Arduino UNO is a 5V system, the circuit works.

Code

Building and running GUI on Raspberry Pi

This is me!

$ cd raspi
$ make
$ bin/thermo -m 64 -t -b

GUI developed in a native language (C/C++) runs fast on RasPi 3!

Bicubic interpolation

The resolution of AMG8833 is only 8x8 pixels. I applied bicubic interpolation to the original 8x8 pixel image for higher resolution.

This is my right hand.

$ bin/thermo -m 1 -i 3

With "-H" option, the GUI uses COLORMAP_HOT instead COLORMAP_JET:

$ bin/thermo -m 3 -i 2 -H -b

Binarization

The GUI supports binarization, useful for counting the number of people in a room:

$ bin/thermo -m 32 -H -B

Diff between frames: gradient(=velocity)

The GUI supports image diff between frames, useful for detecting motion of something:

Waving my hand over the sensor.

$ bin/thermo -m 32 -d