在调试电子电路或测试新硬件设计时,我常会通过触摸来检查电路板上的器件是否异常发热。如果某些东西搞砸了(通常是在第一次尝试中),这些器件可能会达到80°C或更高温度,不仅会烧毁器件,还会烫伤手指。我都不记得被烫伤了多少次了,现在我决定用Arduino和红外线温度传感器来制作属于自己的温度枪。该温度枪将使用一颗名为MLX90614的非接触式温度传感器制作;因此,它不仅可以用于测量元件温度,还可以用于测量体温、表面温度、热通风等等。当然,这些温度测温仪在市场上很容易从Fluke、Flir等着名制造商那里买到。但是它们并不轻巧放在口袋里,最重要的是,自己制作属于自己的小工具才会更加有趣。让我们开始......
所需的材料
● Arduino Pro Mini
● MLX90614红外温度传感器
● OLED显示屏 - SSD1306
● 激光二极管
● 9V电池
● 按钮
● 电池夹
● 连接导线
MLX90614红外测温仪
在继续学习本文之前,了解MLX90614传感器的工作原理非常重要。市场上有许多温度传感器,经常使用的是DHT11传感器和LM35,用于需要测量大气湿度或温度的许多应用。
但是在这里,对于温度枪,我们需要一种能够感知特定物体(不是环境)温度的传感器,并且不会直接与物体接触。为此,我们使用不太常接触到的温度传感器,利用激光或IR红外来计算物体的温度。 MLX90614就是这样一种传感器,它使用红外能量来检测物体的温度。
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°。
如上所示,您可以将感应范围视为传感器点的圆锥形状。因此,当我们远离测量对象时,感应区域增加了两倍。每1cm的含义我们远离物体移动感应区域增长2cm。在我们的温度枪中,我们在传感器顶部放置了一个激光二极管,以了解传感器当前指向的传感区域。我发现,如果枪指向离物体2厘米处,并且随着我们离开时精度下降,则值是可靠的。
电路原理图
红外测温仪的电路图非常简单。完整的电路如下所示,它是使用Fritzing软件创建的。
由于Fritzing软件不支持MLX90614传感器的部件,我们使用了一个注释来提及其连接如上所示,我们也使用红色LED代替激光二极管。整个电路由9V电池通过按钮供电。按下按钮时,9V电池连接到Arduino的RAW引脚,然后使用板载稳压器将其调节至5V。然后,该5V用于为OLED模块、传感器和激光二极管供电。
设计温度枪套管
为了使项目更有趣和实用,我们为温度枪设计3D模型并打印外壳。设计包括两个部分,一个是作为枪体的顶部,包括Arduino控制器、OLED、传感器和激光二极管。另一个是底部,用作容纳电池和按钮的枪的手柄。此处的“按钮”用作触发器。该模型如下所示。
设计文件可从thingiverse下载;您可以使用3D打印机下载设计并打印一个,也可以根据需要进行修改。下载链接如下:Thermal Gun 3D模型。下载文件后,您可以直接开始3D打印设计,也可以根据您的要求进行一些调整。
3D打印外壳
然后将模型保存为STL文件,并使用Cura将其转换为G代码。我用Tevo塔兰图拉打印机打印两个零件,然后将它们拧在一起。如果打印机支持,也可以将这两个部件打印为单件。我的打印的切片设置如下所示
我花了将近6个小时来打印这两个部件,一旦打印出硬件连接,我就可以直接使用7针和4针Relimate连接器(RMC)将导线直接焊接到Arduino引脚,分别用于传感器和OLED显示器。然后使用螺钉将OLED安装在印刷部件中,同时使用热胶安装传感器和激光二极管。然后,电源引脚(Raw、Gnd)通过导线部分向下连接,手柄部分由按钮和电池组成。然后通过按钮将这些电线连接到电池。组装完成后,温度枪如下所示
编程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显示模块。
#include <Wire.h>
#include <SparkFunMLX90614.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
然后,我们定义了OLED连接的引脚。由于该模块与SPI配合使用,因此我们使用了Arduino的SPI引脚。 OLED显示屏也可以使用I2C协议,但我们不能在这里使用I2C,因为I2C引脚已经被温度计传感器占用。
#define OLED_MOSI 9
#define OLED_CLK 10
#define OLED_DC 11
#define OLED_CS 12
#define OLED_RESET 13
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度,以便于在外壳中安装选项。
void setup()
{
Serial.begin(9600);
therm.begin();
therm.setUnit(TEMP_C);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setRotation(2);
}
在loop()函数内部,我们从传感器读取温度值并将其转换为String以显示在OLED显示屏中。我们还在串行监视器上打印了该值以进行调试。我们还增加了一个名为runner的变量,每当温度传感器的值成功更新时,它就会在屏幕上产生一个小动画,这将帮助我们知道读数是否因某种原因而被卡住。
if (therm.read()) // On success, read() will return 1, on fail 0.
{
temperature = String(therm.object(), 2);
Serial.print("Object: ");
Serial.print(temperature); Serial.println("C");
display.clearDisplay();
runner++;
delay(5);
}
测试Arduino温度枪
一旦Arduino代码准备就绪,我们可以使用外部TTL编程器或FTDI板将其上传到我们的硬件,因为pro mini没有板载编程器。然后只需按下按钮即可触发温度枪,您将注意到激光束落在物体上,并且OLED屏幕上显示的物体温度如下图所示。在这里,我用它来测量激光束指向的元件温度。
我们还在烙铁、3D打印机喷嘴、冰块等上测试了温度枪,并且观察到令人满意的结果。希望您喜欢这个项目,并在制作项目时学到了一些有用的东西,如果您有任何疑问请在本帖下面进行回复。