DS18B20 Senzor teploty

Page

Stránky / Súčiastky ku Arduinu / Meranie teploty /

DS18B20 je digitálny senzor teploty s rozlíšením 9-12 bitov. Komunikuje pomocou rozhrania One Wire. Datasheet s podrobnosťami je na stránke výrobcu. Obvod je nutnosťou pre každého amatérskeho experimentátora a skôr alebo neskôr skončíte pri pokuse poskladať pomocou neho nejakú malú meteorologickú stanicu.

Popis obvodu

Bežný užívateľ si tento obvod kúpi v púzdre TO-92.

  • Pin1 - Sem sa pripojí GND.
  • Pin2 - Dátový prenos. Na tomto konektore je potrebné pripojiť pull-up rezistor s hodnotou 4,7 k (toto nie je potrebné dodržať úplne presne, možno pokojne použiť aj približnú hodnotu). Pull-up rezistor udržuje napätie na Pin2 na logickej jednotke (keď sa nič nedeje) a samotná komunikácia prebieha tak, že Arduino, alebo senzor ju podľa dohodnutého protokolu zhadzujú na nulu.
  • Pin3 - Napájanie. Napájanie je v rozsahu 3V - 5,5V, takže ho pripojíme na 5V z Arduina.

Obvod je možné pripojiť dvomi spôsobmi:

  • Externé napájanie - Sú pripojené všetky tri konektory. Takto budeme senzor pripájať v tomto príklade.
  • Parazitické napájanie - Tomuto sa nebudeme venovať, podrobnosti je možné dohľadať v datasheete. Na informáciu stačí vedieť, že sa dá takto ušetriť jeden vodič a DS18B20 si berie energiu cez Pin2 a uskladňuje si ju interne v kondenzátore.

Inštalovanie knižníc

Na použitie je potrebné nainštalovať dve knižnice:

  • OneWire - Samotný One Wire protokol. Knižnicu je možné si stiahnuť priamo zo stránky jej správcu, Paula Stoffregena. Alebo si ju 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.
  • Dallas Temperature - 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. V adresári libraries pribudne adresár DallasTemperature.
Po inštalácii nezabudnite reštartovať vývojové prostredie, ak by sa knižnice v ňom neobjavili. V ďalšom texte budeme využívať obe knižnice.

Pripojenie k Arduinu

Pripojenie je jednoduché. Presne podľa popisu zapojenia. Treba si len vybrať, ktorý digitálny vstup bude čítať údaje zo senzora. V tomto prípade je to digitálny pin 2.

Aké je rozlíšenie merania

Rozlíšenie merania je nepriamo úmerné času, ktorý potrebuje senzor na A/D prevod.

Rozlíšenie v bitoch Čas merania  Rozlíšenie merania
 9 93,75 ms  0,5 °C
 10 187,5 ms  0,25 °C
 11 375 ms  0,125 °C
 12 750 ms  0,0625 °C

Samozrejme, že každý bude chcieť merať v najvyššom rozlíšení a čo najčastejšie, ale treba rátať s viacerými problémami:

  • Spotrebuje to dosť času.
  • Príliš časté meranie spôsobuje mierne zahrievanie senzora.

Presnosť senzora je:

  • 0,5 °C v intervale -10 až 85 °C. Krivku presnosti merania nájdete v datasheete na obrázku (Typical Performance Curve).
  • 2 °C v intervale -55 až 125 °C.

V datasheete sa ešte môžete dočítať, že senzor obsahuje internú pamäť 8 bajtov, a z toho 3 bajty sa zálohujú do EEPROM. Sú to dva bajty pre alarm, čo je funkcia, ktorú v amatérskych podmienka asi nebudete potrebovať. Posledný bajt je konfiguračný register, v ktorom je uložené rozlíšenie merania.

Počas merania a počas zápisu do EEPROM senzor potrebuje prúd 1,5 mA.

Viac senzorov

Bez problémov môžeme pripojiť aj viac senzorov na jednu zbernicu One Wire. Každý senzor má svoje jedinečné číslo (adresu), pomocou ktorého s nim komunikujeme.

Prvé pripojenie senzora

Pred pokusmi so senzorom je vhodné si otestovať, ći je senzor správne pripojený. Na to je použiteľný príklad, ktorý je dodávaný priamo s knižnicou OneWire. Volá sa DS18x20_Temperature.ino. Voči priloženému obrázku sa líši pinom, na ktorom je pripojený senzor. V príklade je použitý pin 10.

Po spustení vypíše na sériový port všetky nájdené senzory. Napríklad  v tomto prípade vypísal informácie o dvoch pripojených senzoroch.

ROM = 28 8C 6E 45 6 0 0 8A
  Chip = DS18B20
  Data = 1 A3 1 4B 46 7F FF D 10 CE  CRC=CE
  Temperature = 26.19 Celsius, 79.14 Fahrenheit
ROM = 28 49 BD 44 6 0 0 61
  Chip = DS18B20
  Data = 1 A2 1 4B 46 7F FF E 10 D8  CRC=D8
  Temperature = 26.12 Celsius, 79.02 Fahrenheit
No more addresses.

Druhá možnosť je 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: 288C6E450600008A
Setting resolution to 9
Resolution actually set to: 9
Found device 1 with address: 2849BD4406000061
Setting resolution to 9
Resolution actually set to: 9
Requesting temperatures...DONE
Temperature for device: 0
Temp C: 24.50 Temp F: 76.10
Temperature for device: 1
Temp C: 24.50 Temp F: 76.10

Blog

Zoznam článkov, kde sa pracuje s týmto senzorom teploty:

Vytvorenie zoznamu DS18B20 do poľa v C++

Ak používate viac senzorov v jednom programe a potrebujete ich od seba jasne odlíšiť, nevyhnete sa vytvoreniu zoznamu adries jednotlivých senzorov. V tomto článku si vytvoríme program, ktorý nám túto činnosť uľahčí. Výsledkom bude pole adries v C++, ktoré môžete následne využívať v ďalšom kóde.

Sviečkové grafy

Táto stránka slúži ako úvodná strana ku zobrazovaniu meraných hodnôt pomocou sviečkových grafov. Tieto grafy umožňujú lepšie analyzovať veľké množstvá pomaly sa meniacich hodnôt. Primárne sa používajú vo finančnom sektore, ale rovnako dobre môžu poslúžiť aj pre Arduino. Pomocou neho sa toho veľa meria a nie vždy je obyčajný graf s nameranými hodnotami to najlepšie, čo môžete použiť.

Úvod do sviečkových grafov

Sviečkové grafy (candlestick) sú obľúbeným spôsobom vizualizácie údajov vo finančnom sektore. Tieto grafy používajú štyri hodnoty (open, high, low a close), ktoré slúžia na výpočet sviečkového grafu. V tomto článku sa pozrieme na to, ako nám tieto grafy môžu pomocť lepšie vizualizovať merané hodnoty.

Sviečkové grafy s reálnymi číslami

V dnešnom dieli prerobíme sviečkové grafy z celých čísiel na reálne. Toto bude iba drobná zmena voči pôvodnému algoritmu, pretože sme ho od začiatku písali cez šablóny. Vďaka tomuto kódu budeme môcť v nasledovnom článku zobrazovať reálnu teplotu zo senzora DS18B20.

Zobrazenie teploty DS18B20 pomocou sviečkového grafu

V záverečnom článku celej série si zobrazíme reálne údaje zo senzora DS18B20 pomocou sviečkových grafov. Jedna sviečka bude ukazovať hodinový vývoj teploty a teplotu budeme merať každých desať sekúnd. Výsledok budeme zobrazovať na displeji Nokia 5110.

Parsovanie výstupu z Arduina pomocou Node.js

V dnešnom článku si ukážeme, ako je možné výstup z Arduina parsovať v javascripte. Arduino bude merať teplotu pomocou senzora DS18B20 a výsledky bude odosielať na sériový port. Obsah zo sériového portu budeme spracovávať pomocou kódu v Node.js a budeme si ho transformovať do objektov. Získané objekty môžeme následne spracovávať.

Parazitické napájanie

Integrovaný obvod na meranie teploty DS18B20 sa môže zapojiť dvomi spôsobmi. V normálnom zapojení sa na pin 3 pripojí VCC a obvod sa napája odtiaľ. Druhou možnosťou je prepojiť navzájom piny 1 a 3 a oba pripojiť na GND. Vtedy sa obvod prepne do parazitického režimu a napája sa priamo z dátového vodiča.

ATtiny85 - Teplomer s DS18B20

V tomto článku si vyrobíme miniatúrny teplomer. Použijeme na to mikrokontrolér ATtiny85 a integrovaný obvod DS18B20. Výsledok budeme zobrazovať na displeji TM1637. Zapojenie súčiastok je jednoduché a celý projekt si možno postaviť na breadboarde.

ESP8266 - Teplomer s DS18B20

V dnešnom článku by som chcel začať pracovať s témou jednoduchého teplomera, ktorú budem postupne vylepšovať. V prvom článku si navrhneme jednoduchý teplomer pomocou mkrokontroléra ESP8266 a integrovaného obvodu DS18B20. Výsledok budeme zobrazovať na OLED displeji. Toto základné zapojenie nám poslúži aj v ďalších článkoch, v ktorých sa budeme snažiť odoslať zozbierané údaje o teplote na Internet do služby, ktorá je určená na zber a vizualizáciu hromadných údajov.

Node-RED: Arduino a DS18B20

Node-RED vie pracovať so sériovým portom. V tomto článku si na sériový port pripojíme Arduino a senzor teploty DS18B20. Arduino bude výsledky merania odosielať cez sériový port a Node-RED ich bude parsovať do podoby, ktorá umožňuje ľahšie spracovanie. Tok v Node-RED bude prispôsobený tak, aby vedel spracovať údaje z viacerých senzorov teploty DS18B20.

ESP8266 - HTTP server a senzor teploty DS18B20

V predchádzajúcich článkoch sme sa naučili vytvoriť HTTP server pomocou mikrokontroléra ESP8266. Doteraz sme zobrazovali statické stránky. Postupne sme sa naučili zobraziť stránky, ktoré boli v zdrojovom kóde programu, alebo boli uložené v súborovom systéme SPIFFS. Dnes sa posunieme o kus ďalej. Statickú stránku nahradíme dynamickou stránkou, ktorá bude zobrazovať teplotu. Teplotu budeme merať pomocou integrovaného obvodu DS18B20.

Node-RED: ESP8266 a DS18B20

V dnešnom článku prepojíme dve úžasné technológie. Node-RED a jeho toky nám budú slúžiť ako server a ESP8266 budeme používať ako HTTP klienta, ktorý bude na server odosielať nameranú teplotu. V tomto článku využijeme vedomosti z dvoch predchádzajúcich článkov. Arduino nahradíme za ESP8266 a meranú teplotu nebudeme prenášať cez sériový port, ale pomocou protokolu HTTP. V Node-RED budeme používať HTTP server, na ktorý bude ESP8266 odosielať nameranú teplotu. Poďme na to.



Download
  • DS18B20 - Programmable Resolution 1-Wire Digital Thermometer

05.07.2016


Menu