{"id":16,"date":"2019-01-19T21:18:34","date_gmt":"2019-01-19T21:18:34","guid":{"rendered":"https:\/\/ryan.hattie.codes\/?p=16"},"modified":"2021-12-06T05:10:40","modified_gmt":"2021-12-06T05:10:40","slug":"thrmal-a-3d-printed-thermal-viewer-with-300-more-lasers-than-the-leading-brand","status":"publish","type":"post","link":"https:\/\/raelynn.hattie.codes\/blog\/2019\/01\/19\/thrmal-a-3d-printed-thermal-viewer-with-300-more-lasers-than-the-leading-brand\/","title":{"rendered":"THRmAL: A 3D Printed Thermal Viewer with 300% More Lasers Than the Leading Brand"},"content":{"rendered":"\n<p>Want to check how even the heating of your printer bed is, or where the heat is escaping your house, but don&#8217;t want to pay hundreds of dollars on a FLIR camera? Ever looked at your laser-guided infrared thermometer and thought to yourself, &#8220;golly, this device only has about 25% of the number of lasers I need&#8221;? Introducing Thermal Handheld Rendering meets Additional Lasers (THRmAL), an AVR-powered handheld thermal imaging device based on Panasonic&#8217;s Grid-EYE line of thermal sensors. It has a number of advantages over other thermal imaging solutions:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>4 lasers to clearly mark the corners of the sensor&#8217;s FOV<\/li><li>64x the number of pixels found in an infrared thermometer (assuming said thermometer could be considered to have 1 pixel)<\/li><li>Comfy TPE grip<\/li><li>Contains an unnecessary quantity of carbon fibre<\/li><\/ul>\n\n\n\n<p>THRmAL was primarily constructed from components I already had in my parts drawer (and I expect many other makers do too), meaning the only real costs were the Grid-EYE breakout, OLED panel, and custom PCB fabrication.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Electronics<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Sensor<\/h3>\n\n\n\n<p>THRmAL uses the <a href=\"https:\/\/na.industrial.panasonic.com\/products\/sensors\/sensors-automotive-industrial-applications\/grid-eye-infrared-array-sensor\">Panasonic AMG8833<\/a> sensor mounted on Sparkfun&#8217;s <a href=\"https:\/\/www.sparkfun.com\/products\/14607\">Qwiic breakout board<\/a>, which comes with a handy mounting holes and a 4-pin JST connector. Surrounding the Grid-EYE are 4 lasers angled to match the corners of the sensor&#8217;s 60\u00b0 horizontal and vertical FOV. This way, when the lasers are powered, 4 points are projected to form a square (from the THRmAL&#8217;s perspective) on the target surface.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"684\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Sensor-1024x684.png\" alt=\"\" class=\"wp-image-30\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Sensor-1024x684.png 1024w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Sensor-300x200.png 300w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Sensor-768x513.png 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Sensor-830x554.png 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Sensor-230x154.png 230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>The thermal sensor and lasers mounted on the end of THRmAL. I was lucky enough to get one of the slick black SparkX boards before the Grid-EYE became a permanent Sparkfun product.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Display and Interface<\/h3>\n\n\n\n<p>The display is a SSD1331 OLED module running in SPI mode (despite the fact that the pins are labeled SDA and SCL). Below it are 3 tactile switches with custom keycaps (produced using a filament swap on the first layer of the iconography) and a power switch. Unfortunately, updating the entire display each frame means THRmAL can only achieve approximately 3 frames per second, but I did come up with a workaround for this (which I&#8217;ll explain in the Software section).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"684\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Screen-1024x684.png\" alt=\"\" class=\"wp-image-31\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Screen-1024x684.png 1024w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Screen-300x200.png 300w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Screen-768x513.png 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Screen-830x554.png 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Screen-230x154.png 230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>The OLED display and buttons with the rear faceplate removed. Please excuse the fingerprints.<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">PCB<\/h3>\n\n\n\n<p>The core of almost any electronics project is a circuit board of some sort, and THRmAL is no exception. THRmAL&#8217;s PCB is home to:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>A 5V Arduino Nano clone that I keep my parts drawer stocked with at all times (I get them in packs of 5 or 10)<\/li><li>A logic level shifter to let the 5V Nano talk to the 3.3V sensor (I am wholly aware that just using a 3.3V uC would let me avoid the need for level shifting, I just didn&#8217;t have handfuls of 3.3 uCs at the time)<\/li><li>A buck converter to allow for variable input voltages to be used efficiently (currently the THRmAL runs on a 9V battery)<\/li><li>A slew of connectors to interface with the sensor, display, buttons, etc<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/DSC00019-1024x576.jpg\" alt=\"\" class=\"wp-image-20\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/DSC00019-1024x576.jpg 1024w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/DSC00019-300x169.jpg 300w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/DSC00019-768x432.jpg 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/DSC00019-830x467.jpg 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/DSC00019-230x129.jpg 230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>An early protoboard version of THRmAL. Note the bulky overkill voltage regulator. This was replaced with a TO-92 regulator in the final design.<\/figcaption><\/figure>\n\n\n\n<p>After quickly testing out the electronics on a breadboard, and later a protoboard, I drew up a PCB design in EAGLE and sent it off to <a href=\"https:\/\/oshpark.com\/\">OSH Park<\/a> for fabrication.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"388\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_BRD-1024x388.png\" alt=\"\" class=\"wp-image-24\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_BRD-1024x388.png 1024w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_BRD-300x114.png 300w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_BRD-768x291.png 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_BRD-830x314.png 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_BRD-230x87.png 230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>The PCB layout for THRmAL<\/figcaption><\/figure>\n\n\n\n<p>A few weeks later, and I had a promptly produced perfect purple PCB, as promised.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"393\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_PCB-1024x393.png\" alt=\"\" class=\"wp-image-35\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_PCB-1024x393.png 1024w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_PCB-300x115.png 300w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_PCB-768x294.png 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_PCB-830x318.png 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_PCB-230x88.png 230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>A fresh, unpopulated THRmAL PCB. OSH Park always does such nice work.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"684\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Nano_downscaled-1024x684.png\" alt=\"\" class=\"wp-image-27\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Nano_downscaled-1024x684.png 1024w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Nano_downscaled-300x200.png 300w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Nano_downscaled-768x513.png 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Nano_downscaled-830x554.png 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Nano_downscaled-230x154.png 230w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>The finished PCB, populated with all the components, and a Nano socketed in<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Body<\/h2>\n\n\n\n<p>The body of THRmAL is constructed from 2 main materials: <a href=\"https:\/\/atomicfilament.com\/products\/carbon-fiber-black-petg-pro\">Atomic Filament Carbon Fiber PETG<\/a> and <a href=\"https:\/\/www.proto-pasta.com\/products\/metallic-htpla-v3-highfive-blue\">Proto-pasta Highfive Blue HTPLA<\/a>. The contrast between the metallic flake of the Highfive Blue and the dark semi-matte surface of the carbon PETG is something not easily captured in a photo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"741\" height=\"1024\" src=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Profile-741x1024.png\" alt=\"\" class=\"wp-image-19\" srcset=\"https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Profile-741x1024.png 741w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Profile-217x300.png 217w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Profile-768x1061.png 768w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Profile-830x1146.png 830w, https:\/\/raelynn.hattie.codes\/blog\/wp-content\/uploads\/2019\/01\/THRmAL_Profile-230x318.png 230w\" sizes=\"(max-width: 741px) 100vw, 741px\" \/><figcaption>The full device, in case you forgot what it looked like.<\/figcaption><\/figure>\n\n\n\n<p>The exterior consists of 2 PLA faceplates and 2 PETG side panels, which are friction-fit and can easily be removed to unsocket the Nano, tune the buck converter, or simply show off the internals. Additionally, the handle is attached by sliding it onto a rail from the front, meaning that alternative handles with various battery types could be installed without tools (although I haven&#8217;t had any reason to design a handle other than the 9V battery one). There is not a single visible fastener on THRmAL when it is fully assembled.<\/p>\n\n\n\n<p>The handle grip is made out of <a href=\"https:\/\/spool3d.ca\/tpe-1-75mm-black\/\">Spool3D 80A TPE<\/a>, and feels soft and squishy in the hand. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Software<\/h2>\n\n\n\n<p>THRmAL&#8217;s software is fairly basic and slapped together, but it&#8217;s still worth mentioning. I more or less just glued the Adafruit SSD1331 library and the Sparkfun GRID-Eye library together with a simple Arduino sketch. THRmAL has a view button that lets you switch between 4 view modes:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Red-blue fullscreen<\/li><li>Greyscale fullscreen<\/li><li>Red-blue mini<\/li><li>Greyscale mini<\/li><\/ol>\n\n\n\n<p>The &#8220;mini&#8221; modes are half the size on each axis, meaning it only uses 1\/4 of the number of pixels required for the fullscreen modes. This lets us achieve around the 10FPS of the sensor, giving a much smoother viewing experience.<\/p>\n\n\n\n<p>The hold button simply pauses rendering, similar to how releasing the trigger of an infrared thermometer will hold the current sample. You&#8217;ll never guess what the laser button does&#8230;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Files<\/h2>\n\n\n\n<p>If you want to build your own THRmAL, I&#8217;ve posted all the project files and a build guide on <a href=\"https:\/\/www.thingiverse.com\/thing:3150956\">Thingiverse<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Want to check how even the heating of your printer bed is, or where the heat is escaping your house, but don&#8217;t want to pay hundreds of dollars on a FLIR camera? Ever looked at your laser-guided infrared thermometer and thought to yourself, &#8220;golly, this device only has about 25% of the number of lasers<\/p>\n<div class=\"blog-grid-button\"><a class href=\"https:\/\/raelynn.hattie.codes\/blog\/2019\/01\/19\/thrmal-a-3d-printed-thermal-viewer-with-300-more-lasers-than-the-leading-brand\/\">Read More <i class=\"fa fa-arrow-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":19,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2,4,3],"tags":[6,5,9,8],"class_list":["post-16","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-3d-printing","category-hardware","category-projects","tag-3d-printing","tag-diy","tag-electronics","tag-grid-eye"],"_links":{"self":[{"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/posts\/16"}],"collection":[{"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":8,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/posts\/16\/revisions"}],"predecessor-version":[{"id":36,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/posts\/16\/revisions\/36"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/media\/19"}],"wp:attachment":[{"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/media?parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/categories?post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/raelynn.hattie.codes\/blog\/wp-json\/wp\/v2\/tags?post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}