红外测温仪

简介

一般来说,温度测量可分为接触式和非接触式,接触式测温只能测量被测物体与测温传感器达到热平衡后的温度,所以响应时间长,且极易受环境温度的影响;而红外测温是根据被测物体的红外辐射能量来确定物体的温度,不与被测物体接触,不影响被测物体温度场,并且温度分辨率高、响应速度快、稳定性好等特点。近年来,非接触红外测温在医疗,环境监测、家庭自动化、汽车电子、航空和军事上得到越来越广泛的应用。 DFRobot 最新推出的MLX90614红外测温模块,通过探测物体红外辐射能量的大小和波长的分布来检测物体的表面温度。红外测温器由光学系统、光电探测器、信号放大器和信号处理及输出等部分组成。光学系统汇聚其视场内的目标红外辐射能量,视场的大小由测温仪的光学零件及其位置确定。红外能量聚焦在光电探测器上并转变为相应的电信号。该信号经过放大器和信号处理电路,并按照仪器内的算法和目标发射率校正后转变为被测目标的温度值。MLX90614出厂自带校准,并且在信号调节芯片中使用了先进的低噪音放大器,一枚17-bit ADC以及功能强大的DSP元件,从而实现高精度温度测量。

产品参数

SEN0206(MLX90614-BBC)

SEN0263(MLX90614-DCI)

引脚说明

IR Thermometer Sensor-MLX90614红外温度传感器

IR Thermometer Sensor-MLX90614接口说明

标号 名称 功能描述
1 VCC 电源正极
2 GND 电源负极
3 SCL IIC时钟引脚
4 SDA IIC数据引脚

使用教程

准备

接线图

IR Thermometer Sensor-MLX90614红外温度传感器接线图

样例代码1

点击下载库文件[库文件和示例] 如何安装库?

/*!
 * @file        getData.ino
 * @brief       这个demo演示了让传感器进入/退出睡眠模式,以及获取传感器测量的温度数据
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author      [qsjhyy](qsj.huang@dfrobot.com)
 * @version     V1.0
 * @date        2021-08-09
 * @get from    https://www.dfrobot.com
 * @url         https://github.com/DFRobot/DFRobot_MLX90614
 */
#include <DFRobot_MLX90614.h>

DFRobot_MLX90614_IIC sensor;   // 实例化一个对象,来驱动我们的传感器

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

  // 初始化传感器
  int rslt;
  while( NO_ERR != (rslt = sensor.begin()) ){
    if(ERR_DATA_BUS == rslt){
      Serial.println("Data bus error!!!");
    }else if(ERR_IC_VERSION == rslt){
      Serial.println("Chip versions do not match!!!");
    }
    delay(3000);
  }
  Serial.println("Begin ok!");

  /**
  * 调整传感器睡眠模式
  * mode 选择进入睡眠模式还是退出睡眠模式,默认为进入睡眠模式
  *      true为进入睡眠模式
  *      false为退出睡眠模式(掉电重启后自动退出睡眠模式)
  */
  sensor.enterSleepMode();
  delay(50);
  sensor.enterSleepMode(false);
  delay(200);
}

void loop() {
  /**
  * 获取环境温度,单位摄氏度
  * 返回值范围为: -40 C ~ 85 C
  */
  float AmbientTemp = sensor.getAmbientTempCelsius();

  /**
  * 获取测量物体一的温度,单位摄氏度
  * 返回值范围为: -40 C ~ 85 C
  */
  float Object1Temp = sensor.getObject1TempCelsius();

  // 以摄氏度打印测量数据
  Serial.print("Ambient Celsius = "); Serial.print(AmbientTemp); Serial.println(" C");
  Serial.print("Object1 Celsius = ");  Serial.print(Object1Temp);  Serial.println(" C");

  // 以华氏度打印测量数据
  Serial.print("Ambient Fahrenheit = "); Serial.print(AmbientTemp*9/5 + 32); Serial.println(" F");
  Serial.print("Object1 Fahrenheit = ");  Serial.print(Object1Temp*9/5 + 32);  Serial.println(" F");

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

样例代码2

/*!
 * @file        setSensor.ino
 * @brief       这个demo设置发射率校准系数, 设置测量参数,包括IIR、FIR、测量目标
 * @copyright   Copyright (c) 2010 DFRobot Co.Ltd (http://www.dfrobot.com)
 * @licence     The MIT License (MIT)
 * @author      [qsjhyy](qsj.huang@dfrobot.com)
 * @version     V1.0
 * @date        2021-08-09
 * @get from    https://www.dfrobot.com
 * @url         https://github.com/DFRobot/DFRobot_MLX90614
 */
#include <DFRobot_MLX90614.h>

#define MLX90614_IIC_ADDR 0x5A   // mlx9614 default IIC communication address
DFRobot_MLX90614_IIC sensor(MLX90614_IIC_ADDR, &Wire);   // 实例化一个对象,来驱动我们的传感器

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

  // 初始化传感器
  int rslt;
  while( NO_ERR != (rslt = sensor.begin()) ){
    if(ERR_DATA_BUS == rslt){
      Serial.println("Data bus error!!!");
    }else if(ERR_IC_VERSION == rslt){
      Serial.println("Chip versions do not match!!!");
    }
    delay(3000);
  }
  Serial.println("Begin ok!");

  /**
  * 设置发射率校准系数
  * calibrationValue 新的校准系数值,16 bit(0x0000~0xFFFF)
  */
  sensor.setEmissivityCorrectionCoefficient(0xFFFF);

  /**
  * 设置IIC通信地址, 掉电重启后生效
  * addr 新的IIC通信地址 7bit(0~125)
  */
  sensor.setIICAddress(0x5A);

  /**
  * 设置测量参数,包括IIR、FIR、测量目标
  * IIRMode: eIIR100, eIIR80, eIIR67, eIIR57
  * FIRMode: eFIR128, eFIR256, eFIR512, eFIR1024
  */
  sensor.setMeasuredParameters(sensor.eIIR100, sensor.eFIR1024);

  /**
  * 调整传感器睡眠模式,配置了传感器之后必须进入一次睡眠模式,才能保证之后测量数据读取正常
  * mode 选择进入睡眠模式还是退出睡眠模式,默认为进入睡眠模式
  *      true为进入睡眠模式
  *      false为退出睡眠模式(掉电重启后自动退出睡眠模式)
  */
  sensor.enterSleepMode();
  delay(50);
  sensor.enterSleepMode(false);
  delay(200);
}

void loop() {
  /**
  * 获取环境温度,单位摄氏度
  * 返回值范围为: -40 C ~ 85 C
  */
  float AmbientTemp = sensor.getAmbientTempCelsius();

  /**
  * 获取测量物体一的温度,单位摄氏度
  * 返回值范围为: -40 C ~ 85 C
  */
  float Object1Temp = sensor.getObject1TempCelsius();


  // 以摄氏度打印测量数据
  Serial.print("Ambient Celsius = "); Serial.print(AmbientTemp); Serial.println(" C");
  Serial.print("Object1 Celsius = ");  Serial.print(Object1Temp);  Serial.println(" C");

  // 以华氏度打印测量数据
  Serial.print("Ambient Fahrenheit = "); Serial.print(AmbientTemp*9/5 + 32); Serial.println(" F");
  Serial.print("Object1 Fahrenheit = ");  Serial.print(Object1Temp*9/5 + 32);  Serial.println(" F");

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

测量方法

使用红外测温模块,需要先引入一个概念——“视场 (FOV)”。 视场是由温差电堆接收到50%的辐射信号来确定的,并且和传感器的主轴线相关。如下图所示。标明视场角(FOV)大小。测量得到的温度其实是视场内被测物体的温度加权平均值,只有在被测物体完全覆盖红外传感器的FOV视场才能保证精度。所以在实际应用中必须保证测温点终端与被测母线之间的距离满足要求才能保障测温的精度要求。

SEN0206模块的视场为35°FOV,tan35°=被测物体半径÷红外传感器与被测物体之间的距离,例:被测物体的半径为5cm,这测量距离为7cm(在此范围内测试的温度最准确)。下图为此传感器的FOV图:
被测点需要全部处在视场内
被测点需要全部处在视场内

SEN0263模块的视场为5°FOV,tan5°=被测物体半径÷红外传感器与被测物体之间的距离,例:被测物体的半径为5cm,这测量距离为57cm(在此范围内测试的温度最准确)。下图为此传感器的FOV图:
被测点需要全部处在视场内
被测点需要全部处在视场内

结果

IR Thermometer Sensor-MLX90614测试结果
IR Thermometer Sensor-MLX90614测试结果

MLX90614发射率补偿方法

MLX90614如何进行发射率补偿? 什么时候需要改变发射率?

发射率就是显示物体发射IR的能力与理论绝对黑体发射能力的比值。MLX90614使用这个比率来计算物体的温度。在生产时,MLX90614在发射率为99.9%的黑体前进行校准,将该发射率定义为E=1。

不同的材料有不同的发射率,为了精确地测量温度,应该更新发射率系数到MLX90614的EEPROM中。

因此当IR辐射在以下几种方式减少时,需要一些通常的规则来补偿。例如:

1、由于低发射率的物体

2、由于IR传输材料(穿透率小于1)放在MLX90614前面

如何确定新的发射率E

为了确定新的发射率,我们应该更新MLX90614的EEPROM,需要做以下测试(使用传输材料与不同的发射率)。确保在测试这前,器件内部的发射率为E=1

当传输材料介于传感器和被测物体之间

我们可以使用MLX90614来检测原始的温度(发射率E=1),在传输材料未放在MLX90614与被测物体间之前。步骤如下:

1)加热被测物体到一个不等于环境温度的温度值。假设To=60℃(注意这个温度必须保持稳定)。被测物体与传感器的温度差应该至少为30℃。

2)开始测量并记录数据Treal=60℃、Ta_real=25℃(这些温度值为假设值)

3)放置传输材料在MLX90614前面(注:为了正常的测量,传输材料的温度必须与MLX90614的温度一样。否则MLX90614将会看到传输材料的温度,这将会引入错误)

4)再次用MLX90614进行测量,并记录数据,如Tnew =50℃、Ta_new =25℃(通常环境温以应该一样)。

当物体的发射率不等于1

为了计算新发射率的值,我们需要被测物体真实的温度值。通常有两种方法来测量温度:

1、使用精确的接触式温度计测量温度。

2、物体喷漆的部分(喷漆的发射率应该为1),因此可以用MLX90614来测量这个喷漆点(注意喷漆点必须大于MLX90614的FOV)步聚如下:

1)加热被测物体到一个不等于环境温度的温度值。假设To=60℃(注意这个温度必须保持稳定)。

2)使用上面的方法检查真实的温度,假设Treal=60℃,并记录MLX90614测得的环境温度Ta_real=25℃(这些温度仅仅只是举例)。

3)使用MLX90614测量物体的温度,并记录Tnew=40℃,Ta_new=25℃(通常环境温度应该一样)。

4)计算新的发射率系数:(注:温度使用开尔文)

Mind+(基于Scratch3.0)图形化编程

  1. 下载及安装软件。下载地址:http://www.mindplus.cc 详细教程:Mind+基础wiki教程-软件下载安装
  2. 切换到“上传模式”。 详细教程:Mind+基础wiki教程-上传模式编程流程
  3. “扩展”中选择“主控板”中的“Arduino Uno”。 "扩展"“传感器”中搜索选择“非接触式红外温度传感器”。详细教程:Mind+基础wiki教程-加载扩展库流程
  4. 进行编程,程序如下图:
  5. 菜单“连接设备”,“上传到设备”
  6. 程序上传完毕后,打开串口即可看到数据输出。详细教程:Mind+基础wiki教程-串口打印

常见问题

还没有客户对此产品有任何问题,欢迎通过qq或者论坛联系我们!

更多问题及有趣的应用,可以 访问论坛 进行查阅或发帖!

更多

原理图 Arduino library MLX90614 Datasheet SCG 文件