Měření teploty je jeden z nejběžnějších úkolů. Teplota se měří pomocí tzv. termistorů. Jedná se o rezistory, které v závislosti na teplotě svůj odpor mění podle přesně definované charakteristiky. Termistory mohou mít buď pozitivní, nebo negativní teplotní koeficient. Pozitivní teplotní koeficient (PTC) znamená, že se zvyšující se teplotou odpor termistoru roste. U negativního teplotního koeficientu (NTC) naopak odpor se zvyšující se teplotou klesá.
Závislost odporu na teplotě není ani u jednoho typu lineární (přímková), ale v případě PTC je výrazně lineárnější než u NTC. Naopak NTC mají mnohem větší citlivost.
Jednotlivé varianty jak u PTC tak u NTC termistorů se rozlišují podle odporu při teplotě 25°C. Velmi oblíbeným PTC termistorem je platinová PT100 s odporem 100Ω při 25°C. U NTC jsou nejčastější hodnoty odporu 10kΩ a 100kΩ při 25°C.
Výpočet
Zapojení
Termistor připojíme jako spodní část napěťového děliče, zatím co do horní části vložíme odpor o stejné hodnotě jako referenční odpor u termistoru. Rezistor můžeme zapojit jak na 5V tak i na 3.3V. Konkrétní hodnota napětí nemá na měření podstatný vliv, avšak pouze v případě, že je tato hodnota současně referenčním napětím A/D převodníku. Při volbě 3.3V bude přes NTC protékat menší proud a samovolné ohřívání termistoru měřícím proudem bude tak nižší.
int termPin = 0; // Analogový pin, ke kterému je termistor připojen int termNom = 10000; // Referenční odpor termistoru int refTep = 25; // Teplota pro referenční odpor int beta = 3977; // Beta faktor int rezistor = 10000; // hodnota odporu v sérii void setup(void) { Serial.begin(9600); //použití externího pinu AREF jako referenčního napětí pro A/D převodník analogReference(EXTERNAL); } void loop(void) { float napeti; //změření napětí na termistoru napeti = analogRead(termPin); // Konverze změřené hodnoty na odpor termistoru napeti = 1023 / napeti - 1; napeti = rezistor / napeti; //Výpočet teploty podle vztahu pro beta faktor float teplota; teplota = napeti / termNom; // (R/Ro) teplota = log(teplota); // ln(R/Ro) teplota /= beta; // 1/B * ln(R/Ro) teplota += 1.0 / (refTep + 273.15); // + (1/To) teplota = 1.0 / teplota; // Převrácená hodnota teplota -= 273.15; // Převod z Kelvinů na stupně Celsia Serial.print("Teplota je: "); Serial.print(teplota); Serial.println(" *C"); delay(1000); }