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-92Senzor čidlo DS18B20 v púzdre SO-8Senzor čidlo Dallas DS18B20 vodotesný vodeodolný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-92SO-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

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.

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 CRC48-bit sériové číslo8-bit typ zariadenia (28h)
MSBLSBMSBLSBMSBLSB

Pamäť senzora

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

SCRATCHPAD (POWER-UP STATE)
BYTE 0TEMPERATURE LSB (50h)(85°C)EEPROM
BYTE 1TEMPERATURE MSB (05h)
BYTE 2TH REGISTER OR USER BYTE 1*<—->TH REGISTER OR USER BYTE 1*
BYTE 3TL REGISTER OR USER BYTE 2*<—->TL REGISTER OR USER BYTE 2*
BYTE 4CONFIGURATION REGISTER*<—->CONFIGURATION REGISTER*
BYTE 5RESERVED (FFh)
BYTE 6RESERVED
BYTE 7RESERVED (10h)
BYTE 8CRC*
*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 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
I 3I 2I 1I 0D -1D-2D -3D -4
MS Byte
Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
SSSSSI 6I 5I 4
I = celé číslo v °C
D = desatinné miesta
S = znamienko (0 = + , 1 = –)
+85.000°C
pre 12-bitové rozlíšenie – všetky bity v teplotnom registri budú obsahovať platné údaje.
pre 11-bitové rozlíšenie – bit 0 nieje definovaný
pre 10-bitové rozlíšenie – bity 1 a 0 sú nedefinované
pre 9-bitové rozlíšenie – bity  2, 1 a 0 nie sú definované

 

Teplota (°C)Digitálny výstup (binárny)Digitálny výstup (hex)
+1250000 0111 1101 000007D0h
+85*0000 0101 0101 00000550h
+25.06250000 0001 1001 00010191h
+10.1250000 0000 1010 001000A2h
+0.50000 0000 0000 10000008h
00000 0000 0000 00000000h
-0.51111 1111 1111 1000FFF8h
-10.1251111 1111 0101 1110FF5Eh
-25.06251111 1110 0110 1111FE6Fh
-551111 1100 1001 0000FC90h
* 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 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0
0R1R011111
R1R0RozlíšenieKonverzný čas
00993.75ms(tCONV/8)
0110187.5ms(tCONV/4)
1011375ms(tCONV/2)
1112750ms(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

Fotka projektu

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.

Produkty

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *

Môžeš použiť tieto HTML značky a atribúty: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>