THRmAL (Thermal Handheld Rendering meets Additional Lasers) is a handheld, low resolution thermal viewer, utilizing the Panasonic GridEYE thermopile array. It features a color OLED display, semi-modular design, and four lasers which mark the corners of the sensor's field of view. I originally built it to check how even the heating is on printer beds, but it's also useful for checking PC thermal performance, finding hot spots on devices, and many other applications.
I built it with as many parts from my parts drawer as I could, so certain aspects of the electronics are suboptimal (such as the use of a 5V microcontroller). If you plan on making this yourself, and you don't have the same parts lying around I did, you might want to substitute the Arduino Nano with a 3.3V microcontroller, and remove the level shifter and 3.3V voltage regulator from the design. STEP and Eagle files are available so that you can tweak the entire design to match whatever parts you have on hand. I'd recommend measuring your parts and checking the STL files before printing anything, in case you need to make any adjustments.
Sensor_Cover, Shroud_Left, Shroud_Right, and Skeleton need supports, the rest of the parts do not.
The keycaps should be printed together, swapping filament right after you reach the embossed symbols. Consider using a finer layer height to make the swap easier if your printer doesn't support pause commands.
Print Handle_Grip in the softest material you can print (I used 80A TPE). If you have a bowden printer, you might still be able to get away with 95A TPU (in my experience, Creality printers handle TPU just fine). You could even mold the grip in silicone for the ultimate squishy handle experience, if you really wanted to.
I printed all the solid parts in Protopasta Highfive Blue HTPLA and Atomic Filament Carbon PETG, although material choice doesn't really matter in terms of functionality.
What you'll need
- 1 Sparkfun GridEYE breakout
- 1 Qwiic cable
- 1 SSD1331 96x64 display breakout (I used the BephaMart board, but I'd imagine most generic chinese boards should work)
- 4 6mm laser diodes
- 1 Arduino Nano or Nano clone
- 1 Level shifter board. Any board that uses Sparkfun's pinout should work.
- 1 3.3V TO-92 voltage regulator
- 3 OSEPP tactile buttons or similar. It appears Sparkfun also sells a similar set, which should work.
- 1 LM2596 buck converter board
- 1 9V battery connector
- 1 9V battery
- 3 pairs of JST-PH-2.0 2-pin cables and their through-hole jacks
- 1 small 4-pin cable of your choice (both the male and female ends, obviously) Alternatively, if you don't have any 4 pin connectors (I didn't), you can use 2 2-pin cables (I used small 2-pin JST cables)
- 1 simple SPDT 2-position slide switch
- Male and female headers (15-pin male and female for each of the 2 sides of the Nano, 7-pin male and female for the display, 6-pin male for each side of the level shifter). You could technically just solder everything in place, but I highly recommend making the OLED and Arduino removable, since the display can get damaged or wear out, and it's really hard to reach the USB port when everything is assembled. I'd recommended simply buying some 40 pin headers and cutting them to size.
- 1 perfboard with 2 M2 screw holes about 16mm apart centre to centre (I used the most narrow board from this ELEGOO set
- M2 and M3 fasteners. If you don't already have a bunch of these laying around, you might as well go buy a whole variety pack instead of just the ones you'll need for this project.
- Wire, solder, shrink wrap, etc.
Step 1: Assemble the button board
Solder your tactile buttons, with one button every 6 pins on the perfboard (0.6 inch centre to centre spacing, or almost touching). Cut off the excess perfboard. Solder a common ground and 3 signal wires from the perfboard to your 4 pin connector. Press the keycaps onto the buttons.
Step 2: Populate the main PCB
If you haven't already added male headers to your Nano, do that. Solder the JST connectors and voltage regulator to the board, followed by the wires from the Qwiic cable, OLED cable, and button cable. You'll want about 40mm of length on the Qwiic cable. Next, solder the Arduino socket and level shifter, followed by the buck converter. All components should be on the front of the PCB (the side marked "GridEYE Handheld Viewer") except for the buck converter.
Step 3: Glue the lasers to the sensor mount
Place a drop of glue (I used cyanoacrylate) on each laser mounting spot, making sure not to put too much on (we don't want to get any glue on the front plate). Thread each laser's wires through the hole, and settle the laser in place. Put the cover on the sensor plate to align the lasers. Wait for the glue to dry, and remove the front cover.
The completed sensor and laser assembly, with the cover removed.
Step 4: Solder the laser wire
Solder all 4 lasers in parallel to a JST cable. This doesn't need to be super long, since the laser connector is right at the front of the device.
Step 5: Assemble the front end of the device
Mount the PCB to the skeleton with 3 M2 screws. The frame of the skeleton should be on the same side of the PCB as the Arduino. Mount the laser-sensor assembly to the skeleton with 2 M3 screws and nuts, placing the nuts into the hexagonal holes on the skeleton.
Step 6: Make the OLED connector
Solder a male header to the back of the display board if it doesn't already have one. Socket a female header onto the display board, and test fit the board by sliding two M2 screws into the top holes of the screen, screen mount, and skeleton. Trim your display wires from the main board to be able to easily reach their spots on the header. Solder the wires from the board to the female display header (The connections on the board are GND, 5V, SCK, MOSI, RST, DC, CS from top to bottom). You may want to remove the PCB from the skeleton temporarily to do this. Alternatively, if you have 7 pin female Dupont connectors, you could crimp that on instead (although that might necessitate adding a larger space for the cable).
Step 7: Finish assembling the core of the device
Use 2 M2 screws to mount the button board to the display mount. Fish the wires from a JST cable through the power switch hole in the display mount, and solder them to the switch. Pull the switch into place, and optionally add glue for security. Connect the display connector. Mount the display, display mount, and skeleton together with 4 more M2 screws. Connect the button cable together, plug the power switch and lasers into the PCB, and the Qwiic cable to the top of the GridEYE breakout.
The front of the PCB, populated and mounted to the rest of the device.
Step 8: Assemble the handle
Solder a JST cable to the 9V battery connector. Push the JST connector through the hole in the handle core, and through the hole in the handle mount. If the pegs on the mount don't form a good friction fit with the holes in the core, glue them together. Connect a 9V battery and slide the grip onto the handle core.
The assembled handle.
Step 9: Install the handle
Slide the handle onto the core of the device from the front. Plug the battery into the PCB.
Step 10: Flash your microcontroller
Open the included .ino file in the Arduino IDE, and install the Adafruit SSD1331, Adafruit GFX, and Sparkfun GridEYE libraries. Calculate what fraction of your laser's wattage is safe for use in what is essentially a laser pointer (look up laser power classes for more info on this subject), and multiply it by 255 to get a PWM value. Replace the default value of LASER_POWER with your calculated PWM value. Flash the firmware to your Nano. Socket the Nano into the main PCB.
Step 11: Install the outer panels
Push the sensor cover, display cover, and side shrouds into place. Your device is now finished! Power it on and try it out!