风筝
发表于: 2019-7-5 22:12:01 | 显示全部楼层

在调试电子电路或测试新硬件设计时,我常会通过触摸来检查电路板上的器件是否异常发热。如果某些东西搞砸了(通常是在第一次尝试中),这些器件可能会达到80°C或更高温度,不仅会烧毁器件,还会烫伤手指。我都不记得被烫伤了多少次了,现在我决定用Arduino和红外线温度传感器来制作属于自己的温度枪。该温度枪将使用一颗名为MLX90614的非接触式温度传感器制作;因此,它不仅可以用于测量元件温度,还可以用于测量体温、表面温度、热通风等等。当然,这些温度测温仪在市场上很容易从Fluke、Flir等着名制造商那里买到。但是它们并不轻巧放在口袋里,最重要的是,自己制作属于自己的小工具才会更加有趣。让我们开始......


所需的材料

●    Arduino Pro Mini

●    MLX90614红外温度传感器

●    OLED显示屏 -  SSD1306

●    激光二极管

●    9V电池

●    按钮

●    电池夹

●    连接导线


MLX90614红外测温仪

在继续学习本本之前,了解MLX90614传感器的工作原理非常重要。市场上有许多温度传感器,经常使用的是DHT11传感器和LM35,用于需要测量大气湿度或温度的许多应用。


但是在这里,对于温度枪,我们需要一种能够感知特定物体(不是环境)温度的传感器,并且不会直接与物体接触。为此,我们使用不太常接触到的温度传感器,利用激光或IR红外来计算物体的温度。 MLX90614就是这样一种传感器,它使用红外能量来检测物体的温度。

MLX90614-Infrared-Thermometer.jpg

MLX90614传感器由迈来芯微电子集成系统制造,它内置两个器件,一个是红外热电堆检测器(传感单元),另一个是信号调理DSP器件(计算单元)。它基于Stefan-Boltzmann定律,该定律指出所有物体都发射红外能量,并且该能量的强度将与该物体的温度成正比。传感器中的传感单元测量目标物体发射的IR能量,计算单元使用17位内置ADC将其转换为温度值,并通过I2C通信协议输出数据。传感器测量物体温度和环境温度,以校准物体温度值。 MLX90614传感器的功能如下,有关详细信息,请参阅MLX90614数据手册


MLX90614主要特点:

●    工作电压:3.6V至5V

●    物体温度范围:-70°C至382.2°C

●    环境温度范围:-40°C至125°C

●    分辨率/准确度:0.02°C


传感器和物体之间的距离应该是多少?

数据手册没有直接回答的一个问题是传感器和物体之间的测量距离。该距离的值由术语视场(FOV)给出,对于我们的传感器,视场大约为80°。

MLX90614-Infrared-Thermometer-Field-of-View.png

如上所示,您可以将感应范围视为传感器点的圆锥形状。因此,当我们远离测量对象时,感应区域增加了两倍。每1cm的含义我们远离物体移动感应区域增长2cm。在我们的温度枪中,我们在传感器顶部放置了一个激光二极管,以了解传感器当前指向的传感区域。我发现,如果枪指向离物体2厘米处,并且随着我们离开时精度下降,则值是可靠的。


电路原理图

红外测温仪的电路图非常简单。完整的电路如下所示,它是使用Fritzing软件创建的。

Circuit-Diagram-for-IR-Thermometer-using-Arduino-and-Infrared-Temperature-Sensor.png


由于Fritzing软件不支持MLX90614传感器的部件,我们使用了一个注释来提及其连接如上所示,我们也使用红色LED代替激光二极管。整个电路由9V电池通过按钮供电。按下按钮时,9V电池连接到Arduino的RAW引脚,然后使用板载稳压器将其调节至5V。然后,该5V用于为OLED模块、传感器和激光二极管供电。

Circuit-Hardware-for-IR-Thermometer-using-Arduino-and-Infrared-Temperature-Sensor.jpg


设计温度枪套管

为了使项目更有趣和实用,我们为温度枪设计3D模型并打印外壳。设计包括两个部分,一个是作为枪体的顶部,包括Arduino控制器、OLED、传感器和激光二极管。另一个是底部,用作容纳电池和按钮的枪的手柄。此处的“按钮”用作触发器。该模型如下所示。

3D-Modelling-Thermal-Gun.jpg


设计文件可从thingiverse下载;您可以使用3D打印机下载设计并打印一个,也可以根据需要进行修改。下载链接如下:Thermal Gun 3D模型。下载文件后,您可以直接开始3D打印设计,也可以根据您的要求进行一些调整。


3D打印外壳

然后将模型保存为STL文件,并使用Cura将其转换为G代码。我用Tevo塔兰图拉打印机打印两个零件,然后将它们拧在一起。如果打印机支持,也可以将这两个部件打印为单件。我的打印的切片设置如下所示

3D-Model-Designing-Thermal-Gun.png

我花了将近6个小时来打印这两个部件,一旦打印出硬件连接,我就可以直接使用7针和4针Relimate连接器(RMC)将导线直接焊接到Arduino引脚,分别用于传感器和OLED显示器。然后使用螺钉将OLED安装在印刷部件中,同时使用热胶安装传感器和激光二极管。然后,电源引脚(Raw、Gnd)通过导线部分向下连接,手柄部分由按钮和电池组成。然后通过按钮将这些电线连接到电池。组装完成后,温度枪如下所示

Making-IR-Thermometer-using-Arduino-and-Infrared-Temperature-Sensor.jpg

Thermal-Gun-Construction.jpg


编程Arduino温度枪

Arduino程序从MLX90614读取温度值并将其显示在OLED显示屏上。幸运的是,由于Adafruit为我们提供了一个可轻松读取MLX90614数据的库,因此该程序非常简单。该库可以从下面的链接下载:Arduino MLX90614库。

该链接将库作为ZIP文件夹下载。下载后,按照Sketch  - > Include Library  - > Add .ZIP Library命令将其添加到Arduino IDE,然后浏览该ZIP文件的位置。添加库后,我们可以开始编写程序,可以在本页底部找到该项目的完整程序。这里将以小片段进行解释。


和往常一样,我们在程序中首先添加所需的库文件。这里的Wire库(内置)用于使用I2C协议进行通信,SparkFun ML90614库用于与传感器通信。 SPI、GFX和SSD1306库用于与4线SPI协议通信到OLED显示模块。

  1. #include <Wire.h>
  2. #include <SparkFunMLX90614.h>
  3. #include <SPI.h>
  4. #include <Adafruit_GFX.h>
  5. #include <Adafruit_SSD1306.h>
复制代码

然后,我们定义了OLED连接的引脚。由于该模块与SPI配合使用,因此我们使用了Arduino的SPI引脚。 OLED显示屏也可以使用I2C协议,但我们不能在这里使用I2C,因为I2C引脚已经被温度计传感器占用。

  1. #define OLED_MOSI   9
  2. #define OLED_CLK   10
  3. #define OLED_DC    11
  4. #define OLED_CS    12
  5. #define OLED_RESET 13
  6. Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
复制代码

void setup()函数内部,我们初始化用于调试的串行监视器,并使用之前创建的对象therm初始化IR温度传感器。最常用的温度单位是​​摄氏度(摄氏度),因此我们设置了TEMP_C的单位,如果你需要的值是华氏度(F),你也可以将它改为TEMP_F。最后,我们初始化OLED显示屏,然后清除其显示。此外,OLED的屏幕旋转180度,以便于在外壳中安装选项。

  1. void setup()
  2. {
  3.   Serial.begin(9600);
  4.   therm.begin();
  5.   therm.setUnit(TEMP_C);

  6.    display.begin(SSD1306_SWITCHCAPVCC);
  7.    display.clearDisplay();
  8.    display.setRotation(2);
  9. }
复制代码

loop()函数内部,我们从传感器读取温度值并将其转换为String以显示在OLED显示屏中。我们还在串行监视器上打印了该值以进行调试。我们还增加了一个名为runner的变量,每当温度传感器的值成功更新时,它就会在屏幕上产生一个小动画,这将帮助我们知道读数是否因某种原因而被卡住。

  1. if (therm.read()) // On success, read() will return 1, on fail 0.
  2.   {
  3.     temperature = String(therm.object(), 2);
  4.     Serial.print("Object: ");
  5.     Serial.print(temperature); Serial.println("C");
  6.     display.clearDisplay();
  7.     runner++;
  8.     delay(5);
  9.   }
复制代码

测试Arduino温度枪

一旦Arduino代码准备就绪,我们可以使用外部TTL编程器或FTDI板将其上传到我们的硬件,因为pro mini没有板载编程器。然后只需按下按钮即可触发温度枪,您将注意到激光束落在物体上,并且OLED屏幕上显示的物体温度如下图所示。在这里,我用它来测量激光束指向的元件温度。

IR-Thermometer-using-Arduino-and-Infrared-Temperature-Sensor.jpg


我们还在烙铁、3D打印机喷嘴、冰块等上测试了温度枪,并且观察到令人满意的结果。希望您喜欢这个项目,并在制作项目时学到了一些有用的东西,如果您有任何疑问请在本帖下面进行回复。


代码

本文使用的完整代码如下所示: main.rar (791 Bytes, 下载次数: 168)

跳转到指定楼层
anjingruida
发表于: 2020-2-9 21:06:30 | 显示全部楼层

我用nuo试了您的代码,发现屏幕不显示数据
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1480



手机版|

GMT+8, 2024-4-20 23:32 , Processed in 0.133908 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

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

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