IR_Thermometer_Sensor_MLX90614_SKU__SEN0206-DFRobot

SEN0206 SEN0263 IR Thermometer Sensor MLX90614

Introduction

We can divide temperature measurement in to two types: contact and non-contact. Contact measurement can only accurately measure temperature when the testing object and the sensor reach thermal equilibrium. This can mean longer response times and reading inaccuracies offset by ambient temperature. By contrast, non-contact measurement uses infra-red radiation to measure the temperature and does not require a direct touch. Additionally, this method of measurement can be read quickly and accurately. In recent years non-contact measurement methods have been used for medical, environmental monitoring, home automation, automotive electronic, aerospace and military applications. Our latest infrared temperature measurement module is the MLX90614. This module measures the surface temperature by detecting infrared radiation energy and wavelength distribution. The IR temperature probe consists of an optical system, photoelectric detector, amplifier, signal processing and output module. The optical system collects the infrared radiation in its field of view, whose area is decided by optical components and position of the thermometer, and the infrared radiation energy is converted in to corresponding electrical signals when converging on the photoelectric detector. After being processed by the amplifier and signal processing circuit, calibrated according to the algorithm and target emissivity, the signal is converted in to temperature value of the target. The MLX90614 is self calibrating and has a low noise amplifier integrated in to the signal processing chip. The chip itself is a 17 bit ADC and DSP device, giving accurate and reliable results.

Specification

SEN0206 (MLX90614-DCC)

SEN0263 (MLX90614-DCI)

Pin Outs

SEN0263 SEN0206 IR Thermometer Sensor-MLX90614 Pin Outs

Label Name Function
1 VCC Positive Terminal
2 GND Negative Terminal
3 SCL I2C Clock Pin
4 SDA I2C Data Pin

IR Thermometer Sensor-MLX90614 Interface Instruction

Tutorial

Requirements

Connection Diagram

SEN0263 SEN0206 IR Thermometer Sensor-MLX90614 Wire Diagram

Sample Code -1

Library Files and Examples. About Library installation.

/*!
 * @file        getData.ino
 * @brief       this demo demonstrates how to put the sensor enter/exit sleep mode and get temperature data measured by sensor
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author      [qsjhyy](yihuan.huang@dfrobot.com)
 * @version     V1.0
 * @date        2021-08-09
 * @url         https://github.com/DFRobot/DFRobot_MLX90614
 */
#include <DFRobot_MLX90614.h>

DFRobot_MLX90614_IIC sensor;   // instantiate an object to drive our sensor

void setup()
{
  Serial.begin(115200);

  // initialize the sensor
  while( NO_ERR != sensor.begin() ){
    Serial.println("Communication with device failed, please check connection");
    delay(3000);
  }
  Serial.println("Begin ok!");

  /**
   * adjust sensor sleep mode
   * mode select to enter or exit sleep mode, it's enter sleep mode by default
   *      true is to enter sleep mode
   *      false is to exit sleep mode (automatically exit sleep mode after power down and restart)
   */
  sensor.enterSleepMode();
  delay(50);
  sensor.enterSleepMode(false);
  delay(200);
}

void loop()
{
  /**
   * get ambient temperature, unit is Celsius
   * return value range: -40.01 °C ~ 85 °C
   */
  float ambientTemp = sensor.getAmbientTempCelsius();

  /**
   * get temperature of object 1, unit is Celsius
   * return value range: 
   * @n  -70.01 °C ~ 270 °C(MLX90614ESF-DCI)
   * @n  -70.01 °C ~ 380 °C(MLX90614ESF-DCC)
   */
  float objectTemp = sensor.getObjectTempCelsius();

  // print measured data in Celsius
  Serial.print("Ambient celsius : "); Serial.print(ambientTemp); Serial.println(" °C");
  Serial.print("Object celsius : ");  Serial.print(objectTemp);  Serial.println(" °C");

  // print measured data in Fahrenheit
  Serial.print("Ambient fahrenheit : "); Serial.print(ambientTemp*9/5 + 32); Serial.println(" F");
  Serial.print("Object fahrenheit : ");  Serial.print(objectTemp*9/5 + 32);  Serial.println(" F");

  Serial.println();
  delay(500);
}
Footer

Sample Code -2

/*!
 * @file        setSensor.ino
 * @brief       this demo is to set the emissivity calibration coefficient, and set measurement parameters, including IIR, FIR and measurement objects
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @license     The MIT License (MIT)
 * @author      [qsjhyy](yihuan.huang@dfrobot.com)
 * @version     V1.0
 * @date        2021-08-09
 * @url         https://github.com/DFRobot/DFRobot_MLX90614
 */
#include <DFRobot_MLX90614.h>

#define MLX90614_I2C_ADDR 0x5A   // mlx9614 default I2C communication address
DFRobot_MLX90614_I2C sensor(MLX90614_I2C_ADDR, &Wire);   // instantiate an object to drive the sensor

void setup()
{
  Serial.begin(115200);

  // initialize the sensor
  while( NO_ERR != sensor.begin() ){
    Serial.println("Communication with device failed, please check connection");
    delay(3000);
  }
  Serial.println("Begin ok!");

  /**
   * set the emissivity calibration coefficient, users need to calculate the ratio of the temperature measured before the sensor changes emissivity to the true temperature of the object,
   * upload the ratio to the api as a parameter, and the deviation of the object absolute temperature measured by the sensor will be lower
   * calibrationValue new calibration coefficient, [0, 1]
   */
  sensor.setEmissivityCorrectionCoefficient(1.0);

  /**
   * set I2C communication address, the setting takes effect after power down and restart
   * addr new I2C communication address 7bit(0~127)
   */
  sensor.setI2CAddress(0x5A);

  /**
   * set the measurement parameters, including IIR (Infinite Impulse Response Digital Filter) and FIR (Finite Impulse Response Digital Filter)
   * IIRMode: eIIR100, eIIR80, eIIR67, eIIR57;
   * FIRMode: eFIR128, eFIR256, eFIR512, eFIR1024;
   */
   sensor.setMeasuredParameters(sensor.eIIR100, sensor.eFIR1024);

  /**
   * control the sensor sleep mode, must enter and exit the sleep mode once after the sensor is configured (equivalent to soft reset) to ensure the normal reading of the measured data
   * mode select to enter or exit sleep mode, it's enter sleep mode by default
   *      true put the sensor to sleep
   *      false wake up the sensor (automatically exit sleep mode after power down and restart)
   */
  sensor.enterSleepMode();
  delay(50);
  sensor.enterSleepMode(false);
  delay(200);
}

void loop()
{
  /**
   * get ambient temperature, unit is Celsius
   * return value range: -40.01 °C ~ 85 °C
   */
  float ambientTemp = sensor.getAmbientTempCelsius();

  /**
   * get temperature of object 1, unit is Celsius
   * return value range: 
   * @n  -70.01 °C ~ 270 °C(MLX90614ESF-DCI)
   * @n  -70.01 °C ~ 380 °C(MLX90614ESF-DCC)
   */
  float objectTemp = sensor.getObjectTempCelsius();

  // print measured data in Celsius, unit is Celsius (°C)
  Serial.print("Ambient celsius : "); Serial.print(ambientTemp); Serial.println(" °C");
  Serial.print("Object celsius : ");  Serial.print(objectTemp);  Serial.println(" °C");

  // print measured data in Fahrenheit, unit is Fahrenheit (F)
  Serial.print("Ambient fahrenheit : "); Serial.print(ambientTemp*9/5 + 32); Serial.println(" F");
  Serial.print("Object fahrenheit : ");  Serial.print(objectTemp*9/5 + 32);  Serial.println(" F");

  Serial.println();
  delay(500);
}

Measurement Method

Before using the infrared temperature measurement module it is important to understand the concept of "field of view" (FOV). FOV is determined when a thermopile receives 50% of the radiation signal, and also related to the main axis of the sensor. As shown in the figure below, the size of the FOV is indicated on the horizontal axis. This measured temperature is actually the weighted average temperature of the object in the FOV and the measurement accuracy can only be ensured when the testing object totally covers the FOV of the infrared sensor. This means that the distance between the measurement terminal point and the bus bar must be ensured to meet the demands to guarantee the temperature measurement accuracy.

SEN0206 module has a FOV of 35° so tan35° = the radius of the testing object ÷ the distance between the infrared sensor and testing object. e.g.: the radius of the testing object is 5cm, so the measuring distance is 7cm (that means the measurement result is most accurate within this scope). The FOV graph of this sensor is below:

SEN0263 SEN0206 The points of measurement all need to be in the field

All the measured points must be in the FOV

SEN0263 module has a FOV of 5° so tan5° = the radius of the testing object ÷ the distance between the infrared sensor and testing object. e.g.: the radius of the testing object is 5cm, so the measuring distance is 57cm (that means the measurement result is most accurate within this scope). The FOV graph of this sensor is below:

All the measured points must be in the FOV

Result

SEN0206 SEN0263 IR Thermometer Sensor-MLX90614 Test Result

IR Thermometer Sensor-MLX90614 Test Result

Methods of MLX90614 Emissivity Compensation

How to compensate the emissivity of MLX90614? When the emissivity needs to be changed?

The emissivity is the coefficient which shows how well the object emits IR radiation compared to a theoretical perfect black body emitter. This ratio is used by MLX90614 in order to calculate the temperature of the object. During manufacturing, the MLX90614 is calibrated in front of a black body with an emissivity =99.9%, which we consider as E=1.

Different materials have different emissivity, so in order to measure temperature correctly this should be taken into account by uploading new emissivity coefficient into ML X90614 EEPROM.

So as general rule of thumb compensation is only necessary when the IR radiation from the object is reduced in some of way such as:

  1. either due to a low emissivity of the object
  2. either because some IR transparent material (the transparency is always less than 1) is put in front of the MLX90614

How to determine the new Emissivity (E)?

In order to determine what emissivity coefficient we should upload into the EEPROM of the MLX90614, the following measurement should be done (for both cases when transparent material and different emissivity surface is used). Please make sure that before starting the procedure the emissivity inside the device is E=1.

When the transparent sheet of material is put between the sensor and the object

We can use MLX90614 to determine the original temperature of the object (assuming that E=1) before a transparent sheet of material is put between the object and the MLX90614. The procedure is as follows:

1) Heat up the object to some temperature different from the room temperature. Let us assume To =60℃ (please note that this temperature must be kept stable). The temperature difference between the object and the sensor should be at least 30°C.

2) Run a measurement with MLX90614 and write down the readings as Treal =60℃ and Ta_real =25℃ (those temperatures are just for example)

3) Place the transparent material in front of the MLX90614 (NOTE: in order to have correct measurements, the temperature of the transparent sheet must be the same as the ambient temperature of the MLX90614. Otherwise the MLX90614 will "see" the temperature of the sheet as well and this will introduce an error)

4) Run the measurement with MLX90614 and write down the readings as Tnew =50℃ and Ta_new =25℃ (in general ambient temperature should be the same)

In case the object has an emissivity different from 1

We need to know the real temperature of the object in order to calculate the new value of the emissivity. Basically there are two methods to determine the real temperature:

  1. Use precise contact thermometer to measure the temperature

  2. Paint part of the object (the E of the paint should be 1), so you can measure this painted spot with the MLX90614 (please note that the spot must be bigger than the FOV spot of the MLX90614). Then the procedure is as follows:

    1) Heat up the object to some temperature different from the room temperature. Let us assume To =60℃ (please note that this temperature must be kept stable)

    2) Check the actual temperature using one of the above methods, let us assume Treal =60℃ and record the ambient temperature measured by the MLX90614: Ta_real =25℃ (these temperatures are just for example)

    3) Measure the temperature of the object with the intended surface with the MLX90614 and write down the readings as Tnew =40℃ and Ta_new =25℃ (in general the ambient temperature should be the same)

    4) Calculate the new emissivity coefficient: (please note that the temperatures are in Kelvin)

FAQ

There are no questions yet! If you have any questions, please do not hesitate to contact us by QQ or on the forum.

For more information and fun applications visit go to the forum to view and post!

Resources

Schematic

Arduino library

MLX90614 Datasheet

SCG files

IR Thermometer Sensor MLX90614 Github Repository

Shopping from SEN 0206 Gravity: I2C Non-contact IR Temperature Sensor For Arduino (MLX90614-BCC) or DFRobot Distributor.

Shopping from SEN0263 Gravity: I2C Non-contact IR Temperature Sensor For Arduino (MLX90614-DCI) or DFRobot Distributor.

Turn to the Top