This is a simple IR (infrared) thermal camera project for the ODROID-GO handheld ESP32 system. It allows saving of data to an SD card as well as having a basic Bluetooth interface to wirelessly get data off the camera to a computer, tablet or mobile phone. It is based on the MLX90640 32x24 pixel infrared thermal array modules that you can get relatively inexpensively from many online shops. Below is a photo of this camera in action.
Using the Arduino code
There are two ways to use the thermal camera code. The really simple way is to go to the 'FW file' folder and copy the 'goircam.fw' file to the firmware folder on your ODROID-GO SD card. Then, when you turn the ODROID-GO on, while holding down the B button, you should get an option to load the camera firmware. Obviously you will need the camera built and attached for the firmware to run.
The second, more advanced, way is for people who want to use the Arduino IDE to edit or build the firmware as an Arduino Sketch. To do this, use the files in the 'Arduino code' folder as you would do for coding any other Arduino project you have. All of the details are available on the ODROID-GO Wiki site for setting up the Arduino IDE for the ODROID-GO.
If you are using the Arduino IDE method and want to create a firmware file, as described on the ODROID-GO Wiki site, the graphics for use with the MKFW utility are included in the 'Graphics' folder.
Building the thermal camera module
Building the camera is very simple, as it uses just the MLX90640 module, with wires for ground, VCC, SCL and SDA (I2C). According to the ODROID-GO Wiki, the header pinout is as follows:
Header Pin Function 1 GND 4 SDA 5 SCL 6 VCCOnce you have things wired up and tested, the simplicity of the circuit makes it very easy to solder up some header pins onto a piece of veroboard to make a more robust connector for the ODROID-GO header socket. Below is a photo of how I did that.
I put the header pins on top of the veroboard and soldered the wires to the track on the back, which meant the wires did not obstruct the connection, although you could just use a bigger piece of veroboard, too.
Making a 3D printed enclosure
The 'Case 3D model' folder includes a couple of files I used to make a 3D printed enclosure. One of them is a ready-to-print STL file. This file is designed for the Pimoroni MLX90640 module I used. If that does not work for your needs, or the MLX90640 module you have, the OpenSCAD file is included so you can make a customized version for your project. The camera module fits, as shown in the photo above. This photograph also shows the correct orientation for the module. By cutting the veroboard to the right size, it fit perfectly into the back of my enclosure, leaving the header pins properly positioned (see Photo 3). The veroboard was glued in place and it was necessary to check the pin’s alignment before the glue cured.
The ODROID-GO Wiki is a useful resource for all Go things: https://wiki.odroid.com/odroid_go/odroid_go
The Wiki page for a 16x2 I2C LCD project contains details of how to connect an I2C module to the ODROID-GO header: https://wiki.odroid.com/odroid_go/arduino/09_16x2lcd_i2c
The 3D printed case can also be downloaded from Thingiverse: https://www.thingiverse.com/thing:3648653