Teplotní senzor (nebo také čidlo) DS18B20 od firmy Maxim (dříve Dallas) je v Arduino komunitě velice oblíbené. Za velmi dobrou cenu umožňuje měřit teplotu v rozsahu -55 až +125 stupňů Celsia, přičemž v rozsahu -10 až +85 stupňů Celsia má garantovanou přesnost ±0,5 °C. Další výhodou je také možnost zakoupit tento teplotní senzor jak v pouzdře TO-92, které se velikostí podobá obyčejným tranzistorům, tak i vodotěsnou variantu, kdy je senzor zataven v nerezové tyčince. Pro komunikaci s Arduino deskou je u čidla DS18B20 využita sběrnice OneWire, která využívá pouze jeden komunikační pin a toto čidlo také podporuje takzvaný parazitní režim, kdy pro spojení čidla s Arduino deskou stačí využít pouze 2 dráty.

Teplotní čidlo DS18B20

Pro úspěšné propojení s Arduino deskou tedy stačí propojit pouze 2 vodiče a jeden odpor o velikosti 4700 ohmů. Propojíme krajní vodiče čidla VCC a GND společně se zemí na Arduinu, prostřední vodič DQ s pinem 4 a odpor spojíme na jednom konci s vodičem DQ a +5V na konci druhém, jak je vidět na schématu níže. Místo pinu 4 Arduino desky můžeme samozřejmě využít jiný volný datový pin, ale je nutné tuto volbu provést i v programu pro Arduino desku. Pokud chceme využít vodotěsné varianty, barvy vodičů odpovídají takto: červená=napájení, černá=zem, žlutá(zelená či bílá)=datový pin DQ.

Schéma zapojení teplotního čidla DS18B20

Pro správné přeložení a nahrání uvedeného ukázkového kódu je nutné stáhnout a naimportovat knihovny DallasTemperature a OneWire, návod jak na to je uveden zde. Ukázkový kód obsahuje na začátku připojení obou zmíněných knihoven a dále konstantu, která obsahuje číslo datového pinu. Poté vytvoříme nejprve instanci oneWireDS pro využití funkce OneWire sběrnice a poté již instanci senzoryDS, která nám umožní jednoduše číst informace o připojených čidlech DS18B20. V podprogramu setup nastavíme komunikaci přes sériovou linku a také zapneme komunikaci knihovny s připojenými čidly. V nekonečné smyčce loop pak vždy načteme pomocí funkce requestTemperatures informace o všech připojených čidlech a následně vytiskneme teplotu připojeného čidla. Pokud máme připojených více čidel na jednom datovém pinu, přepínáme mezi těmito čidly pomocí změny čísla v závorce příkazu getTempCByIndex(0). Pořadí čidel je určeno jejich unikátní adresou, kterou nelze uživatelsky měnit. Rád bych upozornil na to, že každé volání funkce requestTemperatures zabere přibližně 0,7 vteřiny, je tedy vhodné tuto teplotu měřit například každých 10 vteřin, abychom příliš nezpomalovali ostatní funkce nahraného programu.

// Teplotní čidlo DS18B20

// připojení knihoven
#include <OneWire.h>
#include <DallasTemperature.h>

// nastavení čísla vstupního pinu
const int pinCidlaDS = 4;
// vytvoření instance oneWireDS z knihovny OneWire
OneWire oneWireDS(pinCidlaDS);
// vytvoření instance senzoryDS z knihovny DallasTemperature
DallasTemperature senzoryDS(&oneWireDS);

void setup(void) {
  // komunikace přes sériovou linku rychlostí 9600 baud
  Serial.begin(9600);
  // zapnutí komunikace knihovny s teplotním čidlem
  senzoryDS.begin();
}

void loop(void) {
  // načtení informací ze všech připojených čidel na daném pinu
  senzoryDS.requestTemperatures();
  // výpis teploty na sériovou linku, při připojení více čidel
  // na jeden pin můžeme postupně načíst všechny teploty
  // pomocí změny čísla v závorce (0) - pořadí dle unikátní adresy čidel
  Serial.print("Teplota cidla DS18B20: ");
  Serial.print(senzoryDS.getTempCByIndex(0));
  Serial.println(" stupnu Celsia");
  // pauza pro přehlednější výpis
  delay(1000);
}

Po nahrání programu do Arduino desky s připojeným modulem a termočlánkem dostaneme například tento výpis:

Teplota cidla DS18B20: 28.56 stupnu Celsia
Teplota cidla DS18B20: 29.19 stupnu Celsia
Teplota cidla DS18B20: 29.56 stupnu Celsia
Teplota cidla DS18B20: 29.94 stupnu Celsia
Teplota cidla DS18B20: 30.06 stupnu Celsia

Teplotní čidlo DS18B20 je velice oblíbené, zvláštně pro svou nízkou cenu a snadnou použitelnost. Umožňuje měřit teplotu s dostačující přesností pro domácí použití a je možné použít propojovací kabely mezi čidlem a Arduinem dlouhé až několik desítek metrů. Výrobce udává v ideálním případě vzdálenost 200m, já osobně mám ověřeno 12m s využitím parazitního režimu.

 

Seznam použitých komponent:

http://dratek.cz/arduino/1187-teplotni-senzor-digitalni-dallas-ds18b20-1452201536.html

http://dratek.cz/arduino/848-arduino-teplomer-vodotesny.html

http://dratek.cz/arduino/974-arduino-uno-r3-atmega328p-1424115860.html

http://dratek.cz/arduino-kabelaz-propoje-rozsireni/1214-arduino-vodice-samice-samice-40-kusu-1457705007.html

Poznámka: pro úplnost je níže obrázek zapojení oběma způsoby - normální a parazitní napájecí režim

Normální a parazitní režim

FB tw

Další podobné články