Dallas DS18B20 – meranie teploty

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.

Senzor čidlo DS18B20 v púzdre TO-92 Senzor čidlo Dallas DS18B20 vodotesný vodeodolný
Senzor čidlo DS18B20 v púzdre SO-8 Senzor čidlo Dallas DS18B20 modul s tromi vývodmi

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.

Čidlo DS18B20 je vyrábané v púzdrach TO-92, SO-8 a uSOP-8

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

Zapojenie 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.

Externé napájanie DS18B20 pri zapojení využijeme tri vodiče. Dva sú napájacie a jeden dátový

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.

Parazitné napájanie DS18B20 s dvomi vodičmi cez dátový vodič

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.

8-bit CRC 48-bit sériové číslo 8-bit typ zariadenia (28h)
MSB LSB MSB LSB MSB LSB

Pamäť senzora

Nazýva sa aj SCRATCHPAD a obsahuje nasledovných 8 bajtov:

SCRATCHPAD (POWER-UP STATE)
BYTE 0 TEMPERATURE LSB (50h) (85°C) EEPROM
BYTE 1 TEMPERATURE MSB (05h)
BYTE 2 TH REGISTER OR USER BYTE 1* <—> TH REGISTER OR USER BYTE 1*
BYTE 3 TL REGISTER OR USER BYTE 2* <—> TL REGISTER OR USER BYTE 2*
BYTE 4 CONFIGURATION REGISTER* <—> CONFIGURATION REGISTER*
BYTE 5 RESERVED (FFh)
BYTE 6 RESERVED
BYTE 7 RESERVED (10h)
BYTE 8 CRC*
*POWER-UP STATE DEPENDS ON VALUE(S) STORED IN EEPROM.

Byte 0 a 1

obsahujú dohromady 16 bitové číslo s údajom o teplote. Tento byte je len na čítanie (read-only):

LS Byte
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
I 3 I 2 I 1 I 0 D -1 D -2 D -3 D -4
MS Byte
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
S S S S S I 6 I 5 I 4
 S  = znamienko (0 = + , 1 = -)
 I  = celé číslo v °C
 D  = desatinné miesta
+ 85. 000°C
pre 12-bitové rozlíšenie - všetky bity v teplotnom registri obsahujú platné údaje
pre 11-bitové rozlíšenie - bit 0 nieje definovaný
pre 10-bitové rozlíšenie - bity 0 a 1 nie sú definované
pre 9-bitové rozlíšenie - bity 0, 1 a 2 nie sú definované
Teplota (°C) Digitálny výstup (binárny) Digitálny výstup (hex)
+125 0000 0111 1101 0000 07D0h
+85* 0000 0101 0101 0000 0550h
+25.0625 0000 0001 1001 0001 0191h
+10.125 0000 0000 1010 0010 00A2h
+0.5 0000 0000 0000 1000 0008h
0 0000 0000 0000 0000 0000h
-0.5 1111 1111 1111 1000 FFF8h
-10.125 1111 1111 0101 1110 FF5Eh
-25.0625 1111 1110 0110 1111 FE6Fh
-55 1111 1100 1001 0000 FC90h
* nastavená hodnota teploty pri zapnutí je + 85 ° C.

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:

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
0 R1 R0 1 1 1 1 1
R1 R0 Rozlíšenie Konverzný čas
0 0 9 93.75ms (tCONV/8)
0 1 10 187.5ms (tCONV/4)
1 0 11 375ms (tCONV/2)
1 1 12 750ms (tCONV)

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.

Senzor čidlo Dallas DS18B20 zapojenie Fritzing na Arduino Nano s pull-up rezistorom

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.
Inštalovanie knižníc OneWire DallasTemperature v Arduino IDE pre senzor čidlo Dallas DS18B20

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.

projekt Arduino Dallas DS18B20 meranie teploty na breadboarde

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.

Výber na čítanie...

Arduino história
Arduino história

Arduino [čítaj Arduíno] je v informatike názov malého jedno-doskového počítača založeného na mikrokontroléri ATmega od firmy Atmel. Svojim návrhom sa snaží podporiť výučbu informatiky v školách a oboznámiť študentov s tým, ako sú pomocou počítačov riadené rôzne zariadenia ...

Čítať viac...

ako na ošetrenie spínacích kontaktov - debouncing
Ako na ošetrenie spínacích kontaktov – debouncing

Všeobecne najčastejším spôsobom ovládania aplikácií Arduinom s okolitým svetom sú tlačítka, klávesnice (membránové, kapacitné alebo s mikrospínačmi), rotačné enkódery (rotation encoders, inkrementálne otočné ovládače) a rad ďalších spínačov, pracujúcich na...

Čítať viac...

ThingSpeak
ThingSpeak

Pri vytváraní projektov pre Arduino narazíme na problém, kedy chceme sledovať stav napr. teplotu, tlak, vlhkosť či akékoľvek iné hodnoty z miesta mimo našu domácu sieť. Riešenie môžeme nájsť u už hotových webových...

Čítať viac...

Obľúbené produkty...

Keyestudio Self-balancing Car

79.45 EUR

71.50 EUR

Vyhľadať články
Programovanie...
  • Goniometrické funkcie

    Goniometrické funkcie v matematike označuje termín používaný pre jednu zo šiestich funkcií veľkos...

  • Funkcie náhodných čísiel

    Náhodné čísla zvyčajne pozostávajú zo zložitých sérií algoritmov, ktoré sú štatisticky predvídate...

  • Ostatné IO funkcie

    U Arduina je možné generovať i zvuk, ale iba v najjednoduchšej podobe. Neumožňuje totiž generovať...

  • Konštanty

    Konštanty sú symboly reprezentujúce nemennú číselnú alebo inú hodnotu. Prekladač jazyka im prirad...

  • Adresové operátory

    Adresové operátory označované aj ako ukazovatele (anglicky pointer, česky ukazovateľ, slovensky s...

Podpora webu
Na kávu už prispeli
Dátum Meno Suma
20.10.2024 Radovan Nosáľ 20€
02.10.2024 Milan Durkoš 10€
08.01.2024 Veres Dusan 10€
15.05.2023 Ivan Danis 10€
28.09.2022 Ivan Vrab 7€
14.05.2022 Nemcic Marian 10€
04.02.2022 Robert Bilko 5€
29.01.2022 Peter Buffa 5€
19.11.2021 Rastislav Rehak 5€
16.09.2021 Anton Strela 5€
13.09.2021 Juraj Jedlak 5€
02.09.2021 Michal Marek 7€
08.08.2021 František Uhrík 5€
21.07.2021 Juraj Hrdina 5€
25.03.2021 Jan Nemec 10€
16.03.2021 Igor Pavlov 5€
25.02.2021 Lukas Lacuch 5€
06.11.2020 Pavol Balint 5€
05.11.2020 Marek Horečný 5€
05.10.2020 Jan Kusnir 5€
27.04.2020 Jan Zuskin 15€
26.04.2020 Dušan Sojka 5€
24.02.2020 Juraj Lackanič 5€
22.01.2020 František Žilinec 10€
20.05.2018 Tomáš F. 2€
17.12.2018 Pavol P. 5€
QR Donate 10Eur