你有沒有了解過溫控器,3D打印機(jī)加熱床,汽車發(fā)動(dòng)機(jī)或烤箱等設(shè)備如何測量溫度?看完這篇文章可能你就有方法了。
了解項(xiàng)目中的溫度可以獲得非常有用的數(shù)據(jù)。了解溫度有助于調(diào)節(jié)室內(nèi)溫度,確保舒適的環(huán)境,確保3D打印機(jī)床足夠熱,使ABS等材料粘在其表面,防止發(fā)動(dòng)機(jī)過熱,并防止食物被燒毀。
對(duì)于本文,我們只關(guān)注一種可以測量溫度的傳感器。該傳感器稱為熱敏電阻。
熱敏電阻的耐溫性比其他類型的電阻更敏感。
我們將使用Arduino測量和處理熱敏電阻的讀數(shù),然后將其轉(zhuǎn)換為人性化的常見溫度單位格式。
下面是我們將要使用的熱敏電阻的圖片:
硬件
軟件
在電阻器的典型應(yīng)用中,您不希望電阻隨溫度變化。這在現(xiàn)實(shí)生活中實(shí)際上是不可能的,但是可以通過大的溫度變化確保電阻的微小變化。如果不是這種情況,電阻會(huì)使電路中發(fā)生奇怪的事情,例如隨著環(huán)境溫度變化而變得更亮和更暗的LED。
但是,如果你確實(shí)希望LED的亮度是溫度的函數(shù)呢?這就是熱敏電阻的用武之地。正如您可能已經(jīng)猜到的那樣,熱敏電阻的電阻變化很大,溫度變化很小。為了說明這個(gè)概念,請(qǐng)查看熱敏電阻的典型曲線:
顯示單位但不是實(shí)際值,因?yàn)闊崦綦娮杩筛鶕?jù)您購買的不同而定制到不同的范圍。如您所見,溫度越來越高,阻力越來越小。這是負(fù)溫度系數(shù)電阻器(簡稱NTC)的特性。
還有一些熱敏電阻具有正溫度系數(shù)(簡稱PTC),這意味著隨著溫度的升高,電阻會(huì)增加。但是,PTC熱敏電阻具有一種臨界點(diǎn),并且在某些溫度下會(huì)大大改變電阻。這使得PTC熱敏電阻更難以與之接口。因此,對(duì)于大多數(shù)低成本溫度測量,NTC熱敏電阻是首選。
對(duì)于本文的其余部分,您可以假設(shè)我們將指的是NTC型熱敏電阻。
現(xiàn)在我們更好地了解熱敏電阻的一般行為,您可能會(huì)開始想知道我們?nèi)绾问褂肁rduino來測量溫度。上圖中的曲線是非線性的,因此,似乎不可能使用簡單的線性方程。(實(shí)際上,我們可以計(jì)算出一個(gè)等式,但稍后會(huì)更多。)
那么該怎么辦?
在繼續(xù)閱讀之前,請(qǐng)考慮如何在Arduino或甚至沒有微處理器組件的電路中執(zhí)行此操作。
您可以通過以下幾種方法解決此問題。這絕不是每種技術(shù)的清單,但它會(huì)向您展示一些流行的方法。
一些制造商足夠好,可以為您提供映射某個(gè)整數(shù)范圍的溫度和電阻(典型值)的整個(gè)圖表。Vishay公司的數(shù)據(jù)表中可以找到一個(gè)這樣的熱敏電阻。
但是你想想你將如何在Arduino中做到這一點(diǎn)。您需要將所有這些值硬編碼到巨大的查找表或非常長的“switch ... case”或“if ... then”控制結(jié)構(gòu)中的代碼中。
如果制造商不夠好以提供查找表,則需要自己測量每個(gè)點(diǎn)以生成數(shù)據(jù)。對(duì)于一個(gè)程序員來說,這是一個(gè)非常糟糕的一天。但這種方法并不全是壞事而且有其地位。如果手邊的項(xiàng)目只檢查幾個(gè)點(diǎn)甚至是小范圍,這可能是首選的方法。例如,一種情況是,如果您只想測量值是否在選定的溫度范圍內(nèi),并設(shè)置LED指示燈亮起以指示這種情況。
但對(duì)于我們的項(xiàng)目,我們希望測量接近連續(xù)的范圍并將其發(fā)送到串行監(jiān)視器,因此不會(huì)使用此方法。
您可以嘗試通過添加外部電路來“線性化”熱敏電阻的響應(yīng)。
一種流行的方法是將一個(gè)電阻與熱敏電阻并聯(lián)。有些IC可以為您提供此功能。
確定如何選擇和線性化區(qū)域以及選擇正確的值是一篇文章本身。如果微處理器沒有浮點(diǎn)精度(如PICAXE),這種方法很好,因?yàn)樗喕藴囟确秶骄€性響應(yīng)。它還使得設(shè)計(jì)沒有微處理器的電路變得更容易。
但是我們在本文中有一個(gè)微處理器,并希望利用整個(gè)范圍。
您可以從數(shù)據(jù)表中獲取表格數(shù)據(jù),或者(如果您喜歡自己懲罰)生成您使用獨(dú)立測量所做的數(shù)據(jù),并在Excel中重新創(chuàng)建繪圖。然后,您可以使用曲線擬合功能為曲線創(chuàng)建公式。這不是一個(gè)壞主意,并且所有執(zhí)行的工作都會(huì)為您的程序提供一個(gè)很好的公式 - 但它確實(shí)需要一些時(shí)間和數(shù)據(jù)的預(yù)處理。
雖然這是一種合法的方法,但我們不希望被困在分析所有這些數(shù)據(jù)。此外,每個(gè)熱敏電阻都略有不同(當(dāng)然,如果公差非常低,這不是真正的問題)。
事實(shí)證明,有一種通用曲線擬合公式適用于熱敏電阻等器件。它被稱為Steinhart-Hart方程。它的一個(gè)版本如下所示(其他版本使用平方術(shù)語和立方術(shù)語):
其中R是熱敏電阻在溫度T(以開爾文為單位)的電阻。
這是適用于所有NTC型電阻器的通用曲線擬合方程。對(duì)于大多數(shù)應(yīng)用來說,溫度和電阻之間的近似值“足夠好”。
注意,等式需要常數(shù)A,B和C.這些對(duì)于每個(gè)熱敏電阻是不同的,需要給出或計(jì)算。由于存在三個(gè)未知數(shù),因此在一定溫度下需要進(jìn)行三次電阻測量,然后可以使用這三種方程來求解這些常數(shù)。
即使對(duì)于我們這些代數(shù)向?qū)У娜藖碚f,這仍然是太多的工作。
相反,有一個(gè)更簡單的方程式不太準(zhǔn)確但只有一個(gè)常數(shù)。常數(shù)用β表示,因此該方程稱為β方程。
其中R o是參考溫度T o下的電阻(例如,室溫下的電阻)。β通常在數(shù)據(jù)表中給出 - 如果沒有,您只需要一次測量(一個(gè)等式)來計(jì)算它。這是我將用于熱敏電阻接口的公式,因?yàn)樗浅:唵?,并且是我遇到的最簡單的方法,無需線性化熱敏電阻的響應(yīng)。
現(xiàn)在我們已經(jīng)完成了我們的方法,我們需要弄清楚如何用Arduino實(shí)際測量電阻,然后才能將這些信息輸入β方程。我們可以使用分壓器來做到這一點(diǎn):