In this Arduino project, we will make our own Non-Contact Infrared Thermometer using MLX90614 Infrared Temperature Sensor and Arduino Nano. We will use a 0.96″ OLED display to view the real-time temperature reading. Also, I used a 5V laser diode module to point the sensor to a particular object or surface. Previously we used some temperature sensors like DS18B20, LM35 & MAX6675 for various temperature-related projects. However, these temperature sensors only can sense the temperature when the heat is directly applied to them on their heat surface. But according to the upgradation of technology, I decided to measure the temperature of a scorching body of a flame or hot iron. Then I can’t rely on those sensors.
So we need an actual sensor that has the ability to measure the targeted temperature without any contact. For this, we use the MLX90614 infrared thermometer sensor here in this project. The MLX90614 sensor uses 100% contactless sensing to measure the actual temperature data without any physical contact with a targeted surface.
The refresh rate and sensitivity of MLX90614 are very high that it can give the reading within a fraction of a second. We can use MLX90614 to measure the temperature of hot objects like machines, flames, hot iron, etc. Also, we can even use this sensor for laboratory purposes for measuring body temperature. Due to the COVID-19 situation, the demand for this sensor has increased over recent 2 years.
Circuit Diagram

Components Required
- Arduino Nano
- MLX90614 Infrared Temperature Sensor
- 128×64 OLED Display
- Laser Diode Module
- 3.7V Lithium-Ion Battery
- Connection Wire
- Veroboard
What is MLX90614 Infrared Sensor?
The MLX90614 is an infrared thermometer which is a very accurate non-contact temperature sensor capable of measuring temperature between -70°C to +380°C. It uses an IR-sensitive thermopile detector chip and the signal conditioning ASIC integrated into a single chip.
A Thermopile is an electronic device that converts thermal energy into electrical energy. It is composed of several thermocouples connected usually in series or, less commonly, in parallel.

MLX90614 IR temperature comes with pre-calibrated complete temperature range(s) with a digital SMBus output that has full access. Although it works on SMBus protocol, it can also be usable via I2C pins.
Pin Configuration
Pin No. | Configuration |
---|---|
VCC | 3.6V to 5V but the 3.3V version is also available |
GND | For Ground |
SDA | Serial Data Communication |
SCL | Serial Clock Pin |
Circuit Connection of Non-Contact Infrared Thermometer
The Circuit diagram for making a Non-Contact Infrared Thermometer using MLX90614 sensor, Arduino Nano, OLED display and battery is given below.
The circuit has Arduino Nano which is used because of the small and compact size. The Arduino Pro Mini Board has 2 versions, one of them works at 5V, 16MHz, and the other at 3.3V, 8 MHz. You can select 3.3V, 8MHz Arduino Pro Mini as you are powering the device using a 3.7V Lithium-Ion Battery. The RAW pin of Arduino pro-Mini is directly connected to the battery VCC Pin via a push switch.
To point the object, you can use Laser Diode Breakout Board. Laser Diode Module is a low-cost module with a wavelength of 650nm and an operating voltage of 3V-5V. The laser head is composed of a light-emitting tube, condenser lens, and adjustable copper sleeve. It can work directly after connecting to a dc power supply. In our circuit, we connect the Laser Diode output pin to the D12 of Arduino Pro Mini. To learn more about the Laser Diode Module, you can check one of the Laser Diode Arduino projects.
The MLX90614 contactless infrared temperature sensor & 0.96″ I2C OLED Display is connected to the I2C Pin of the Pro Mini Board. The SDA and SCL pin is connected to A4 & A5 of Pro Mini respectively. The OLED Display and MLX90614 both work at 3.3V, hence their VCC can be connected to 3.3V of Pro Mini.
PCB Design
After designing the schematic diagram of the Non-Contact Infrared Thermometer, the assembled components and wiring are too clumsy and looked unprofessional. In fact, the wiring also has a chance of loose connection. Then I realised that we need to design the whole system small so that it will fit in a small thermometer gun easily. To give it a clean and professional look I decided to build its PCB prototype using EasyEDA software as it is so simple to use. Now come to the main part, where we need to order our PCB prototype. I always prefer PCBWay for their quality assurance, fastest delivery and also for 24/7 customer support.
PCB View


I’ve done several runs with PCBWay and am happy with the results, it’s good quality. The etching, solder mask, and hole sizes are all done well and that is what matters to me. It takes a few hours for a design to get approved and then a couple of days to finish and ship.
With more than a decade in the field of PCB prototypes and fabrication, PCBWay has proved its assurance from time to time. They always look at the needs of the customer from different regions in terms of quality, on-time delivery, cost-effectiveness and any other demanding requests. PCBWay is a place that brings manufacturers and customers together. As one of the largest and most experienced PCB manufacturers in China, PCBWay is proud to be the best business partner in any aspect of PCB needs.
High Delivery Rate
In previous years, the on-time delivery rate was 99%. Rather than PCB quality, PCBWay knows that the other most important factor is the shortest possible lead time, which is critical for R&D engineers, especially in the prototyping phase. PCBWay keeps working to ensure PCBs will be delivered to customers as soon as possible and they’re delighted. It takes only 3 to 15 days according to the courier service to deliver your products. After PCBWay moved to the new factory, the production capacity of multi-layer PCB can be as high as tens of thousands of square meters per month. So on-time delay is also reduced for that. They have the “Return and Refund” principle, for every unusable board caused by PCBWay, they will rebuild and refund the order soon.
Quality Assurance
When talking about quality assurance, all the PCB prototypes go through the most stringent tests rather than the basic visual checks. They have most of the testing and inspecting types of equipment used in the PCB prototyping industry, such as Flying Probe Tester, X-Ray Inspection Machine, and Automated Optical Inspection (AOI) Machine.


Previously there have 9 different types of solder masks available in their company. But now recently they have launched extra 4 solder masks that are pink, grey, orange and transparent solder masks.

Also, there is a piece of great news about the price reduction of PCB prototypes. From 5th August you can now buy 4-layers & 6-layers with upto 20% discounts. As the price dropped, don’t think they will compromise on the quality.

There are three types of assembly services:
- Turnkey where PCBWay supplies all PCB parts.
- Kitted or Consigned where the customer is responsible for buying and sending all parts to PCBWay.
- Combo, where the customer supplies some parts and PCBWay, completes the rest.
3D Printing & CNC
It also produces Rapid Prototyping like 3D printing, CNC Machining, Sheet Metal Fabrication, and Injection Molding. The quality of the product is too premium and reliable. And also the best part is that you will receive your order within a minimum of 3 days.
Working Principle of Non-Contact Infrared Thermometer
As mentioned earlier, the MLX90614 sensor can measure the temperature of an object without any physical contact. This is often made possible with a law called Stefan-Boltzmann Law, which states that each object and living being emit IR Energy and therefore the intensity of this emitted IR energy is going to be directly proportional to the temperature of that object or living being. Therefore the MLX90614 sensor calculates the temperature of an object by measuring the quantity of IR energy emitted from it.
Applications of Non-Contact Infrared Thermometer
- High precision non-contact temperature measurements
- Thermal Comfort sensor for Mobile Air Conditioning control system
- The temperature sensing element for residential, commercial & industrial building air
- Automotive blind angle detection
- Industrial temperature control of moving parts
- Healthcare
- Livestock monitoring
- Movement detection
- Thermal relay/alert
- Body temperature measurement
Arduino Code
To compile this code to Arduino Nano, we need some libraries.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | #include <Wire.h> #include <Adafruit_MLX90614.h> #include <Adafruit_GFX.h> #include <Adafruit_SSD1306.h> #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels #define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); #define laser 12 Adafruit_MLX90614 mlx = Adafruit_MLX90614(); double temp_amb; double temp_obj; void setup() { Serial.begin(9600); mlx.begin(); //Initialize MLX90614 display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64) Serial.println("Temperature Sensor MLX90614"); pinMode(laser, OUTPUT); // Connect LASER digitalWrite(laser, LOW); display.clearDisplay(); display.setCursor(25,15); display.setTextSize(1); display.setTextColor(WHITE); display.println(" Thermometer"); display.setCursor(25,35); display.setTextSize(1); display.print("Initializing"); display.display(); delay(5000); } void loop() { //Reading room temperature and object temp //for reading Fahrenheit values, use //mlx.readAmbientTempF() , mlx.readObjectTempF() ) temp_amb = mlx.readAmbientTempC(); temp_obj = mlx.readObjectTempC(); digitalWrite(laser, HIGH); //Serial Monitor Serial.print("Room Temp = "); Serial.println(temp_amb); Serial.print("Object temp = "); Serial.println(temp_obj); display.clearDisplay(); display.setCursor(25,10); display.setTextSize(1); display.setTextColor(WHITE); display.println(" Temperature"); display.setCursor(25,30); display.setTextSize(2); display.print(temp_obj); display.print((char)247); display.print("C"); display.display(); delay(1000); } |