风筝
发表于: 2019-9-7 22:09:50 | 显示全部楼层

在本篇文章中,我们将主要介绍如何通过红外线测量物体的表面温度。使用这项技术,我们可以简单地通过向物体表面发射红外波以及分析返回传感器的红外波来收集温度信息。

measure the temperature.png


测量温度的传感器有许多不同的类型。 LM35或DS18B20温度传感器根据直接测量传感器设备表面产生的热量来提供输出信号。但是,对于高温的情况(例如明火),您无法使用基于接触的传感器来检测准确的温度。


如果您想以非接触方式检测温度,红外温度计传感器是最佳解决方案。因此,我们将使用Melexis的MLX90614红外测温传感器进行制作。 MLX90614传感器使用非接触式温度传感来收集温度信息,而不用接触物体的任何表面。


红外测温仪的工作原理

尽管人眼看不到红外光,但所有物体都发出红外光,浓度根据温度而变化。通过检测红外光,我们可以感知温度范围。 MLX90614温度计传感器使用此原理工作。


MLX90614是一款功能强大的红外传感器件,具有极低噪声放大器和17位ADC。它可以为温度计提供高精度和高分辨率。MLX90614的重要功能是出厂时已经进行了数字SMBus校准。这意味着它可以提供0.02°C的高分辨率输出,并可连续传输-20至120°C范围的测量温度。


现在在我们了解传感器的工作原理后,让我们来开始制作该测温计!


所需的材料

●    Arduino开发板

●    字符型LCD1602

●    MLX90614传感器

●    LCD扩展板(可选)

Required Material.png


连接方式

MLX90614温度传感器使用I2C进行通信,因此我们可以直接将此传感器与Arduino连接,无需任何额外电路。如下图所示连接所有组件。您可以使用LCD 1602扩展板或连接一个单独的LCD,如Fritzing图中所述。

Wiring.png

使用Arduino LCD Shield扩展板的连接方法:

For Arduino LCD Shield.png


1.png


上传代码

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

  1. /*
  2. * Non-contact Thermometer with GY - 906 module
  3. * Support for the MLX90614 sensor on the I2C bus
  4. * SDA line = A4
  5. * SCL line = A5
  6. * Sensor supply with 5V
  7. */

  8. #include <i2cmaster.h>
  9. #include <LiquidCrystal.h>

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

  11. int address = 0xb4; // Sensor address MLX90614
  12. int erc = 0; // Variable holding the PEC value
  13. int dataH = 0; // The second byte of data
  14. int dataL = 0; // The first byte of data
  15. double tempnalsb = 0.02; // Variable by which the digital value will be multiplied
  16. double temperature = 0; // Variable holding the temperature

  17. void setup () {
  18.   i2c_init (); // Initialization of the I2C bus
  19.   lcd.begin (16, 2); // Initialize the display
  20. }

  21. void loop () {

  22.   i2c_start_wait (address + I2C_WRITE); // Start I2C communication in write mode
  23.   i2c_write (0x07); // Write the value 0x07 (select the register Tobj1)
  24.   i2c_rep_start (address + I2C_READ); // Restart I2C communication at the read address
  25.   dataL = i2c_readAck (); // Read the first byte of data
  26.   dataH = i2c_readAck (); // Read the second byte of data
  27.   erc = i2c_readNak (); // Read the third (unimportant) data byte
  28.   i2c_stop (); // End of I2C transmission
  29.   
  30.   
  31.   temperature = (double) (((dataH & 0x007F) << 8) + dataL); // Create a 16-bit variable consisting of two one-byte variables
  32.   temperature = temperature * tempnalsb; // For one bit 0.02 K, the result of this operation is the temperature in Kelvin
  33.   
  34.   temperature = temperature - 273.15; // Conversion to Celsius degrees
  35.   
  36.   lcd.setCursor (0,0); // Display (first LCD line)
  37.   lcd.print ("Object =");
  38.   lcd.print (temperature);
  39.   lcd.print ("");
  40.   lcd.write (0xDF); // Degree sign
  41.   lcd.print ("C");
  42.   
  43.   i2c_start_wait (address + I2C_WRITE);
  44.   i2c_write (0x06); // Select the ambient temperature register
  45.   i2c_rep_start (address + I2C_READ);
  46.   dataL = i2c_readAck ();
  47.   dataH = i2c_readAck ();
  48.   erc = i2c_readNak ();
  49.   i2c_stop ();
  50.   
  51.   
  52.   temperature = (double) (((dataH & 0x007F) << 8) + dataL);
  53.   temperature = temperature * tempnalsb;
  54.   temperature = temperature - 273.15;
  55.    
  56.   lcd.setCursor(0,1); // Display (second LCD line)
  57.   lcd.print ("Ambient =");
  58.   lcd.print (temperature);
  59.   lcd.print ("");
  60.   lcd.write (0xDF);
  61.   lcd.print ("C");

  62. delay (200); // Delay 200ms
  63. }
复制代码

有许多项目可以使用红外温度传感器,例如测量液体表面。因为它不需要直接接触,所以MLX90614将是这些应用中的绝佳选择。

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 714 | 回复: 1501



手机版|

GMT+8, 2024-12-22 16:11 , Processed in 0.070616 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表