Picture of MLX90614 sensor

This project is to build a hand-held medium temperature (up to 380°C) IR thermometer with a 7-segment display that displays the temperature in °F and °C.

I recently bought a new wood burning stove and it came with a bi-metal thermometer. I was interested to know how accurate this was so bought a Melexis MLX90614 IR temperature sensor to check. This is a non-contact sensor whose operational range is between -70°C and 380°C (about -90°F to 700°F) so suitable for a stove that should ideally run at around 200°C to 250°C.


You'll need an Arduino (Nano. Micro, etc.), a small breadboard, jumper wires, a switch (toggle, momentary, etc.), I2C 7-segment 4-digit LED display, MLX90614 IR sensor, PP3 battery and clip-on lead. This can all be fitted into a project box that's 10cm x 7cm x 4cm.

The sensor connects to an I2C bus and usually has an address of 0x54. Although the devices do not have address jumpers to change their address, a new address can be programmed in once it has been connected up. This means that up to 127 devices can be attached to the same I2C bus.

Picture of bearing-guided router cutter To avoid the difficulty of cutting a neat and precise rectangular hole in the box lid for the 7-segment LED, I usually make a replacement lid from 3mm or 5mm Perspex sheet of the same colour as the display. I use thin strips of double-sided adhesive tape to join the lid and Perspex sheet temporarily, then use a router with a bearing-guided parallel cutter to trim the Perspex while following the shape of the lid. Finally, while the lid and Perspex are still joined, I drill the fixing holes using the lid as a template and then countersink as required.


You'll need to use a suitable Arduino IDE to compile and upload your sketch. You need to ensure that the Adafruit MLX90614 and LED backpack libraries are installed before you start and then include them in the sketch as follows:

#include <Adafruit_MLX90614.h>

#include <Adafruit_LEDBackpack.h>

You can download a sketch here.


The emissivity (ε) of the surface of an object is a measure of how effective it is in emitting energy as thermal radiation. It is a unitless number between zero and one and is the ratio of the thermal radiation from the surface to the radiation of an ideal black surface. The detection of infrared radiation is key to calculating an object's temperature. However, objects that are at the same temperature may radiate different levels of energy depending upon their surface texture, colour, etc. For this reason the MLX90614 can take into account an object's emissivity in its calculation of temperature. A typical value of ε can be taken to be 0.95 for most applications. You can set this value in the sketch with a call to setEmissivity(), for example:


This value is saved in the MLX90614's local EEPROM, so once set remains valid until it's overwritten. Rewriting the value at startup does not cause any issues. You can find more information on how to change the value if your MLX90614 is not connected to an Arduino, ESPxx or other microprocessor here.


For a hand-held battery powered device, an Arduino with a small LCD, OLED or 7-segment LED is a good solution because the power consumption is low and can be powered from a 9V PP3 battery.

Picture of completed thermometer box

This thermometer is useful if you wish to measure high temperatures without making contact with the heat source; applications include:


The diagram is shown below. As we are using a 9V battery, this must be connected to the Vin pin so that it is regulated to 5V by the on-board circuitry. The momentary switch switches the device on for the duration of the temperature measurement and then, when released, switches it off again. However, you could use a standard latching or toggle switch instead.

Picture of MLX90614 circuit