Digitální teploměr -55°C až +125°C pro PC do USB do 100kč

Založil Roman Horník, 10. 10. 2020, 05:45:14

Předchozí téma - Další téma

Roman Horník

Máte-li potřebu měřit na počítači aktuální okolní teplotu, ať už jen pro zábavu, bádání, nebo pro nějakou automatizaci, nabízím návod na velice primitivní řešení. Využívá kombinace integrovanýho obvodu DS18B20 a sériovýho převodníku USB-TTL.

Co potřebujeme nutně?
* Počítač s Debianem a funkčním USB
* Převodník USB-TTL
* Snímač DS18B20
* Pájku a trochu cínu, ideálně olovnatýho
* Program DigiTemp (v repu)

Co se ještě může hodit?
* Trojlinka (stačí tenká, nestíněná; nebo dvojlinka pro případ externího napájení snímačů)
* Odpor 4k7 (4.7kΩ), stačí maličkej 125mW - pro případ použití více snímačů
* Stabilizovanej 5V zdroj pro případ externího napájení (např. nabíječka mobilů)

Snímač DS18B20
DS18B20 je integrovanej obvod, vlastně takovej mikropočítač (SIMka je mimochodem taky primitivní počítač), co vypadá jak tranzistor s pouzdrem TO-92 (černej váleček cca o Ø5mm s "uříznutou" ploškou na boku). Má totiž jen 3 vývody. Při pohledu na jeho předek (plošku s potiskem, s nožičkama dolu) jsou to zleva: 1) společná zem, 2) data I/O, 3) napájení +3.0 až +5.5V proti zemi.
Dá se koupit kolem 50kč/ks, prodává se i ve výhodnější zapouzdřený verzi s káblíkem, kde vývod 1 (zem) je černej, vývod 2 (data) žlutej a vývod 3 (napájení) černej.
Komunikuje na protokolu 1-wire v polovičním duplexu (jako vysílačka - buď přijímá, nebo vysílá, ale ne oboje naráz), jde jich řadit víc za sebe (paralelně - vývod 1 na vývod 1, vývod 2 na vývod 2, vývod 3 na vývod 3), a aby se daly dostat data z konkrétního senzoru, je potřeba oslovit je jejich unikátním 16bitovým sériovým číslem (osloví se, ten pošle data, až pak se může oslovit další - nelze přijímat data více senzorů naráz).
DS18B20 poskytuje náměry 4 přesností, 9-12 bitů, čím větší přesnost, tím dýl trvá náměr, a to až 1000ms (1s), my budeme používat přesnost nejvyšší, s rozlišením 1/16°C (0.0625°C), protože...
... protože těžko seženeme zaručeně originální snímače výrobce Dallas/Maxim, ale čínský pajcy. Proto jsem záměrně nezmiňoval parazitní napájení za použití pouze dvou drátů, protože u čínských padělků funguje buď špatně (špatně měří), nebo nefunguje vůbec. Taky u nich sem tam vázne komunikace, respektive občas jsou tady problémy s kontrolním součtem CRC, pak by tady byl taky limit měření do +85°C. Každopádně už z toho důvodu, že si nejspíš koupíte padělek (kterej ale na 3 drátech měřit umí), je třeba s jeho nedostatkama počítat.
Taky je dobrý počítat s faktem, že se měřením čip přirozeně trochu ohřívá, čím častější měření je, tím je ohřev markantnější. Jsou to sice desetiny °C, ale i to se počítá. Zvláště u nezapouzdřený TO-92 verze je tady velká náchylnost na proudění vzduchu - to se umí relativně ošklivě promítnout na náměru, proto je dobrý vetknout ho například do 5mm díry v kousku silnější kovový trubičky, ideálně, když se před světem úplně schová. To platí i u měření teploty těles, kdy se sice ploška dotejká tělesa, ale "prdel" má ve vzduchu, takže měříme něco mezi. Nakonec se pro přesnější měření hodí několik po sobě jdoucích náměrů zprůměrovat - přece jen je na snímači něco málo šumu, tak ať nemáme křivky záznamu moc kostrbatý.

Jak propojit s počítačem?
Za pár korun se dá pořídit například převodník USB-TTL, například s čipem PL2303 - tady za 29kč (taky tam maj zbytek potřebných věcí, včetně už zmíněných padělků). Ovladač nepotřebujeme, už je v jádře a jmenuje se pl2303. Připojením okamžitě vytvoříme zařízení /dev/ttyUSB0, se kterým budeme komunikovat. Problém s oprávněním se dá vyřešit podle tohohle návodu.

Jak získat data?
Program, kterej umí s 1-wire komunikovat, se jmenuje DigiTemp, my ho samozřejmě máme v repu, takže si ho nainstalujeme:
sudo apt install digitemp

Jak sdrátovat?
Takhle vypadá ono slavný zapojení:


Na převodníku si krajního pinu (+3.3V) nevšímáme, zapojíme 2. vývod převodníku na 3. vývod snímače, 3. a 4. vývod příjmu (RxD) a odesílání (TxD) dat vodivě spojíme a připojíme k prostřednímu vývodu, nakonec připojíme poslední vývod převodníku s prvním snímače. To je všechno.
V případě, kdyby to zlobilo, mezi 2. a 3./4. vývod převodníku dáme odpor 4k7.
Další "nabalování" snímačů se děje jejich prostým paralelním zapojením.

V případě externího napájení vypadá zapojení takhle:


I tam je možnost paralelního řazení snímačů. Nic na tom není, akorát - bacha na polaritu, zkrat a elektrostatický výboje, před zapojením do USB si to ještě pořádně prohlídněte. Některý USB totiž nemaj ochranu proti zkratu, a pochybuju, že převodník za 29kč na tom bude líp.

DigiTemp
Jestliže jste něco neudělali blbě a zajistili jste si správný oprávnění, po spuštění digitemp_DS9097 -w nám vyjede:
$ digitemp_DS9097 -w
DigiTemp v3.7.2 Copyright 1996-2018 by Brian C. Lane
GNU General Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
..
Devices on the Main LAN
287ACE09381901A1 : DS18B20 Temperature Sensor
2807146538190112 : DS18B20 Temperature Sensor


Tady vidíte 2 snímače, jejich sériový čísla a popis. Jedná se o padělky, sériový číslo originálu má vypadat takhle: 28xxxxxxxx0000xx
Ale to neva, měří to skoro stejně přesně. Jak?
$ digitemp_DS9097 -a
DigiTemp v3.7.2 Copyright 1996-2018 by Brian C. Lane
GNU General Public License v2.0 - http://www.digitemp.com
20.4375
20.3125


Snímače jsou hned u sebe, je tam vidět drobná odchylka, ale za ty prachy?
DS9097 je původní převodník na RS232. Blbě se shání a je nesmyslně drahej - ten se dá učunit pomocí 2 tranzistorů a pár odporů kolem, ale je to zbytečný, převodník na USB ho plně nahrazuje.

Zbytek, včetně formátování výstupu a výběru snímače - viz man digitemp

P. S.: Příští tejden zkusím připojit snímač DHT22, kterej má vedle teploměru i vlhkoměr. Prej by to mělo fungovat.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz