Skip to main content

红外测温(MLX90614)

前言

MLX90614是一款用于非接触式温度测量的红外温度计,能够测量-70至380°C之间的物体。该传感器采用红外敏感热电堆探测器芯片,可在温度范围内以0.02°C的分辨率测量温度。

实验平台

pyWiFi-ESP32-S3开发套件和红外测温传感器模块,传感器连接到I2C/UART扩展接口。 bmp280_1

实验目的

通过python编程实现MLX90614非接触式测温。

实验讲解

本例程用到的MLX90614传感器模块,有DCC(短距离10cm)和DCI(远距离100cm)两个型号,代码通用。点击购买>>

mlx90614_1

模块参数
供电电压3.3V
测量距离DCC(10cm) 和 DCI(100cm)
测量范围-70℃ - 382℃
测量精度0.5℃
通信方式I2C总线(默认地址:0x5a)
引脚说明VCC: 接3.3V
GND: 接地
SDA: I2C数据引脚
SCL: I2C时钟引脚

从上面介绍可以看到,BMP280是一款通过I2C接口驱动的传感器。连接到pyBase左下角的I2C外扩接口上。我们通过前面学习的I2C接口使用的方式,即可以对该模块实现数据通讯。

MLX90614对象

构造函数

mlx = mlx90614.MLX90614(i2c)

构建MLX90614对象。

参数说明:

  • i2c 定义好的I2C对象。

使用方法

mlx.ObjectTemp()

返回物体温度,单位℃,数据类型:float


mlx.AmbientTemp()

返回环境温度,单位℃,数据类型:float


理解了MLX90614传感器原理和对象使用方法后,我们可以整理出编程思路,流程图如下 :

参考代码

'''
实验名称:MLX90614红外测温模块
版本:v1.0
平台:pyWiFi ESP32-S3
平台:01Studio pyWiFi-ESP32-S3
说明:测量物体温度和环境温度并在OLED上显示
'''

from machine import Pin,SoftI2C
from ssd1306 import SSD1306_I2C
import mlx90614
import time

#构建OLED对象
i2c = SoftI2C(sda=Pin(42), scl=Pin(40))
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)

#红外测温对象
i2c2 = SoftI2C(sda=Pin(9), scl=Pin(8),freq=100000)
temp = mlx90614.MLX90614(i2c2)

oled.fill(0)
oled.text("IR Temp:", 0, 0)
oled.show()

while True:

oled.fill(0)
oled.text("IR Temp:", 0, 0)
oled.text('ObjTemp:'+str('%.2f'%temp.ObjectTemp()+' C') , 0, 25)
oled.text('AmbTemp:'+str('%.2f'%temp.AmbientTemp()+' C') , 0, 45)
oled.show() #OLED执行显示
time.sleep_ms(500)

实验结果

由于本例程代码依赖其它py库,所以需要将mlx90614.py文件上传到开发板文件系统:

mlx90614

使用Thonny IDE运行主程序代码,可以看到OLED屏显示出环境温度和物体温度信息:

bmp280_1