Infrared Temperature Sensor

来自Waveshare Wiki
跳转至: 导航搜索
Infrared-Temperature-Sensor
{{{name2}}}
{{{name3}}}
功能简介
特性 非接触红外测温感器
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
' 无特性,不解释
接口 I2C

说明

产品概述

本模块是一款非接触式红外温度传感器,能根据被测物体的红外辐射能量大小和波长分布来检测物体的表面温度。

产品特点

  • 非接触式,高精度,高分辨率,响应时间快
  • 出厂自带校准,带温度梯度补偿
  • 内置电平转换电路,可直接接入3.3V或5V的MCU系

产品参数

参数名称 参数
工作电压 3.3V/5V
环境温度测量范围 -40°C ~ 85 °C
物体温度测量范围 -70°C ~ 380 °C
分辨率 0.02°C
精度 ±0.5°C ( 0~50°C)
视场角(FOV) 35°
总线接口 I2C
产品尺寸 28mm x 16 mm
固定孔尺寸 2.0mm

主要用途:

  • 高精度非接触温度测量、工业温度控制、带温度控制的家用电器等

接口说明

引脚 功能
VCC 电源正(3.3V/5V)
GND 电源地
SDA I2C数据输入
SCL I2C时钟信号

通讯方式

模块的通讯方式有PWM 和 SMBus(系统管理总线),这里只介绍SMBus接口通讯。SMBus是一种两线制接口。它基于I2C 总线原理演变而来,可以认为是简化版的I2C总线。
SMBus和I2C 总线一样,在传送数据过程中共有三种类型信号:开始信号、结束信号和应答信号。
开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。
Infrared-Temperature-Sensor-UM-1.jpg
结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。
应答信号:主机(从机)接收到从机(主机)的8bit数据后,需要向对方发送应答信号,使对方知道数据发送是否成功,即把SDA拉低一个完整的SCL周期。
Infrared-Temperature-Sensor-UM-2.jpg

SMBus 总线协议

Infrared-Temperature-Sensor-UM-3.jpg
在从机(SD)接收到每8位数据后,会回复 ACK/NACK 信息。当主机(MD)初始化通信,将首先发送SD的地址,只有能识别该地址的 SD 会确认,其它的会保持沉默。如果 SD 未确认其中的任意字节, MD 应停止通信并重新发送信息PEC 的计算结果是基于除 START、REPEATED START、STOP、ACK 和 NACK位外的所有位 。PEC 是 CRC-8 的多项式 X8+X2+X1+1。每个字节的最高有效位首先传送。

SMBus读数据时序

Infrared-Temperature-Sensor-UM-4.jpg
首先主机会发送一个Start信号,然后将从机的7位地址与“读”操作位组合成 8 位的数据发送给从机,从机接收到后会响应一个ACK,主机再发送8位格式的命令给从机,从机接收到后发送ACK,此时主机重新发送一个Start信号,然后将从机的7位地址与读操作位组合成 8 位的数据发送给从机,从机接收到数据后发送ACK,然后将其寄存器中的值发送给主机,主机每接收到一个字节数据后都要回应一个ACK,最后收到PEC后回应ACK,并且发送Stop信号结束通信。

SMBus写数据时序

Infrared-Temperature-Sensor-UM-5.jpg
首先主机会发送一个Start信号,然后将从机的7位地址与“写”操作位组合成 8 位的数据发送给从机,从机接收到后会响应一个ACK信号,主机再发送8位格式的命令给从机,从机接收到后发送ACK信号,然后主机发送低字节数据,收到从机的ACK后,再发送高字节数据,收到从机的ACK后,再发送PEC字节数据,收到从机的ACK后,主机发送Stop信号以结束通信。

MLX90614的RAM寄存器

Infrared-Temperature-Sensor-UM-6.jpg

MLX90614的EEPROM寄存器

Infrared-Temperature-Sensor-UM-7.jpg
注*: xxxxx 代表要读取/写入的上面的RAM、EEPROM寄存器地址的低5位。 注**: 行为类似读命令。 MLX90614 在传送外 16 位数据后会反馈 PEC,其中只有 4 位是主机(MD)需要的,它会在传送完第一个字节后停止通信,读取和读取标示符的区别在于后者没有重复起始位。
读取标示符:

  • Data[7] - EEBUSY – 先前对 EEPROM 的读/写操作正在进行,高有效。
  • Data[6] – 未使用
  • Data[5] - EE_DEAD - EEPROM 发生双重错误,高有效。
  • Data[4] - INIT – POR 初始化程序正在进行,低有效。
  • Data[3] – 未执行。
  • Data[2..0] 和 Data[8..15] – 都为 0。

MLX90614的命令格式

Infrared-Temperature-Sensor-UM-8.jpg
注*: xxxxx 代表要读取/写入的上面的RAM、EEPROM寄存器地址的低5位。 注**: 行为类似读命令。 MLX90614 在传送外 16 位数据后会反馈 PEC,其中只有 4 位是主机(MD)需要的,它会在传送完第一个字节后停止通信,读取和读取标示符的区别在于后者没有重复起始位。 读取标示符:

  • Data[7] - EEBUSY – 先前对 EEPROM 的读/写操作正在进行,高有效。
  • Data[6] – 未使用
  • Data[5] - EE_DEAD - EEPROM 发生双重错误,高有效。
  • Data[4] - INIT – POR 初始化程序正在进行,低有效。
  • Data[3] – 未执行。
  • Data[2..0] 和 Data[8..15] – 都为 0。

如何使用

程序分析

从上面的SMBus 总线协议和通讯时序可以知道,开始通讯时,首先主机会发送一个开始信号,然后将从机的7位地址(SA)与读/写操作位组合成 8 位的数据发送给从机,当我们的SMBus总线上只有一只MLX90614传感器时,7位的从机地址(SA)默认是0x00,当需要用同一总线操作多只MLX90614时,可以修改EEPROM中的从机地址。那么主机发送完开始信号后,如果我们要读MLX90614,那么就接着发送 (SA<<1) + 0 = 0x00,如果我们要写,那么就接着发送 (SA<<1) + 1 = 0x01。
根据上面的RAM寄存器地址表格,可以知道在RAM寄存器中,环境温度寄存器地址为0x06,物体温度寄存器地址为0x07,从命令表格知道,访问RAM的操作码是0x00,访问EEPROM的操作码是0x20,一般我们只需要从RAM中读取温度,不需要访问EEPROM。那么我们要访问RAM中的环境温度寄存器,命令为:0x00 | 0x06 = 0x06,访问RAM中的物体温度寄存器,命令为:0x00 | 0x07 = 0x07。
以STM32的程序为例,该驱动程序是通过PB8、PB9来模拟SMBus时序,驱动代码在smbus.c文件中。我们按照上面介绍的时序读取到环境温度、物体温度数据后,可以根据数据手册来计算环境温度、物体温度:
摄氏度值(°C): ((TempData_H <<8) + TempData_L )*0.02 - 273.15

测量原理

对于非接触式红外测温模块,很重要的一个概念是“视场 (FOV)”。 视场是由温差电堆接收到50%的辐射信号来确定的,并且和传感器的主轴线相关。测得的温度是视场内被测物体的温度加权平均值,所以当被测物体完全覆盖FOV视场时的准确度是最高的。
Infrared-Temperature-Sensor-UM-9.jpg
本模块的传感器型号是MLX90614ESF-BCC,上图为BCC的FOV图,FOV = 35°,即:
被测物体半径÷与传感器探头的距离 = tan35°,即当被测物体的半径为5CM时,最大的测量距离为7CM(指的是保证该温度值是准确的最大测量距离)。
而市面上常用的BAA的FOV图如下:
Infrared-Temperature-Sensor-UM-10.jpg
对比了一下两个型号的传感器,实际测试的结果是:
拿手掌作为温度参考物,当BCC距离手掌7CM以内时,温度基本不变,当距离扩大至15CM时,温度值才下降了1°C。而对于BAA,当距离手掌2CM以外时,温度就已经开始变化得很快,当距离扩大至4CM时,温度值就已经下降1°C。
区别很明显,BCC比BAA性能要好不少,可见测温的距离和准确度和FOV有关,FOV越小,性能就越好。

RPI使用教程

开启I2C接口

  • 打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 
选择 Interfacing Options -> I2C ->yes 启动 i2C 内核驱动

RPI open i2c.png
然后重启树莓派:

sudo reboot

安装库

如果使用bookworm系统,只能使用lgpio库,bcm2835跟wiringPi无法安装与使用,python库可以不安装,直接运行程序即可

BCM2835

#打开树莓派终端,并运行以下指令
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.71.tar.gz
tar zxvf bcm2835-1.71.tar.gz 
cd bcm2835-1.71/
sudo ./configure && sudo make && sudo make check && sudo make install
# 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/

wiringPi

#打开树莓派终端,并运行以下指令
cd
sudo apt-get install wiringpi
#对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

#Bullseye分支系统使用如下命令:
git clone https://github.com/WiringPi/WiringPi
cd WiringPi
./build
gpio -v
# 运行gpio -v会出现2.70版本,如果没有出现说明安装出错

lgpio

wget https://github.com/joan2937/lg/archive/master.zip
unzip master.zip
cd lg-master
sudo make install 
# 更多的可以参考官网:https://github.com/gpiozero/lg
  • 安装Python函数库
#python3
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install RPi.GPIO
sudo pip3 install spidev

下载测试程序

打开树莓派终端,执行:

sudo apt-get install p7zip-full -y
sudo wget  https://www.waveshare.net/w/upload/5/53/Infrared-Temperature-Sensor-Code.7z
7z x Infrared-Temperature-Sensor-Code.7z
cd Infrared-Temperature-Sensor-Code/RaspberryPi/

硬件连接

树莓派连接引脚对应关系
MLX90614 Raspberry Pi 功能
Board物理引脚序号
VCC 3.3V 电源输入
GND GND 电源地
SDA 3 I2C数据输入
SCL 5 I2C时钟信号

MLX90614 RPI 1.jpg

运行测试程序

以下命令请在RaspberryPi下执行,否则不在索引不到目录;

C

  • 重新编译,编译过程可能需要几秒
cd c
sudo make clean
sudo make 
sudo ./main

python

cd python
sudo python3 MLX90614.py

现象

在树莓派运行程序后,就会实时输出环境温度跟探测到的物体温度,如下图所示:

C

MLX90614 RPI C 1.jpg

python

MLX90614 RPI PY 1.jpg

STM32使用教程

我们提供的例程是基于STM32F103RBT6,提供的连接方式是对应的STM32F103RBT6的引脚为例,如果有需要使用其他STM32,请按实际引脚连接

硬件连接

STM32F103RB连接引脚对应关系
MLX90614 STM32 功能
VCC 3.3V 电源输入
GND GND 电源地
SDA PB9 I2C数据输入
SCL PB8 I2C时钟信号

MLX90614 STM32 2.jpg

软件说明

例程是基于HAL库进行开发的。 请在资料里面下载程序,找到STM32程序文件目录,打开Infrared-Temperature-Sensor-Code\STM32\STM32F103RB\MDK-ARM
目录下的Infrared-Temperature-Sensor.uvprojx,即可看到程序。
MQ5 STM32 1.jpg

打开main.c,重新编译下载即可。
MQ5 STM32 2.jpg

下载成功后,运行SSCOM,就会实时输出环境温度跟探测到的物体温度。
MLX90614 STM32 1.jpg

现象

打开串口调试软件,就会实时输出环境温度跟探测到的物体温度。

Arduino使用教程

本例程已经在Arduino uno上测试通过,直接按下表连接Arduino uno即可

硬件连接

您可以对照以下表格连线。

Arduino连接引脚对应关系
MLX90614 Arduino 功能
VCC 5V 电源输入
GND GND 电源地
SDA SDA I2C数据输入
SCL SCL I2C时钟信号

MLX90614 Arduino 2.jpg

安装编译软件(Windows教程)

arduino IDE 安装教程

运行程序

在我们提供的资料里面下载程序,并解压,再进入Infrared-Temperature-Sensor-Code/Arduino/WaveShare_MLX90614
双击打开WaveShare_MLX90614.ino文件。
选择你的开发板,跟对应的端口。

MQ5 Arduino 1.jpg

进行编译下载,如下图:
MQ5 Arduino 2.jpg

下载成功后,运行SSCOM,就会实时输出环境温度跟探测到的物体温度。
MLX90614 Arduino 1.jpg

现象

打开串口调试软件,就会实时输出环境温度跟探测到的物体温度。

资料


文档

程序

数据手册


FAQ

  • 实际测试的结果,当拿手掌作为温度参考物,传感器距离手掌7cm以内时,温度基本不变,当距离扩大至15cm时,温度值才下降了1°C。准确度会随距离增加而下降。


技术支持


联系人:黄工
QQ:2850151199
EMAIL:2850151199@qq.com
电话:0755-83040712
微信:扫下方二维码添加
Service20-Weichat.png

说明:进行售后服务前,请准备好客户信息(定货单位、定货人等),以供验证