在調(diào)試電子電路或測(cè)試新硬件設(shè)計(jì)時(shí)半等,我常會(huì)通過(guò)觸摸來(lái)檢查電路板上的器件是否異常發(fā)熱。如果某些東西搞砸了(通常是在第一次嘗試中),這些器件可能會(huì)達(dá)到80°C或更高溫度翘县,不僅會(huì)燒毀器件,還會(huì)燙傷手指谴分。我都不記得被燙傷了多少次了锈麸,現(xiàn)在我決定用Arduino和紅外線溫度傳感器來(lái)制作屬于自己的溫度槍。該溫度槍將使用一顆名為MLX90614的非接觸式溫度傳感器制作牺蹄;因此忘伞,它不僅可以用于測(cè)量元件溫度,還可以用于測(cè)量體溫、表面溫度氓奈、熱通風(fēng)等等翘魄。當(dāng)然,這些溫度測(cè)溫儀在市場(chǎng)上很容易從Fluke舀奶、Flir等著名制造商那里買到暑竟。但是它們并不輕巧放在口袋里,最重要的是育勺,自己制作屬于自己的小工具才會(huì)更加有趣但荤。讓我們開始......
所需的材料
● Arduino Pro Mini
● MLX90614紅外溫度傳感器
● OLED顯示屏 - SSD1306
● 激光二極管
● 9V電池
● 按鈕
● 電池夾
● 連接導(dǎo)線
MLX90614紅外測(cè)溫儀
在繼續(xù)學(xué)習(xí)本文之前,了解MLX90614傳感器的工作原理非常重要涧至。市場(chǎng)上有許多溫度傳感器腹躁,經(jīng)常使用的是DHT11傳感器和LM35,用于需要測(cè)量大氣濕度或溫度的許多應(yīng)用化借。
但是在這里潜慎,對(duì)于溫度槍,我們需要一種能夠感知特定物體(不是環(huán)境)溫度的傳感器蓖康,并且不會(huì)直接與物體接觸铐炫。為此,我們使用不太常接觸到的溫度傳感器蒜焊,利用激光或IR紅外來(lái)計(jì)算物體的溫度倒信。 MLX90614就是這樣一種傳感器,它使用紅外能量來(lái)檢測(cè)物體的溫度泳梆。
MLX90614傳感器由邁來(lái)芯微電子集成系統(tǒng)制造鳖悠,它內(nèi)置兩個(gè)器件,一個(gè)是紅外熱電堆檢測(cè)器(傳感單元)优妙,另一個(gè)是信號(hào)調(diào)理DSP器件(計(jì)算單元)乘综。它基于Stefan-Boltzmann定律,該定律指出所有物體都發(fā)射紅外能量套硼,并且該能量的強(qiáng)度將與該物體的溫度成正比卡辰。傳感器中的傳感單元測(cè)量目標(biāo)物體發(fā)射的IR能量,計(jì)算單元使用17位內(nèi)置ADC將其轉(zhuǎn)換為溫度值邪意,并通過(guò)I2C通信協(xié)議輸出數(shù)據(jù)九妈。傳感器測(cè)量物體溫度和環(huán)境溫度,以校準(zhǔn)物體溫度值雾鬼。 MLX90614傳感器的功能如下萌朱,有關(guān)詳細(xì)信息,請(qǐng)參閱MLX90614數(shù)據(jù)手冊(cè)策菜。
MLX90614主要特點(diǎn):
● 工作電壓:3.6V至5V
● 物體溫度范圍:-70°C至382.2°C
● 環(huán)境溫度范圍:-40°C至125°C
● 分辨率/準(zhǔn)確度:0.02°C
傳感器和物體之間的距離應(yīng)該是多少晶疼?
數(shù)據(jù)手冊(cè)沒(méi)有直接回答的一個(gè)問(wèn)題是傳感器和物體之間的測(cè)量距離酒贬。該距離的值由術(shù)語(yǔ)視場(chǎng)(FOV)給出,對(duì)于我們的傳感器冒晰,視場(chǎng)大約為80°同衣。
如上所示,您可以將感應(yīng)范圍視為傳感器點(diǎn)的圓錐形狀壶运。因此耐齐,當(dāng)我們遠(yuǎn)離測(cè)量對(duì)象時(shí),感應(yīng)區(qū)域增加了兩倍蒋情。每1cm的含義我們遠(yuǎn)離物體移動(dòng)感應(yīng)區(qū)域增長(zhǎng)2cm埠况。在我們的溫度槍中,我們?cè)趥鞲衅黜敳糠胖昧艘粋€(gè)激光二極管棵癣,以了解傳感器當(dāng)前指向的傳感區(qū)域辕翰。我發(fā)現(xiàn),如果槍指向離物體2厘米處狈谊,并且隨著我們離開時(shí)精度下降喜命,則值是可靠的。
電路原理圖
紅外測(cè)溫儀的電路圖非常簡(jiǎn)單河劝。完整的電路如下所示壁榕,它是使用Fritzing軟件創(chuàng)建的。
由于Fritzing軟件不支持MLX90614傳感器的部件赎瞎,我們使用了一個(gè)注釋來(lái)提及其連接如上所示牌里,我們也使用紅色LED代替激光二極管。整個(gè)電路由9V電池通過(guò)按鈕供電务甥。按下按鈕時(shí)牡辽,9V電池連接到Arduino的RAW引腳,然后使用板載穩(wěn)壓器將其調(diào)節(jié)至5V敞临。然后态辛,該5V用于為OLED模塊、傳感器和激光二極管供電挺尿。
設(shè)計(jì)溫度槍套管
為了使項(xiàng)目更有趣和實(shí)用奏黑,我們?yōu)闇囟葮屧O(shè)計(jì)3D模型并打印外殼。設(shè)計(jì)包括兩個(gè)部分票髓,一個(gè)是作為槍體的頂部攀涵,包括Arduino控制器铣耘、OLED洽沟、傳感器和激光二極管。另一個(gè)是底部蜗细,用作容納電池和按鈕的槍的手柄裆操。此處的“按鈕”用作觸發(fā)器怒详。該模型如下所示。
設(shè)計(jì)文件可從thingiverse下載踪区;您可以使用3D打印機(jī)下載設(shè)計(jì)并打印一個(gè)昆烁,也可以根據(jù)需要進(jìn)行修改。下載鏈接如下:Thermal Gun 3D模型缎岗。下載文件后静尼,您可以直接開始3D打印設(shè)計(jì),也可以根據(jù)您的要求進(jìn)行一些調(diào)整传泊。
3D打印外殼
然后將模型保存為STL文件鼠渺,并使用Cura將其轉(zhuǎn)換為G代碼。我用Tevo塔蘭圖拉打印機(jī)打印兩個(gè)零件眷细,然后將它們擰在一起拦盹。如果打印機(jī)支持,也可以將這兩個(gè)部件打印為單件溪椎。我的打印的切片設(shè)置如下所示
我花了將近6個(gè)小時(shí)來(lái)打印這兩個(gè)部件普舆,一旦打印出硬件連接,我就可以直接使用7針和4針Relimate連接器(RMC)將導(dǎo)線直接焊接到Arduino引腳校读,分別用于傳感器和OLED顯示器沼侣。然后使用螺釘將OLED安裝在印刷部件中,同時(shí)使用熱膠安裝傳感器和激光二極管地熄。然后华临,電源引腳(Raw、Gnd)通過(guò)導(dǎo)線部分向下連接端考,手柄部分由按鈕和電池組成雅潭。然后通過(guò)按鈕將這些電線連接到電池。組裝完成后却特,溫度槍如下所示
編程Arduino溫度槍
Arduino程序從MLX90614讀取溫度值并將其顯示在OLED顯示屏上扶供。幸運(yùn)的是,由于Adafruit為我們提供了一個(gè)可輕松讀取MLX90614數(shù)據(jù)的庫(kù)裂明,因此該程序非常簡(jiǎn)單椿浓。該庫(kù)可以從下面的鏈接下載:Arduino MLX90614庫(kù)。
該鏈接將庫(kù)作為ZIP文件夾下載闽晦。下載后扳碍,按照Sketch - > Include Library - > Add .ZIP Library命令將其添加到Arduino IDE,然后瀏覽該ZIP文件的位置仙蛉。添加庫(kù)后笋敞,我們可以開始編寫程序,可以在本頁(yè)底部找到該項(xiàng)目的完整程序荠瘪。這里將以小片段進(jìn)行解釋夯巷。
和往常一樣赛惩,我們?cè)诔绦蛑惺紫忍砑铀璧膸?kù)文件。這里的Wire庫(kù)(內(nèi)置)用于使用I2C協(xié)議進(jìn)行通信趁餐,SparkFun ML90614庫(kù)用于與傳感器通信喷兼。 SPI、GFX和SSD1306庫(kù)用于與4線SPI協(xié)議通信到OLED顯示模塊后雷。
#include <Wire.h>
#include <SparkFunMLX90614.h>
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
然后季惯,我們定義了OLED連接的引腳。由于該模塊與SPI配合使用臀突,因此我們使用了Arduino的SPI引腳星瘾。 OLED顯示屏也可以使用I2C協(xié)議,但我們不能在這里使用I2C惧辈,因?yàn)镮2C引腳已經(jīng)被溫度計(jì)傳感器占用琳状。
#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()函數(shù)內(nèi)部,我們初始化用于調(diào)試的串行監(jiān)視器盒齿,并使用之前創(chuàng)建的對(duì)象therm初始化IR溫度傳感器念逞。最常用的溫度單位是??攝氏度(攝氏度),因此我們?cè)O(shè)置了TEMP_C的單位边翁,如果你需要的值是華氏度(F)翎承,你也可以將它改為TEMP_F。最后符匾,我們初始化OLED顯示屏叨咖,然后清除其顯示。此外啊胶,OLED的屏幕旋轉(zhuǎn)180度甸各,以便于在外殼中安裝選項(xiàng)。
void setup()
{
Serial.begin(9600);
therm.begin();
therm.setUnit(TEMP_C);
display.begin(SSD1306_SWITCHCAPVCC);
display.clearDisplay();
display.setRotation(2);
}
在loop()函數(shù)內(nèi)部焰坪,我們從傳感器讀取溫度值并將其轉(zhuǎn)換為String以顯示在OLED顯示屏中趣倾。我們還在串行監(jiān)視器上打印了該值以進(jìn)行調(diào)試。我們還增加了一個(gè)名為runner的變量某饰,每當(dāng)溫度傳感器的值成功更新時(shí)儒恋,它就會(huì)在屏幕上產(chǎn)生一個(gè)小動(dòng)畫,這將幫助我們知道讀數(shù)是否因某種原因而被卡住黔漂。
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);
}
測(cè)試Arduino溫度槍
一旦Arduino代碼準(zhǔn)備就緒诫尽,我們可以使用外部TTL編程器或FTDI板將其上傳到我們的硬件,因?yàn)閜ro mini沒(méi)有板載編程器炬守。然后只需按下按鈕即可觸發(fā)溫度槍牧嫉,您將注意到激光束落在物體上,并且OLED屏幕上顯示的物體溫度如下圖所示劳较。在這里驹止,我用它來(lái)測(cè)量激光束指向的元件溫度。
我們還在烙鐵观蜗、3D打印機(jī)噴嘴臊恋、冰塊等上測(cè)試了溫度槍,并且觀察到令人滿意的結(jié)果墓捻。希望您喜歡這個(gè)項(xiàng)目抖仅,并在制作項(xiàng)目時(shí)學(xué)到了一些有用的東西,如果您有任何疑問(wèn)請(qǐng)?jiān)诒咎旅孢M(jìn)行回復(fù)砖第。