Dallas DS18B20 – meranie teploty

Ďalší vynikajúci senzor na meranie teploty je Dallas DS18B20. V článku popisujem jeho parametre, dva spôsoby napájania, vnútornú pamäť (registre) a samozrejme zapojenie s Arduinom, jednoduchý program a nejaké fotky.
Teplotný senzor (alebo tiež čidlo) DS18B20 od firmy Maxim (predtým Dallas) je v Arduino komunite veľmi obľúbené. Za veľmi dobrú cenu umožňuje merať teplotu v rozsahu od -55 až do +125 stupňov Celzia, pričom v rozsahu -10 až +85 stupňov Celzia má garantovanú presnosť ± 0,5 ° C.
Ďalšou výhodou DS18B20 je tiež možnosť zakúpiť tento teplotný senzor v puzdre TO-92, ktoré sa veľkosťou podobá obyčajným tranzistorom, tak i vodotesnú variantu, kedy je senzor zatavený v nerezovej tyčinke. Pre komunikáciu s Arduino doskou je u čidla DS18B20 využitá zbernica OneWire, ktorá využíva iba jeden komunikačný pin. Tento snímač tiež podporuje takzvaný parazitný režim, kedy pre spojenie čidla s Arduino doskou stačí využiť iba 2 vodiče narozdiel od senzoru DHT11.




Parametre senzora DS18B20
- napájacie napätie je v rozsahu 3,0V až 5,5V
- počas merania a počas zápisu do EEPROM senzor potrebuje prúd 1,5 mA.
- rozsah meranej teploty je od –55°C do +125°C (-67°F do +257°F)
- presnosť 0,5°C v rozsahu –10°C do +85°C
- rozlíšenie senzora je voliteľné v rozsahu 9 až 12-bit
- meranie teploty s rozlíšením 12-bit trvá 750ms
- obojsmerná poloduplexná prevádzka
Púzdro čidla
Čidlo je vyrábané v týchto troch púzdrach: TO-92, SO-8 a uSOP-8. Najpoužívanejšie v našich projektoch je púzdro TO-92.

Napájanie DS18B20
Existujú dva spôsoby ako môžeme čidlo zapojiť a to s externým napájaním alebo s parazitným napájaním.
Externé napájanie
Zapojení využíva celkovo tri vodiče. Dva sú napájacie a jeden dátový. Taktiež treba pripojiť jeden pull up rezistor 4,7kΩ medzi dátový vodič a Vdd. Viac senzorov napájame paralelne na tieto vodiče ale už bez ďalších rezistorov. Toto zapojenie doporučujem a ďalej budem v príkladoch používať toto zapojenie.

Parazitné napájanie
Pri tomto zapojení si vystačíme s dvomi vodičmi. Senzor je napájaný v podstate cez dátový vodič.Toto zapojenie sa používa, keď je k dispozícii len dvojvodičová linka. Pri dlhých vedeniach a zapojených viacerých senzorov to môže spôsobovať chyby v komunikácii.

Dátová zbernica
Zbernica môže dosahovať vzdialenosť desiatky metrov, výrobca udáva v ideálnom prípade vzdialenosť až 200m. Na jednu takúto 1Wire zbernicu je teda možné zapojiť do 150 čidiel, ktoré sa dajú „adresovať“.
Komunikácia
Komunikácia je inicializovaná mikropočítačom zmenou úrovne napätia na zbernici na 0V. Komunikácia je založená na takzvaných „časových slotoch“, čiže od závislosti doby trvania poklesu úrovne napätia je slave zariadením identifikovaný typ operácie (zápis log.1 alebo log.0, čítanie log.1 alebo log.0, reset a identifikácia zariadenia).
Každé čidlo obsahuje unikátny 64 bitový ROM CODE. Prvých horných 8 bitov slúži na zabezpečenie CRC kódom, potom nasleduje 48-bitové sériové číslo zariadenia a dolných 8 bitov tvorí kód identifikujúci typ zariadenia, teda v našom prípade každý snímač DS18B20 bude mať toto číslo 0x28. Táto 64-bitová informácia je unikátna pre každé vyrobené zariadenie s možnosťou tak jednoznačnej identifikácie aj viacerých zariadení rovnakého typu pripojených na jednu linku.
Pamäť senzora
Nazýva sa aj SCRATCHPAD a obsahuje nasledovných 8 bajtov:
Byte 0 a 1
obsahujú dohromady 16 bitové číslo s údajom o teplote. Tento byte je len na čítanie (read-only):
Byte 2 a 3
sú TH a TL bajty a vyžívajú sa na signalizáciu alarmu. Nastavujú sa užívateľom a ich hodnota je porovnávaná s nameranou hodnotou a podľa toho sa nastavuje S bit. Viac v datasheete.
Byte 4
je konfiguračný register. Nastavíme ním rozlíšenie 9 až 12 bitov:
Byte 5, 6 a 7
sú rezervované pre interné použitie a nieje možné ich prepísať
Byte 8
je iba na čítanie a obsahuje kód CRC pre bajty 0 až 7 scratchpadu
Zapojenie DS18B20 s Arduinom
Zapojenie s Arduinom je veľmi jednoduché. Použil som Arduino Nano spolu so senzorom Dallas DS18B20 a rezistorom 4k7 zapojených na breadboarde. Existuje tento senzor aj ako modul pre Arduino na plošnom spoji, ktorý už obsahuje aj pull up rezistor. Samozrejme môžeme pripojiť aj viac senzorov na jednu zbernicu OneWire.

Programovanie kódu pre Arduino
K naprogramovaniu bude potrebné použitie týchto dvoch knižníc:
- OneWire – samotný OneWire komunikačný protokol. Knižnicu je možné si stiahnuť buď priamo zo stránky jej správcu Paula Stoffregena alebo si ju vyhľadáte a nainštalujete priamo v správcovi knižníc. V adresári libraries po inštalácii pribudne adresár OneWire. V ňom je adresár examples, kde sa nachádza niekoľko príkladov a jeden z nich je použiteľný aj na senzor DS18B20.
- DallasTemperature – toto nie je nevyhnutná knižnica, ale ak si ju nainštalujete, tak sa vám bude so senzorom pracovať pohodlnejšie. Knižnicu si možno stiahnuť zo stránky Dallas Temperature Control Library alebo ju nájdete priamo v správcovi knižníc a nainštalujete v Arduino IDE. V adresári libraries pribudne adresár DallasTemperature.

Nezabudnite po inštalácii reštartovať vývojové prostredie, ak by sa knižnice v ňom neobjavili. Ja budem používať v programoch obe knižnice. Každý senzor má svoje jedinečné číslo (adresu), pomocou ktorého s ním komunikujeme.

Vyskúšal som zapojiť dva senzory a použil som príklad z DallasTemperature, ktorý sa volá Tester.ino:
Ten vypisuje údaje v nasledovnej podobe.
Dallas Temperature IC Control Library Demo Locating devices...Found 2 devices. Parasite power is: OFF Found device 0 with address: 28FF105DB5160581 Setting resolution to 9 Resolution actually set to: 9 Found device 1 with address: 28FF9436C216049A Setting resolution to 9 Resolution actually set to: 9 Requesting temperatures...DONE Temperature for device: 0 Temp C: 25.50 Temp F: 77.90 Temperature for device: 1 Temp C: 26.00 Temp F: 78.80
Pri zmene rozlíšenia z 9-bitov na 12-bitov som program upravil zmenou #define TEMPERATURE_PRECISION 12 a výpis po zmene je nasledovný:
Dallas Temperature IC Control Library Demo Locating devices...Found 2 devices. Parasite power is: OFF Found device 0 with address: 28FF105DB5160581 Setting resolution to 12 Resolution actually set to: 12 Found device 1 with address: 28FF9436C216049A Setting resolution to 12 Resolution actually set to: 12 Requesting temperatures...DONE Temperature for device: 0 Temp C: 25.56 Temp F: 78.01 Temperature for device: 1 Temp C: 25.81 Temp F: 78.46
Teplotný snímač DS18B20 je veľmi obľúbený, zvláštne pre svoju nízku cenu a ľahkú použiteľnosť. Umožňuje merať teplotu s dostačujúcou presnosťou pre domáce použitie a je možné použiť prepojovacie vodiče medzi snímačom a Arduinom dlhé až niekoľko desiatok metrov. Taktiež som vyskúšal aj ďalšie senzory ako napr. DHT11 (DHT22) alebo BME280.
Najobľúbenejšie produkty pre Arduino projekty

Keyestudio Super Starter Kit UNO V4
0.00

Keyestudio ESP32-WROOM-32 Module Bluetooth WiFi
20.48

Keyestudio UNO R3 PLUS Development Board with Type C interface (kompatibilné s Arduinom)
0.00

Keyestudio CAN-BUS Shield MCP2515 (kompatibilné s Arduinom)
18.42

Keyestudio Super Starter Kit MEGA 2560 V4
0.00

Keyestudio MEGA 2560 R3 Development Board (kompatibilné s Arduinom)
34.26

Keyestudio Nano Development Board (kompatibilné s Arduinom)
0.00

Keyestudio Leonardo R3 ATmega32U4 Development Board (kompatibilné s Arduinom)
14.34