Zbotic Logo Zbotic Logo
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

  • Shop
  • About Us
  • Contact Us
  • Reseller
  • Blogs
020 69134444
1800 209 0998
[email protected]
Help Desk
Facebook Twitter Instagram Linkedin YouTube
Zbotic Logo Zbotic Logo
0 0

View Wishlist Add all to cart

0 0
0 Shopping Cart
Shopping cart (0)
Subtotal: ₹0.00

View cartCheckout

All departments
  • 3D Print Service
  • 3D Printer
  • Batteries & Chargers
  • Development Boards
  • Drone Parts
  • EBike parts
  • Sensor Modules
  • Electronic Components
  • Electronic Modules
  • IoT and Wireless
  • Mechanical Parts and Workbench Tools
  • Motors & Drivers & Pumps & Actuators
  • DIY and Robot Kits
  • Show more
  • Home
  • Shop
  • Sale
  • 3D Print Service
  • PCB Service
  • B2B
  • Blogs
  • Contact Us
Return to previous page
Home Sensors & Modules

MLX90614 IR Thermometer: Contactless Temperature Measurement with Arduino

MLX90614 IR Thermometer: Contactless Temperature Measurement with Arduino

March 11, 2026 /Posted byJayesh Jain / 0

The MLX90614 is a factory-calibrated infrared thermometer sensor that enables truly contactless temperature measurement with Arduino — no physical contact with the object required. Developed by Melexis, this sensor measures the infrared radiation emitted by any object and converts it to a highly accurate temperature reading. From building a medical-grade fever screening system to monitoring motor temperatures, measuring food warmth without touching it, or creating a contactless industrial thermometer, the MLX90614 IR thermometer is the right tool for the job.

In this comprehensive guide, we cover the MLX90614 working principle, available variants, I2C communication with Arduino, complete code examples, emissivity calibration for different materials, and a gallery of real-world project applications. Whether you are a student, hobbyist, or professional engineer, this tutorial will give you everything you need to integrate the MLX90614 into your Arduino project.

Table of Contents

  1. How Infrared Temperature Measurement Works
  2. MLX90614 Overview and Variants
  3. Specifications and Key Parameters
  4. Wiring MLX90614 to Arduino
  5. Installing the Adafruit MLX90614 Library
  6. Basic Arduino Code: Reading Object and Ambient Temperature
  7. Understanding and Setting Emissivity
  8. Effect of Distance and Field of View
  9. Low Power Sleep Mode
  10. Real-World Project Applications
  11. Troubleshooting Common Issues
  12. Frequently Asked Questions

1. How Infrared Temperature Measurement Works

All objects above absolute zero (−273.15°C) emit infrared radiation — electromagnetic waves in the 0.7 to 14 µm wavelength range. The intensity and spectral distribution of this radiation is directly related to the object’s temperature, governed by Planck’s law of blackbody radiation. Hotter objects emit more radiation and at shorter wavelengths.

An infrared thermometer sensor contains a thermopile — a device made from many thermocouple junctions arranged in series, sensitive to infrared radiation in a specific wavelength band. When infrared radiation from a target object hits the thermopile, it generates a tiny voltage proportional to the temperature difference between the thermopile and the target. The MLX90614 processes this voltage with its onboard signal conditioner and 17-bit ADC to produce a calibrated temperature output with ±0.5°C accuracy over a wide range.

Because this measurement is contactless, the sensor can measure:

  • Moving objects (conveyor belt items, rotating parts) without friction or wear
  • Hazardous materials (hot metals, acids, electricity-live components) from a safe distance
  • Delicate objects (human skin, food, biological samples) without contamination
  • Extremely hot surfaces that would destroy contact sensors

2. MLX90614 Overview and Variants

The MLX90614 family comes in several variants with different field-of-view (FOV) angles and interface options:

Variant FOV (half-angle) Interface Best For
MLX90614ESF-AAA 35° (±17.5°) I2C + PWM General purpose, most common
MLX90614ESF-BAA 35° I2C + PWM Extended temp range (-70°C to +380°C)
MLX90614ESF-DCI 10° (±5°) I2C Narrow spot measurement at distance
MLX90614ESF-ACF 70° I2C Body temperature (wide area)

The most commonly available variant in India is the GY-906 module based on the MLX90614ESF-AAA with a 35° field of view — this is what most tutorials, including this one, focus on. The GY-906 module includes a 3.3V regulator, I2C pull-up resistors, and a convenient 4-pin header.

3. Specifications and Key Parameters

Parameter Value
Object Temperature Range –70°C to +380°C (AAA variant)
Ambient Temperature Range –40°C to +125°C
Accuracy (0–50°C ambient, object) ±0.5°C
Resolution 0.02°C
Field of View (AAA) 35° (half-angle ±17.5°)
Communication I2C (SMBus protocol) + PWM
I2C Address 0x5A (default, reprogrammable)
Supply Voltage 3V (chip); GY-906 module: 3.3V–5V
Supply Current ~1.5 mA (operating)
Sleep Current ~2.5 µA
Response Time ~100 ms (typical)

The 0.02°C resolution and ±0.5°C accuracy over the 0–50°C range makes the MLX90614 suitable for medical applications like fever screening — where 0.3°C differences matter for detecting a temperature of 37.5°C vs 37.2°C. Accuracy decreases slightly at temperature extremes outside this range.

DHT11 Digital Relative Humidity and Temperature Sensor Module

DHT11 Digital Relative Humidity and Temperature Sensor Module

Complement the MLX90614 contactless thermometer with a DHT11 for ambient humidity monitoring — ideal for HVAC systems and weather stations.

View on Zbotic

4. Wiring MLX90614 to Arduino

The GY-906 MLX90614 module has a simple 4-pin interface:

GY-906 Pin Arduino Uno/Nano Pin
VCC 5V (module has onboard 3.3V regulator)
GND GND
SCL A5
SDA A4

Important wiring notes:

  • The MLX90614 chip itself operates at 3V. The GY-906 module includes a 3.3V LDO regulator and level-shifted I2C lines — making it safe to use with 5V Arduinos.
  • The MLX90614 uses SMBus (System Management Bus), which is largely compatible with standard I2C at 100 kHz but has some subtle differences. The Adafruit library handles this transparently.
  • If connecting the bare chip (not GY-906 module), add 4.7kΩ pull-up resistors on both SDA and SCL lines to 3.3V.
  • Do NOT connect the bare MLX90614 chip to 5V — it operates at 3V maximum. The GY-906 module’s regulator handles this.

5. Installing the Adafruit MLX90614 Library

Open the Arduino IDE, go to Sketch → Include Library → Manage Libraries, search for “Adafruit MLX90614” and install the library. Also install the Adafruit BusIO library if prompted (required dependency).

The Adafruit MLX90614 library provides a clean API for reading both object temperature and ambient temperature in Celsius, Fahrenheit, or Kelvin, as well as functions for reading and writing the EEPROM configuration (including emissivity and I2C address).

6. Basic Arduino Code: Reading Object and Ambient Temperature

#include <Adafruit_MLX90614.h>
#include <Wire.h>

Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  if (!mlx.begin()) {
    Serial.println("MLX90614 not found! Check wiring.");
    while (1);
  }
  Serial.print("Emissivity: ");
  Serial.println(mlx.readEmissivity());
}

void loop() {
  Serial.print("Ambient = ");
  Serial.print(mlx.readAmbientTempC());
  Serial.print(" *C  |  ");

  Serial.print("Object = ");
  Serial.print(mlx.readObjectTempC());
  Serial.println(" *C");

  // Fever detection example:
  float bodyTemp = mlx.readObjectTempC();
  if (bodyTemp >= 37.5) {
    Serial.println("WARNING: Elevated temperature detected!");
  }

  delay(500);
}

Upload this sketch and open the Serial Monitor at 9600 baud. You will see two temperature readings:

  • Ambient temperature: The temperature of the sensor itself and its immediate surroundings — useful for compensation and as a secondary environment sensor.
  • Object temperature: The contactless temperature of whatever the sensor is aimed at.

For human body temperature measurement, the sensor should be positioned 3–5 cm from the forehead or wrist. At this distance with the 35° FOV sensor, the measurement spot diameter is approximately 2–3 cm — comfortably covering the area needed for skin temperature reading.

7. Understanding and Setting Emissivity

Emissivity is the most misunderstood aspect of infrared thermometry. It measures how efficiently an object emits thermal radiation compared to a perfect blackbody (emissivity = 1.0). The MLX90614’s default emissivity is 1.0, which is appropriate for skin, organic materials, and most painted surfaces. However, for metallic or highly reflective surfaces, using the wrong emissivity setting causes significant temperature errors.

Common material emissivities:

Material Emissivity
Human skin 0.95–0.98
Flat black paint 0.95
Wood 0.90–0.95
Concrete, brick 0.90–0.95
Polished aluminium 0.04–0.06
Oxidised steel 0.80–0.90
Polished copper 0.02–0.05
PCB (green) 0.85–0.90
Water 0.95–0.98

Setting emissivity in code (stored in EEPROM — survives power cycles):

#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  mlx.begin();

  // Read current emissivity
  double currentE = mlx.readEmissivity();
  Serial.print("Current emissivity: ");
  Serial.println(currentE);

  // Set new emissivity for oxidised steel (example)
  // WARNING: This writes to EEPROM — limited write cycles!
  // Only do this once during setup, not in a loop!
  // mlx.writeEmissivity(0.85);
  // Serial.println("Emissivity updated. Power cycle the sensor.");
}

void loop() {
  Serial.print("Object Temp: ");
  Serial.println(mlx.readObjectTempC());
  delay(500);
}

Important: The EEPROM write capability is limited (approximately 10,000 write cycles). Only write emissivity during initial configuration, not in the main loop. After writing, power cycle the sensor for the change to take effect.

LM35 Temperature Sensors

LM35 Temperature Sensors

Use the LM35 as a precision ambient temperature reference alongside the MLX90614 — cross-validate readings and improve emissivity calibration accuracy.

View on Zbotic

8. Effect of Distance and Field of View

The MLX90614’s 35° field of view means it “sees” a cone of IR radiation rather than a precise point. At any given distance, the sensor averages the temperature across an elliptical spot. The spot size formula:

Spot diameter = 2 × distance × tan(FOV half-angle)

For the AAA variant (FOV = ±17.5°):

  • At 1 cm distance: spot ≈ 6 mm diameter
  • At 5 cm distance: spot ≈ 31 mm diameter
  • At 10 cm distance: spot ≈ 63 mm diameter
  • At 30 cm distance: spot ≈ 19 cm diameter

Key implications:

  • The target object must be larger than the spot size for an accurate reading — if the spot extends beyond the object, background temperature contaminates the reading
  • For body temperature (forehead/wrist), 3–5 cm distance gives a 2–3 cm spot — ideal coverage
  • For measuring a small component like an IC chip, get as close as possible to maximise spot coverage of the target
  • For measuring a large area (oven interior, radiator), distance doesn’t matter much as long as the sensor “sees” the target

9. Low Power Sleep Mode

For battery-powered projects, the MLX90614 supports a sleep mode that draws only ~2.5 µA. Wake-up is triggered by an SMBus command or by toggling the SCL line:

#include <Adafruit_MLX90614.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

void setup() {
  Serial.begin(9600);
  mlx.begin();
}

void loop() {
  // Read temperature
  float temp = mlx.readObjectTempC();
  Serial.print("Object: "); Serial.println(temp);

  // Enter sleep mode (saves ~1.5 mA)
  mlx.sleep();

  // Sleep Arduino for 7 seconds
  delay(7000);

  // Wake sensor (send wake command on I2C)
  // Must re-initialize I2C and wait ~250ms for sensor to stabilize
  pinMode(A4, OUTPUT);      // SDA
  digitalWrite(A4, HIGH);
  delay(50);
  Wire.begin();
  mlx.begin();
  delay(300);  // Wait for sensor warmup after wake
}

Combined with Arduino’s own sleep modes (using the LowPower library), a battery-powered temperature monitoring system can achieve years of operation on a small LiPo battery when sampling only once per minute.

10. Real-World Project Applications

Contactless Fever Screening Station

The most prominent post-COVID application. Mount the MLX90614 in a stand at forehead height, display temperature on an LCD, and trigger a green/red LED + buzzer for pass/fail. Add a servo to prevent entry if temperature exceeds a threshold. Use the wide-FOV variant for easier alignment, or the standard 35° variant at a fixed 5 cm distance.

Motor and Bearing Temperature Monitoring

Overheating bearings and motor windings are among the most common causes of industrial equipment failure. Mount the MLX90614 near critical bearings and trigger alarms when temperature exceeds safe limits. The contactless measurement means no risk of damaging temperature sensors from vibration or rotating shaft contact.

PCB Thermal Analysis

Identify hot spots on circuit boards by scanning the MLX90614 across the board surface. This is an affordable alternative to professional thermal cameras — while the spatial resolution is much lower (single measurement point vs thousands of pixels), it can identify dramatically overheating components like voltage regulators, MOSFETs, or shorted traces.

Food Temperature Control

Monitor pizza oven surface temperature, verify cooking temperature of frying oil, or check if baby food is at the right temperature — all without probe contact. For food safety, the MLX90614 at ε=0.95 reads metal cookware surfaces accurately enough for practical cooking guidance.

3D Printer Bed Levelling Aid

Measure the heated bed temperature at multiple points to verify uniformity before printing. A non-uniform heated bed causes warping and adhesion failures. Scanning the MLX90614 across the bed surface maps temperature distribution without the risk of physical probe contact scratching the bed surface.

Smart HVAC Thermostat

Measure human presence and skin temperature for comfort-based HVAC control. Unlike ambient air thermostats, an IR sensor can detect the actual thermal comfort of occupants — adjusting cooling or heating based on body temperature rather than delayed air temperature response.

DS18B20 Programmable Resolution Temperature Sensor

DS18B20 Programmable Resolution Temperature Sensor

Pair the MLX90614 contactless sensor with DS18B20 for simultaneous IR and contact temperature measurement — great for cross-validation and process monitoring.

View on Zbotic

11. Troubleshooting Common Issues

Sensor Not Found on I2C (0x5A)

Run the Arduino I2C scanner sketch to see what address the sensor appears on. If nothing appears, check SDA/SCL connections (A4/A5 on Uno). Verify the module has power (LED on GY-906 confirms power). The MLX90614 I2C address can be reprogrammed to any address in the 0x00–0x7F range — if a previous user changed it, you may need to scan all addresses. Note: some very cheap clones have reliability issues — try reducing I2C bus speed to 50 kHz if at 100 kHz causes issues.

Readings Are Too Low or Too High for Known Objects

Almost certainly an emissivity mismatch. Verify the current emissivity setting (mlx.readEmissivity()). The default is 1.0, correct for organic materials. For polished metal surfaces, emissivity may be as low as 0.05 — reading a polished aluminium heatsink with emissivity 1.0 will give a wildly inaccurate reading because you are measuring reflected ambient radiation rather than the object’s own emission. Apply matte black paint or black electrical tape to the measurement spot for consistency.

Temperature Reading is Actually the Ambient Air Temperature

The sensor needs a clear line of sight to the target. If the target is too small, too far away, or if glass/plastic is between sensor and target (these materials block IR), the sensor reads surrounding ambient temperature. Note: glass is opaque to the 8–14 µm IR wavelength range, unlike visible light — you cannot measure temperature through a glass window.

Readings Fluctuate Rapidly

This is normal for the MLX90614 — the 100 ms response time means readings can change quickly as the sensor pans across different temperature objects. For stable readings, point the sensor at the target, wait 200–500 ms for it to stabilise, then take an average of several readings. Avoid air currents near the sensor (they cool the thermopile and shift readings).

Can’t Write Emissivity — I2C Error

Writing to MLX90614 EEPROM requires erasing the current value first (write 0x0000 to the emissivity register), waiting 5 ms, then writing the new value. The Adafruit library handles this automatically. If writes fail, ensure you are using the genuine Adafruit library version 2.x or later. Also, note that write cycles are limited to ~10,000 — if the sensor has been written to many times, EEPROM writes may start failing.

12. Frequently Asked Questions

Can the MLX90614 measure temperatures through glass or plastic?

No. Glass, plastic, and most transparent materials are opaque to the 8–14 µm infrared wavelengths the MLX90614 detects, even though they appear transparent to visible light. This is why you can feel heat through a glass window even though it blocks most far-infrared radiation. To measure an object behind glass or plastic, you would need to use a germanium optical window (transmissive to far-IR) or remove the barrier. Standard window glass transmits only about 1% of the far-infrared wavelengths used for temperature measurement.

How accurate is the MLX90614 for body temperature measurement?

The MLX90614 is specified at ±0.5°C accuracy in the 0–50°C range, which includes the body temperature range (35–42°C). For forehead temperature, the sensor reads slightly lower than core body temperature (typically 0.5–1°C lower, depending on room temperature and ambient conditions). This is normal — clinical forehead thermometers apply a correction factor. For medical-grade screening, use the sensor at a fixed 3–5 cm distance in a temperature-controlled environment, and add a compensation factor based on ambient temperature. The sensor is suitable for screening (detecting elevated temperatures) but not for precise clinical diagnosis.

Can I change the MLX90614’s I2C address?

Yes. The I2C address (default 0x5A) is stored in EEPROM and can be changed to any address in 0x01–0x7E range. This allows multiple MLX90614 sensors on the same I2C bus. The address change procedure requires writing to the EEPROM SA register. Once changed, the new address is permanent until changed again. Since only one MLX90614 at address 0x5A can be on the bus at a time during reprogramming, address changes should be done one sensor at a time. Some library functions support specifying a non-default I2C address in the begin() call.

What is the difference between MLX90614 and MLX90615?

The MLX90615 is a newer, smaller successor to the MLX90614 in a TO-46 package. It has similar accuracy and temperature range but features a smaller footprint and reduced power consumption. The MLX90615 uses slightly different EEPROM register addresses in its configuration. The MLX90614 remains more common in maker communities due to wider library support and greater module availability in India. For new designs, the MLX90615 may be preferable for space-constrained applications.

Why does the MLX90614 read differently in summer vs winter?

The MLX90614’s thermopile measures the temperature difference between the target object and the sensor’s own thermopile junction. When the ambient temperature (and thus the sensor temperature) changes significantly, the baseline for this differential measurement shifts. The sensor’s internal ambient temperature compensation corrects for this over its rated range, but extreme ambient temperature changes (e.g., sensor stored in a cold AC room, then immediately used outdoors in 40°C heat) can take several minutes for the sensor to thermally stabilise. Allow 5–10 minutes warm-up time after significant ambient temperature changes before taking critical measurements.

Conclusion

The MLX90614 is a remarkable piece of engineering — factory-calibrated to ±0.5°C accuracy, covering an enormous temperature range from –70°C to +380°C, with a simple I2C interface that any Arduino beginner can use within minutes of unboxing. Its contactless operation makes it irreplaceable in applications where touch is impossible, impractical, or unsafe.

The key to accurate MLX90614 measurements: understand emissivity and set it correctly for your target material, maintain a consistent sensing distance appropriate to your target size, allow adequate thermal stabilisation time, and average multiple readings for best accuracy. With these practices in place, the MLX90614 delivers professional-grade infrared temperature measurement at an accessible price point.

From a simple fever screener to a sophisticated industrial temperature monitoring system, the MLX90614 paired with Arduino offers a powerful, affordable platform for contactless temperature applications in any domain.

Get your MLX90614 and temperature sensor accessories today! Zbotic stocks a comprehensive range of temperature sensors — from MLX90614 IR thermometers to DHT11, DS18B20, LM35, and BME280 modules — with fast delivery across India. Visit zbotic.in/product-category/sensor-modules/ to explore our full sensors catalogue.
Tags: Arduino, contactless temperature, Infrared Sensor, IR thermometer, MLX90614
Share Post
  • Facebook
  • Linkedin
  • Whatsapp
How to Use Oscilloscope Trigge...
blog how to use oscilloscope trigger edge pulse and video modes 597479
blog build a wireless weather station with nrf24l01 arduino 597484
Build a Wireless Weather Stati...

Related posts

Svg%3E
Read more

Encoder Module: Position and Speed Measurement with Arduino

April 1, 2026 0
A rotary encoder converts the angular position and rotation speed of a shaft into electrical signals that Arduino can count... Continue reading
Svg%3E
Read more

Infrared Obstacle Sensor: Line Follower and Object Detection

April 1, 2026 0
Infrared obstacle sensors are the building blocks of line-following robots, edge detection systems, and proximity triggers. These tiny modules emit... Continue reading
Svg%3E
Read more

Rain Sensor and Raindrop Detection Module: Arduino Guide

April 1, 2026 0
A rain sensor module detects the presence of water droplets on its surface, giving Arduino a simple signal to trigger... Continue reading
Svg%3E
Read more

LiDAR Sensor TFmini: Distance Measurement Beyond Ultrasonic

April 1, 2026 0
When ultrasonic sensors hit their limits — range too short, accuracy too coarse, outdoor sunlight causing interference — LiDAR sensors... Continue reading
Svg%3E
Read more

Pressure Sensor BMP280: Weather Station and Altitude Meter

April 1, 2026 0
The BMP280 barometric pressure sensor by Bosch measures atmospheric pressure with ±1 hPa accuracy and temperature with ±1°C precision. These... Continue reading

Add comment Cancel reply

Your email address will not be published. Required fields are marked

Facebook Twitter Instagram Pinterest Linkedin Youtube

Get the latest deals and more.

Download on Google Play Download on the App Store

Call us: 020 69134444 / 1800 209 0998

Monday - Saturday 09:30 AM - 06:00 PM
For Technical Supports Email: [email protected]
For Sales / Enquiries Email: [email protected]

  • My Account

    • Cart

    • Wishlist

    • Checkout

    • My Orders

    • Track Order

    • My Account

  • Information

    • FAQs

    • Blogs

    • Career

    • About Us

    • Contact Us

    • Payment Options

  • Policies

    • Privacy Policy

    • Terms & Conditions

    • GST Input Tax Credit

    • Shipping Return Policy

    • E-Waste Collection Points

    • Our Sitemap

© Zbotic.in is registered trademark of Moxie Supply Pvt Ltd – All Rights Reserved
Login
Use Phone Number
Use Email Address
Not a member yet? Register Now
Reset Password
Use Phone Number
Use Email Address
Register
Already a member? Login Now