Close

TinyLab: Teploměr

Arduino TinyLab - teploměr

V posledním dílu seriálu o desce TinyLab jsme si představili, jak se dá používat fotorezistor. Dnes se podíváme, jak číst teplotu z dostupného teploměru.

Měření teploty

K elektronickému měření teploty můžeme použít různé typy součástek. Tou asi nejjednodušší je termistor. Termistor je součástka, která se změnou teploty mění svůj vnitřní odpor (podobně jako fotorezistor mění vnitřní odpor při změně intenzity osvětlení). Nevýhodou termistorů je jejich nelinearita. Vysvětleme si ji na příkladu:

Když při

  • 0°C naměříme odpor 1000Ω
  • při 1°C naměříme 2000Ω,

jaký odpor byste čekali při 2°C? 3000Ω? Právě že ne! Termistory mají nelineární průběh, což znesnadňuje přepočet jejich odporu na teplotu.

Z tohoto důvodu vznikly teploměry s lineárním průběhem, u nichž je přepočet na teplotu daleko jednodušší (vystačíme si s operacemi plus, mínus, krát a děleno).

Elektronické teploměry můžeme dále dělit na analogové a digitální. Z analogových teploměrů získáváme analogovou hodnotu, kterou jednoduše přepočteme na stupně. Digitální teploměry nám často posílají už hodnotu vyjádřenou ve stupních. Na desce TinyLab nalezneme analogový teploměr LM35.

Teploměr LM35

LM35 je na TinyLabu připojený na pin A3 Arduina. Fyzicky teploměr nalezneme v levém dolním rohu.

Jelikož je jeho výstupem analogová hodnota, musíme ji měřit pomocí funkce analogRead, podobně, jako jsme to dělali ve článku o potenciometru. V dokumentaci k teploměru uvidíme následující:

Teploměr LM35

Teploměr LM35

Znamená to tedy, že teploměr musíme napájet napětím mezi 4 a 20V (což Arduino s 5V splňuje). Dále také vyčteme, že na výstupu měříme napětí, které se se změnou teploty o jeden stupeň Celsia změní o deset milivoltů (1V = 1000mV). Pro 0°C naměříme 0V, 1°C 10mV, atd.

Arduino a LM35

Jak měřit napětí v Arduinu? Pomocí funkce analogRead!

Funkce analogRead nám vrací hodnoty mezi 0 a 1023. Tato hodnota je přímo úměrná napětí, které na měřený pin přivedeme. Toto napětí se může pohybovat v rozsahu od 0V do napájecího napětí – v našem případě 5V. Když si spojíme tyto dvě informace (rozsah 0-1023, napětí 0-5V), můžeme vyvodit následujícími kroky vzorec pro výpočet teploty ve °C.

Začneme tím, že si rozsah 0-1024 převedeme na rozsah 0 až 1. (Zápis 1024.0 je použit proto, aby nedošlo k zaokrouhlení výsledku na celá čísla – zde potřebujeme desetinná)

analogRead(pin) / 1024.0

Dále tento výsledek přepočteme na milivolty v rozsahu 0-5000mV (5V = 5000mV).

analogRead(pin) / 1024.0 * 5000

Z dokumentace LM35 víme, že 10mV odpovídá 1°C, tedy výslednou teplotu ve stupních celsia získáme následovně:

analogRead(pin) / 1024.0 * 5000 / 10

Výsledný vzoreček může po zkrácení vypadat například takto:

int celsius = analogRead(A3)/ 1024.0 * 500;

Měříme teplotu

S těmito vědomostmi už se můžeme pustit do programování. Začneme tím, že si vypíšeme změřenou teplotu po sériové lince. Nezapomeňte si zapnout přepínač u analogového pinu A3.

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

void loop() {
  int celsius = analogRead(A3) / 1024.0 * 500;

  Serial.println(celsius);

  delay(1000);
}

Hlídač teploty

V druhém příkladu si ukážeme, jak hlídat teplotu a v případě jejího překročení spustit bzučák.

int hranice = 26;

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

void loop() {
  int celsius = analogRead(A3) / 1024.0 * 500;
  Serial.println(celsius);

  if(celsius >= hranice){
    tone(A1, 440, 500);
    delay(500);
    tone(A1, 600, 500);
    delay(500);  
  }
}

Napadá vás nějaké další zajímavé použití teploměru? Třeba pro jednoduchou meteostanici? Nebo pro spouštění větráku při překročení určité teploty? Podělte se s námi v komentářích.

Zbyšek Voda

2 Comments on “TinyLab: Teploměr

zdeko
22.1.2019 at 9:56

Měl bych dotaz: bylo by možné tímto obvodem nějak měřit i záporné teploty? Například nulovou hodnotu teploty dát výš než 0V. Děkuji.

Zbyšek Voda
22.1.2019 at 11:08

Dobrý den,
na desce TinyLab je teploměr LM35. Ten má udávaný rozsah -55 až 150 °C.
Záleží ale na tom, jak se zapojí (viz http://www.ti.com/lit/ds/symlink/lm35.pdf).
Bohužel nejsem schopen dohledat, jak je teploměr zapojen na desce a nemám teď TinyLab po ruce, abych to vyzkoušel :/

Pokud ale hledáte nějaký teploměr k Arduino, který změří i záporné teploty, tam mám dobré zkušenosti s teploměrem DS18B20 (https://www.hwkitchen.cz/teplotni-cidlo-ds18b20-vodotesne/). Dělá se ve vodotěsné i obyčejné úpravě. Ten má rozsah -55 až 125 °C.

Napsat komentář