Termistorový teploměr s Arduinem

Úkol: Sestavte digitální termistorový teploměr na základě Arduino.

Pomůcky: Arduino UNO, nepájivé pole, rezistor 10 kΩ, fotorezistor 10 kΩ, termistor NTC 10 kΩ, spojovací vodiče, USB kabel pro spojení s počítačem

Teoretický úvod: Dříve než se pustíme do měření teploty pomocí termistoru, pojďme se podívat, jakým způsobem pracovat s Arduinem. Co to vlastně je?

Arduino je otevřená elektronická platforma, kterou si můžete takřka libovolně programovat a sestavit z ní mnoho elektronických obvodů. Jde o jednoduchou elektronickou desku (hardware) a vývojové prostředí (Arduino IDE), ve kterém píšete svůj software.

Podobných platforem existuje v současnosti již velké množství, komunita kolem Arduina je však dostatečně velká a dá se tu nalézt množství inspiračních projektů a případné pomoci.

Pojďme stručně popsat desku Arduina: obsahuje procesor, několik analogových vstupů, několik digitálních pinů, které můžeme použít jako vstupy či výstupy. Neobejdeme se bez napěťových výstupů, USB propojení s počítačem, přes které Arduino také napájíme, nebo konektoru pro samostatné napájení či resetovacího tlačítka.

9.72 – Arduino – základní deska
Zdroj

Detekce osvětlení

Sestavme náš první projekt, na kterém si ukážeme, jak Arduino funguje. Podívejme se, co Arduinem naměříme na fotorezistoru zapojeném sériově s rezistorem o stejné nominální hodnotě (např. 10 kΩ). Zapojte obvod podle následujícího schématu 9.73a.

Do počítače nahrajte tento arduinovský program:


void
setup(void) {
    // otevření sériového portu pro zobrazení měřené hodnoty
    Serial.begin(9600);
}

// opakovací smyčka programu
void
loop(void) {
    float mereni;
    float napeti;               // definice měřené veličiny
    mereni = analogRead(A0);    // odečet měřené veličiny
    napeti = mereni*3.3/1023;   // výpočet měřeného napětí

    // zobrazení měřené veličiny
    Serial.print("Načtená hodnota je: ");
    Serial.println(mereni);

    // zobrazení měřeného napětí
    Serial.print("Odpovídající hodnota napětí je: ");
    Serial.println(napeti);

    // zpomalení měřeného cyklu o 1000 ms
    delay(1000);
}

Jak to funguje?

Na analogový vstup Arduina A0 přivedeme napětí na fotorezistoru, které je následně převedeno na digitální hodnotu mezi 0 a 1023, která tomuto napětí odpovídá. V našem zapojení přivádíme na oba sériově zapojené prvky napětí o velikosti 3,3 V (jedno z výstupních napětí Arduina). Tomuto napětí odpovídá hodnota 1023 zobrazená v sériovém monitoru, jestliže vstup A0 připojíme na jeden konec zapojení. Jestliže vstup A0 připojíme na druhý konec sériového zapojení, monitor ukáže hodnotu 0. Napětí o velikosti 3,3 V je tedy „rozloženo“ na 1024 digitalizovaných hodnot. Každému číslu v této sérii tedy odpovídá změna napětí o velikosti 0,032 V. A toto napětí může nést informaci o další veličině, kterou chceme změřit, například osvětlení (pomocí fotorezistoru) nebo teplotě (s termistorem).

Při změně osvětlení zapojeného fotorezistoru se bude zobrazovaná hodnota měnit v rozmezí 0 až 1023, ale spíše trochu méně. Dosáhnout extrémních hodnot je poměrně složité.

Jaké jsou hodnoty napětí na fotorezistoru? Ty si musíme vypočítat podle zákona o dělení napětí na dvou sériově zapojených součástkách:

\[ U_\mathrm{fotorezistor} = \frac{\mathrm{vstup}(A_0)}{1023}\cdot3{,}3\ \mathrm{V} \]

Vyzkoušejte.

Měření teploty

V praxi se teplota měří pomocí tzv. termistorů. Jsou to součástky, které v závislosti na teplotě mění svůj odpor. Rozlišujeme dva druhy termistorů – PTC a NTC. U prvního z nich se odpor zvyšuje s rostoucí teplotou, u druhého naopak snižuje. A právě ten použijeme v našem experimentu. Termistory jsou charakterizovány svým odporem při 25 °C. Použitý termistor má nominální odpor \(R_{25}=10\ \mathrm{k\Omega}\).

Závislost odporu na teplotě sice není lineární (přímková), ale můžeme ji poměrně jednoduše popsat pomocí funkce

\[ \frac{1}{T} = \frac{1}{T_0} + \frac{1}{B}\ln\left(\frac{R}{R_0}\right) \]

V tomto vztahu \(T_0\) značí nominální teplotu v kelvinech, \(R_0\) nominální odpor v ohmech. \(R\) je pak naměřená hodnota odporu termistoru při teplotě \(T\) v kelvinech. Koeficient \(B\) je tzv. beta faktor a nalezneme ho v technickém listu použitého termistoru.

Principem zapojení je dělič napětí, kde máme v sérii termistor a referenční rezistor. Na vnější svorky přivedeme z Arduina napětí 3,3 V, na analogovém vstupu A0 snímáme napětí na termistoru.

V programu Arduino IDE napíšeme tento program:


int termPin = 0;           // určení vstupního analogového pinu
int termNom = 10000;       // nominální hodnota odporu termistoru
int refTep = 25;           // referenční hodnota teploty (25 °C)
int beta = 3977;           // beta faktor charakterizující termistor
int rezistor = 10000;      // nominální hodnota odporu rezistoru

void
setup(void) {
    Serial.begin(9600);
    analogReference(EXTERNAL);
}

void
loop(void) {

// přečteme analogovou hodnotu na termistoru
    float odecet;
    odecet = analogRead(termPin);

// vypočteme hodnotu odporu termistoru
    float odpor;
    odpor = 1023 / odecet - 1;
    odpor = rezistor / odpor;

    // výpočet teploty v dle převodního vztahu z odporu termistoru
    float teplota;
    teplota = odpor/termNom;
    teplota = log(teplota);
    teplota = teplota / beta;
    teplota = teplota + 1.0/(refTep + 273.15);
    teplota = 1.0/teplota;
    teplota = teplota - 273.15;

    // zobrazíme teplotu na monitoru
    Serial.print("Teplota je: ");
    Serial.print(teplota);
    Serial.println(" °C");
    Serial.println();
    delay(1000);
}

Jak to funguje?

Tento program zjistí napětí na termistoru, převede je na odpovídající elektrický odpor a podle daného vztahu vypočítá teplotu v kelvinech, kterou následně převede na stupně Celsia. Hodnotu teploty si necháme zobrazit na monitoru počítače. Teplotu měříme v cyklu trvajícím 1 s.

Otázky:

  1. Jaký první experiment s vaším novým teploměrem provedete?
  2. Proč jsme zvolili interval měření celou 1 s a ne třeba 10 ms?
  3. Můžeme pro měření použít odpor o nominální hodnotě například 2 kΩ? Jak bude měření ovlivněno?

Inspirační zdroje:

Tlačítko pro návrat zpět nahoru na stránce (back to top)