风筝
发表于: 2020-10-20 21:49:28 | 显示全部楼层

世界上大多数温度测量技术都需要温度传感器与要测量温度的物体或环境之间进行某种形式的物理接触,但是随着技术的发展,这种情况也发生了变化。需要能够在没有物理接触的情况下测量物体的温度。这就需要使用红外传感器进行温度测量。


红外温度计(Infrared Thermometer)的工作原理很简单,所有温度在0开尔文(绝对零度)以上的物体都会发射出红外能量,该红外能量可以被红外温度计传感器检测到。它的设计包括一个透镜,该透镜将物体所发射的红外能量聚焦在探测器前面。检测器将能量转换为电信号,然后在补偿环境温度的变化后传递给微控制器进行转换并以温度单位显示。在本篇文章中,我们将使用Arduino Uno开发板和MLX90614红外温度传感器自制一个红外温度计,并使用诺基亚5110 LCD显示屏扩展板显示测得的温度。

3375216317.jpg


MLX90614是一款用于非接触式温度测量的红外温度传感器。它在室温下可以测量-70至380摄氏度范围内的温度,精度约为0.5C。以下列出了该传感器的一些功能:

√    体积小,成本低

√    易于整合

√    出厂校准的温度范围很广:传感器温度为-40至125°C,物体温度为-70至380°C

√    在很宽的温度范围内(Ta和To均为0 .. + 50 C)具有0.5°C的高精度

√    0.02°C的测量分辨率

√    单区和双区版本

√    兼容SMBus的数字接口,可快速读取温度并建立传感器网络

√    可定制的PWM输出,可连续读取


在本篇文章中,我们将使用诺基亚5110 LCD扩展模块,我们之前用过其他类型的显示屏,还未使用过扩展板模块。该扩展板模块带有操纵杆和按钮。它与Arduino Uno和大多数其他Arduino开发板引脚兼容。

LCD4884-1-1024.jpg


所需的组件

●    MLX90614红外传感器

●    诺基亚5110显示屏扩展板模块

●    Arduino Uno开发板


原理图

这个项目的原理图非常简单,因为我们使用的是一个显示屏模块,因此不需要使用导线进行连接,我们只需将显示屏模块直接插入Arduino开发板即可。 Arduino与温度传感器之间的连接如下图所示。

IR-temperature-sensor-schematics.png


代码

本文的主要目标是测量温度,对其进行处理并将其显示在LCD上。为了使我们能够轻松地与MLX90614温度传感器进行通信,我们将使用Adafruit提供的mlx90614温度传感器库诺基亚5110 LCD图形库,以便在屏幕上轻松显示文本。


为了简要说明该项目的代码,我们像往常一样首先包含代码中需要的所有库。

  1. # Written by Nick Koumaris
  2. # info@educ8s.tv

  3. #include <LCD5110_Graph.h>
  4. #include <Wire.h>
  5. #include <Adafruit_MLX90614.h>=
复制代码

接下来,我们创建LCD库的对象,指定LCD引脚连接到的Arduino的引脚。

  1. LCD5110 lcd(2,3,4,6,5); //Use this line with the shield
复制代码

完成此操作后,我们为显示所需的字体和其他元素创建变量,然后创建温度传感器实例。

  1. char TEMPERATURE = 'C';

  2. extern uint8_t SmallFont[];
  3. extern uint8_t BigNumbers[];
  4. extern uint8_t uic[];
  5. extern uint8_t uif[];
  6. extern uint8_t splash[];

  7. Adafruit_MLX90614 mlx = Adafruit_MLX90614();
复制代码

接下来,我们编写void setup()函数。首先初始化LCD和温度传感器,然后使用LCD.drawbitmap()在显示器上创建用户界面。该界面已经被设计并转换为C文件,并且已附加到代码中。使用UI的原因是能够以更加用户友好和有效的方式显示数据。

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   lcd.InitLCD(60);
  5.   mlx.begin();
  6.   lcd.drawBitmap(0, 0, splash, 84, 48);
  7.   lcd.update();
  8.   delay(3000);
  9. }
复制代码

接下来是void loop()函数。 该函数的操作很简单。 首先确定要以摄氏度或华氏度显示温度的度量单位,然后从温度传感器读取温度并将其显示在显示屏上。 为了准确起见,在两次读取之间插入1000ms的时间延迟,以确保并防止读取请求冲突。

  1. void loop()
  2. {
  3.   String temperature="";
  4.   lcd.clrScr();
  5.   
  6.   if(TEMPERATURE == 'C')
  7.   {
  8.      temperature = String(mlx.readObjectTempC(),1);
  9.      lcd.drawBitmap(0, 0, uic, 84, 48);
  10.   }else
  11.   {
  12.      temperature = String(mlx.readObjectTempF(),1);
  13.      lcd.drawBitmap(0, 0, uif, 84, 48);
  14.   }
  15.   
  16.   if(temperature.length()>4)
  17.   {
  18.     temperature.remove(3,2);
  19.   }
  20.   
  21.   Serial.println(temperature);
  22.   lcd.setFont(BigNumbers);
  23.   
  24.   if(temperature.length()==4)
  25.   {
  26.     lcd.print(temperature,5,19);
  27.   }else
  28.   {
  29.     lcd.print(temperature,15,19);
  30.   }
复制代码

演示效果

确保按照原理图部分中的说明连接各个组件。复制代码并上传到Arduino开发板,然后将温度传感器指向要测量其温度的物体。一段时间后,该物体的温度将显示在屏幕上。

IR-temperature-sensor-Demo.jpg


除非接触式温度外,MLX90614红外温度传感器还可以用于测量环境温度,但是在本文中我们将不考虑该温度。该项目主要应用在暖气和空调、监控冷却系统、锅炉运行、监控加工和储存食物的温度等场合。


以上就是本文的全部内容。如果您有任何疑问,请在本帖下面进行回复。

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

本版积分规则

主题 714 | 回复: 1501



手机版|

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

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

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