

The MLX90614 is a non-contact infrared thermometer designed to measure the temperature of objects without requiring direct physical contact. It operates by detecting infrared radiation emitted by objects and converting it into a temperature reading. This sensor is highly versatile and is widely used in applications such as medical thermometers, industrial temperature monitoring, HVAC systems, and automotive climate control.
The MLX90614 is particularly valued for its accuracy, ease of use, and ability to measure both object and ambient temperatures. Its digital interface makes it compatible with microcontrollers like Arduino, Raspberry Pi, and other embedded systems.








The MLX90614 is available in various models, but the following are the general technical specifications for the most commonly used version:
| Parameter | Value |
|---|---|
| Operating Voltage | 3.6V to 5V |
| Current Consumption | 1.5mA (typical) |
| Temperature Range (Object) | -70°C to +380°C |
| Temperature Range (Ambient) | -40°C to +125°C |
| Accuracy | ±0.5°C (typical, for 0°C to +50°C range) |
| Field of View (FOV) | 35° |
| Communication Protocol | I²C and PWM |
| Resolution | 0.02°C |
The MLX90614 typically comes in a 4-pin TO-39 package. Below is the pin configuration:
| Pin | Name | Description |
|---|---|---|
| 1 | VDD | Power supply (3.6V to 5V) |
| 2 | VSS | Ground |
| 3 | SDA | Serial Data Line for I²C communication |
| 4 | SCL | Serial Clock Line for I²C communication |
Below is an example of how to interface the MLX90614 with an Arduino UNO using the I²C protocol. This example uses the Adafruit MLX90614 library.
#include <Wire.h>
#include <Adafruit_MLX90614.h>
// Create an instance of the MLX90614 library
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
void setup() {
Serial.begin(9600); // Initialize serial communication at 9600 baud
Serial.println("MLX90614 Test");
if (!mlx.begin()) {
Serial.println("Error: Could not find a valid MLX90614 sensor!");
while (1); // Halt execution if sensor initialization fails
}
}
void loop() {
// Read object temperature in Celsius
double objectTemp = mlx.readObjectTempC();
// Read ambient temperature in Celsius
double ambientTemp = mlx.readAmbientTempC();
// Print the temperatures to the Serial Monitor
Serial.print("Object Temperature: ");
Serial.print(objectTemp);
Serial.println(" °C");
Serial.print("Ambient Temperature: ");
Serial.print(ambientTemp);
Serial.println(" °C");
delay(1000); // Wait for 1 second before the next reading
}
No Data or Incorrect Readings:
0x5A.Inconsistent Temperature Readings:
Sensor Not Detected:
Q1: Can the MLX90614 measure human body temperature?
Yes, the MLX90614 is commonly used in medical thermometers to measure human body temperature. Ensure the sensor is calibrated for the specific application.
Q2: Can I use the MLX90614 with a 3.3V microcontroller?
Yes, the MLX90614 can operate at 3.6V, which is compatible with 3.3V systems. However, ensure proper level shifting for I²C communication if needed.
Q3: How do I reduce noise in the temperature readings?
Use a decoupling capacitor (e.g., 0.1µF) near the VDD pin and ensure the sensor is not exposed to electrical or thermal noise sources.
Q4: What is the maximum distance for accurate temperature measurement?
The effective distance depends on the size of the object and its ability to fill the sensor's field of view. For small objects, the sensor should be placed closer for accurate readings.
This concludes the documentation for the MLX90614.