你有沒有想過恒溫器,汽車發(fā)動機,過濾器和3D打印機加熱床等設(shè)備如何測量溫度?這個項目向您展示如何!
在許多項目中,了解溫度是一個有用的數(shù)據(jù)。了解溫度有助于我們調(diào)節(jié)室溫,防止發(fā)動機過熱,確保3D打印機床足夠熱,使ABS等材料粘在其表面,并防止食物燃燒。
在這個項目中,我們專注于一種可以測量溫度的傳感器:熱敏電阻。
與其他類型的電阻器相比,熱敏電阻具有更高的溫度靈敏度。
我們可以測量和處理熱敏電阻的讀數(shù),然后將它們轉(zhuǎn)換為更常見的溫度單位。
下面是我們將要使用的熱敏電阻的圖片:
珠子熱敏電阻。
項目背后的理論
通常,對于使用電阻器的應(yīng)用,您希望避免在溫度變化時電阻發(fā)生變化。雖然這在現(xiàn)實生活中并不是完全可能的,但你可以做到這一點,只有很小的電阻變化對應(yīng)于大的溫度變化。如果你不能這樣做,電阻器真的會在電路中造成嚴(yán)重破壞。例如,隨著環(huán)境溫度的變化,LED會變亮和變暗。
那么,如果你真的希望LED的亮度是溫度的函數(shù),你會怎么做?那么,你需要一個熱敏電阻。熱敏電阻的電阻變化很大,溫度變化很小。為了說明這個概念,請參見下面的圖1,其中顯示了熱敏電阻的典型曲線:
根據(jù)您購買的熱敏電阻,可以根據(jù)不同的范圍輕松定制熱敏電阻。如您所見,隨著溫度升高,電阻降低。這是負溫度系數(shù)電阻器(NTC)的主要特性。
熱敏電阻也可用作正溫度系數(shù)(PTC)。PTC的工作方式是隨著溫度的升高,電阻增加。但請注意,PTC熱敏電阻具有某種臨界點,并且在某些溫度下會極大地影響電阻,這使得PTC熱敏電阻更難以與之接口。因此,大多數(shù)低成本溫度測量使用NTC熱敏電阻。
也就是說,假設(shè)我們將在本文的其余部分引用NTC型熱敏電阻。
找到曲線擬合公式:四種方法
現(xiàn)在我們已經(jīng)介紹了熱敏電阻的一般行為,下一個問題可能就是我們?nèi)绾斡肁rduino測量溫度。上圖中的曲線是非線性的,因此似乎不可能使用簡單的線性方程。(實際上,我們可以計算出一個等式。本文稍后將詳細介紹。)
那么該怎么辦?
在我們繼續(xù)之前,嘗試考慮如何使用Arduino或甚至只是沒有微處理器組件的電路。
有幾種方法可以解決這個問題。下面討論四種選擇。這遠不是每種技術(shù)的詳盡列表,但它涵蓋了一些流行的方法。
方法一
一些制造商提供了整個圖表,其繪制了溫度和電阻的典型值的特定整數(shù)范圍。在Vishay公司編寫的數(shù)據(jù)表中可以看到一個這樣的熱敏電阻。
但同樣,問題出現(xiàn)在你如何在Arduino中做到這一點。所有這些值都需要硬編碼到一個巨大的查找表或很長的“switch ... case”或“if ... then”控制結(jié)構(gòu)中。
如果制造商不提供查找表,則需要由您測量每個點以生成數(shù)據(jù)。聽起來像編程頭痛,對吧?但是,這種方法確實有它的位置。例如,如果您手邊的項目只檢查幾個點或保持在一個小范圍內(nèi),這可能是要走的路。例如,如果您只想測量值何時落在選定的溫度范圍內(nèi),并且LED指示燈亮起以指示每次發(fā)生的時間。
但是,在這個項目中,我們想要測量一個接近連續(xù)的范圍并將其發(fā)送到串行監(jiān)視器,這對我們來說這個方法是錯誤的。
方法二
另一種方法是通過連接一個與熱敏電阻并聯(lián)的電阻來增加外部電路,從而“線性化”熱敏電阻的響應(yīng)。有些IC已經(jīng)為你準(zhǔn)備好了。
選擇正確的值并確定如何選擇和線性化區(qū)域本身就是一篇文章。如果您的微處理器缺少浮點精度(例如PICAXE),方法二非常適合,因為它簡化了溫度范圍到線性響應(yīng),并且還使得設(shè)計沒有微處理器的電路變得更加容易。
對于這個項目,我們有一個微處理器,并將使用整個范圍,所以這種方法再次對我們不起作用。
方法三
如果你是一個貪婪的懲罰,你可以從數(shù)據(jù)表中獲取表格數(shù)據(jù),或者更加耗時,生成你自己開發(fā)的數(shù)據(jù),通過獨立的測量,在Excel等程序中重新創(chuàng)建繪圖。從那里,您可以使用曲線擬合功能生成曲線公式。這為您的程序提供了一個方便的公式,但需要時間和數(shù)據(jù)的預(yù)處理。
我們寧愿不被困在分析所有這些數(shù)據(jù),盡管方法三是合法的方法。此外,每個熱敏電阻都有點不同(如果公差水平非常低,則不是一個大問題)。
方法四
對于像熱敏電阻這樣的器件,存在一般的曲線擬合公式,稱為Steinhart-Hart方程。有不同的版本,其中使用了平方和立方項。這是等式的一個版本:
1 / T = A + Bln(R)+ C(ln(R))3
其中R是熱敏電阻在溫度T下的電阻(以開爾文為單位)。
這種通用曲線擬合方程可以容納所有NTC型電阻器,因為電阻和溫度關(guān)系的近似值足以滿足大多數(shù)應(yīng)用。
注意,該等式需要三個常數(shù):A,B和C.這些常數(shù)對于每個熱敏電阻是不同的,必須給出或計算。有三個未知數(shù),您需要在一定溫度下進行三次電阻測量。從那里,這些測量產(chǎn)生三個方程來解決這些常數(shù)。
即使你是一個代數(shù)巫師,這也是很多工作。
幸運的是,有一個更簡單的方程不太準(zhǔn)確但只有一個常數(shù)。常數(shù)用β表示,因此該方程稱為β方程。
1 / T = 1 / T O +(1 /β)⋅ln(R / R O)
其中R O指的是參考溫度T O處的電阻(例如,室溫下的電阻)。
β通常在數(shù)據(jù)表中提供。如果不是,您只需要一次測量(一個等式)來計算它。
所以我們找到了它。這是我們將用于熱敏電阻接口的等式和方法,因為編碼非常簡單,同時也是我們尚未發(fā)現(xiàn)的最簡單的方法,不需要線性化熱敏電阻的響應(yīng)。
測量電阻
由于我們已經(jīng)找到了正確的方法,我們現(xiàn)在需要弄清楚如何在我們將其插入β方程之前測量電阻。這可以使用分壓器完成:
以上是我們熱敏電阻的接口電路。每次熱敏電阻檢測到溫度變化時,它都會反映在輸出電壓中。
通常,我們使用分壓器,其公式如下:
V 出 = V 小號 ⋅(R 平衡 / R 熱敏電阻 + R 平衡)
但是,我們不希望V out作為答案 - 我們想要R 熱敏電阻。我們將解決這個問題:
R 熱敏電阻 = R 平衡 ⋅(V s / V out - 1)
我們即將完善,但我們需要測量電壓輸出和電源電壓。這就是Arduino內(nèi)置ADC的用武之地。
我們可以將電壓表示為一定范圍內(nèi)的數(shù)字數(shù)字。所以,我們的方程結(jié)果如下:
R 熱敏電阻 = R 平衡 ⋅(D max / D 測量 - 1)
這在數(shù)學(xué)上是成功的,因為無論我們?nèi)绾伪硎倦妷海ㄒ苑鼗驍?shù)字為單位),這些單元抵消了分數(shù)中的頂部和底部,留下無量綱數(shù)。在那之后,乘以一個阻力,以歐姆為單位得出答案。
我們的D max將是1023,因為它是我們的10位ADC產(chǎn)生的最高數(shù)字。測量的 D 將被設(shè)置為我們測量的ADC值,范圍從低至零到高達1023。
現(xiàn)在,讓我們建立!
布線
我們將在我們的分壓器中使用一個10K歐姆的熱敏電阻,以及一個10k歐姆的電阻用于R 平衡。沒有給出β,因此需要計算。
您將在下面找到完整的原理圖。
以下是設(shè)置最終應(yīng)如下所示的內(nèi)容: