欢迎来到亿配芯城! | 免费注册
你的位置:AVX(艾维克斯)进口钽电容IC无源器件全系列-亿配芯城 > 芯片资讯 > 如何使用Arduino与MLX90614完成红外测温仪
如何使用Arduino与MLX90614完成红外测温仪
发布日期:2024-11-10 07:53     点击次数:139

在本文中,我将解释如何通过红外线测量表面温度。使用这项技术,我们可以简单地通过向表面发送红外波并分析返回传感器的波来收集温度信息。

1-1.png

  有许多不同类型的传感器可用于测量温度。LM35或DS18B20温度传感器根据直接施加到传感器设备表面的热量提供输出。但是,对于非常热的条件,例如明火,您不能使用基于接触的传感器来检测准确的温度。

  如果你想用非接触法(我们为这个项目做)来检测温度,红外温度计传感器是最好的解决方案。因此,我们将使用Melx90614的MelxIS红外温度计用于这个项目。MLX90614传感器使用非接触式温度传感器,在不接触任何特定表面的情况下收集温度信息。

  红外线温度计的工作原理。

  虽然肉眼看不见,但所有物体都会发出红外光,浓度随温度而变化。通过探测红外线,我们可以感应到温度范围。MLX90614温度计传感器使用此原理。

  MLX90614是一款功能强大的红外传感器,具有非常低的噪声放大器和17位ADC。它能提供高精度和高分辨率的温度计。关于MLX90614最好的部分是它使用工厂的数字SMBus进行校准。这意味着它将提供0.02°C的高分辨率输出,并连续传输-20至120°C的测量温度

现在我们了解传感器的工作原理,让我们深入了解项目!

必需材料

Arduino

字符LCD 16x2

MLX90614

LCD屏蔽(可选)

1-2.png

接线

MLX 90614温度计具有I2C通信线路,AVX(艾维克斯)进口钽电容IC无源器件 因此我们可以将此传感器与Arduino连接,无需任何额外电路。如下图所示连接所有内容。您可以使用LCD 16X2屏蔽或连接独立LCD,如Fritzing图中所述。

1-3.png

适用于Arduino LCD Shield

1-4.png

1-5.png

1-6.png

1-7.png

上传源代码

1-8.png

将以下源代码复制并粘贴到Arduino IDE。仔细检查连接后,上传代码。

/*

* Non-contact Thermometer with GY - 906 module

* Support for the MLX90614 sensor on the I2C bus

* SDA line = A4

* SCL line = A5

* Sensor supply with 5V

*/

#include

#include

LiquidCrystal lcd (8, 9, 4, 5, 6, 7);

int address = 0xb4; // Sensor address MLX90614

int erc = 0; // Variable holding the PEC value

int dataH = 0; // The second byte of data

int dataL = 0; // The first byte of data

double tempnalsb = 0.02; // Variable by which the digital value will be multiplied

double temperature = 0; // Variable holding the temperature

void setup () {

i2c_init (); // Initialization of the I2C bus

lcd.begin (16, 2); // Initialize the display

}

void loop () {

i2c_start_wait (address + I2C_WRITE); // Start I2C communication in write mode

i2c_write (0x07); // Write the value 0x07 (select the register Tobj1)

i2c_rep_start (address + I2C_READ); // Restart I2C communication at the read address

dataL = i2c_readAck (); // Read the first byte of data

dataH = i2c_readAck (); // Read the second byte of data

erc = i2c_readNak (); // Read the third (unimportant) data byte

i2c_stop (); // End of I2C transmission

temperature = (double) (((dataH & 0x007F) 《《 8) + dataL); // Create a 16-bit variable consisting of two one-byte variables

temperature = temperature * tempnalsb; // For one bit 0.02 K, the result of this operation is the temperature in Kelvin

temperature = temperature - 273.15; // Conversion to Celsius degrees

lcd.setCursor (0,0); // Display (first LCD line)

lcd.print (“Object =”);

lcd.print (temperature);

lcd.print (“”);

lcd.write (0xDF); // Degree sign

lcd.print (“C”);

i2c_start_wait (address + I2C_WRITE);

i2c_write (0x06); // Select the ambient temperature register

i2c_rep_start (address + I2C_READ);

dataL = i2c_readAck ();

dataH = i2c_readAck ();

erc = i2c_readNak ();

i2c_stop ();

temperature = (double) (((dataH & 0x007F) 《《 8) + dataL);

temperature = temperature * tempnalsb;

temperature = temperature - 273.15;

lcd.setCursor(0,1); // Display (second LCD line)

lcd.print (“Ambient =”);

lcd.print (temperature);

lcd.print (“”);

lcd.write (0xDF);

lcd.print (“C”);

delay (200); // Delay 200ms

}

有很多项目可以派上红外温度传感器,例如测量液体或热触摸表面。因为它不需要直接接触,所以在这些情况下MLX90614将是一个很好的选择。