Links to previous blog posts:
This is part IV
I have described and showed the custom built IR thermometer so far. It doesn't look perfect, but does the job. We use it every day at home, especially for the baby related measurements.
After I built the first prototype I realized that many aspects of it could be improved. This is a perfect opportunity to perform another iteration.
What can be improved
I gathered a list of requirements:
- Design that could be integrated into a box easier. Building a prototype is one thing, but making something that looks like a product is a completely different story.
- Device that would better fit into hand and not covering the measured object that much. Make it a bit smaller, use smaller batteries
- Unify the component size. The first revision used both 1206 and 0805 components. It is not a good idea to maintain stock of multiple sizes.
- Reverse polarity protection. At first, I used locking connectors for the battery holder connection: https://uk.farnell.com/wurth-elektronik/61900211121/header-2-54mm-locking-2way/dp/1841369?st=connector%202,54%20locking. However, I had to change it to a non-locking type, because the two pin variant was very loose. I haven't seen such a bad connection for the famous 3 or 4-pin computer fan cables.
- Remove unnecessary components.
- Have the possibility to use MLX90614 in TO-39 can, but also MLX90615 in TO-46 can. I got some MLX90615 from a friend. Here is a comparision sheet for those, who are interested: https://www.melexis.com/-/media/files/documents/product-flyers/quick-reference-infrared-temperature-sensors.pdf
IR thermometer - revision B
All the mentioned requirements led me to creating a next revision.
First of all, here is the schematics. I wanted to make it more pretty this time, because the last one was just a wiring mess.
The schematics was then translated into a completely new PCB design.
What is new
- Mounting holes in the corners. I haven't decided yet, whether to make my own box or use an existing one (at this point I guess the choice is limited, so I will have to somehow create something myself).
- Place for battery pack holder with mounting holes.
- Removed unnecessary LED from the first revision.
- PCB adjusted for using one or even two thermometer sensors at a time (they have different SMBus address).
- Design is more "remote control" like to fit better in the hand.
- Display 8x2 characters instead of 16x2.
- Debug connector for SMBus, just to have the possibility to externally debug the bus.
- All capacitors and resistors are 0805 size.
- Ground planes on both copper top and bottom layers. Connected using many vias.
- Better filtering capacitors PCB layout to eliminate ground loops.
After a week, the PCBs were ready. Quite different than the first one, don't you think?
This is what the thermometer looks like after the assembly:
What currently works is only the ambient temperature measurement (second line of the 8x2 character LCD). That is why I added the Sensirion thermometer for comparison.
The object temperature (first line of the LCD) is OK, but the emissivity is set to a not meaningful value of 0,09. Changing the emissivity doesn't work yet. The API is finished, however, I am struggling with the button control functions (described below).
I put everything into a shared Google Drive folder. IRthermometer v2.T3001 is a schematics and PCB file. PSoC project will be added after I get the project into a better working state. (Meantime it is possible to explore the older revision project.)
What went wrong
- I chose an impossible to obtain LCD. There are two types of LCD in the 8x2 characters format. They either have a connector above the LCD, or on the side. I had the first type lying in my component box, so I decided to use it. However, this type doesn't have the charge pump (I need to use a 3,3 V version) if you want to buy the LCD from official distributors. My LCD was some garbage bought from China on eBay. I have to buy a different LCD in the other format and use wires instead of a connector.
- Second, I used a component symbol and footprint in the CAD program drawn by some user. Even if I got the LCD in the format I needed, the mounting holes were shifted a few millimeters, so I could mount the LCD in 1 or 2 stands of 4. All the LCDs have exactly the same format, so the person that drew it didn't bother to try it or delete it after finding out that is doesn't fit. Next time, I will draw the components myself, as almost all engineers do.
- I am currently stuck and not sure, how to deal with the button controls. Here is the current situation: the buttons are not debounced in HW. Also, an interrupt is needed to wake up from the stop mode. In addition to that, I use button interrupt to for waking from the 5 seconds sleep mode before entering the stop mode. More about the firmware state machine is here: "No lies" IR Thermometer - part III , the diagram makes it pretty clear (I believe).
- PSoC offers a Debounce button component, but of course the interrupt input cannot be debounced. It doesn't matter for "wake up from stop mode", but it does in waking up from the "wake up from 5 second sleep" mode.
- Should the buttons react to the button press, or perform something after the button release? Is it a good idea to use the button interrupt at all? Maybe I could set a periodic timer and debounce the buttons every time the code enters the interrupt (I don't mean waiting to debounce, but just checking how much time passed since the last interrupt or something similar).
- I mixed functionality that needs interrupts and debounced buttons and just struggle to get away. The rest of the functionality (emissivity changing etc. is ready and working).
Here is one variant of my work in progress PSoC ideas:
Thank you for reading. Any help is appreciated.