Měření teploty s termistorem

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);
}

Další podobné články

Robotic Arm

Robotická ruka je mechanické zařízení navržené k imitaci lidské ruky a jejích pohybů. Běžně se používá v průmyslových prostředích, zdravotnictví, výzkumu a brzy i v domácnostech.

TABLET A PZEM004T_100A AC

Měření více parametrů současně v různých zařízeních při odběru v síti 230VAC pomocí modulu PZEM-004T-80 – 230V AC – 100A AC a ovládání pomocí Arduino Nano, se zobrazováním hodnot na tabletu nebo chytrém telefonu.