Teploměr pro PC

Když se jednoho letního dne naše Linuxové routery "škvařili" v nesnesitelném žáru, napadlo mně vyrobit teploměr který by měřil okolní teplotu a včas nás upozornil na blížící se pohromu. Začal jsem pátrat po netu a nakonec jsem objevil dvě možné konstrukce obsahující buď integrovaný obvod SMT160-30 (převodník teplota/střída) nebo DS18B20 (digitální teploměr). Zapojení s DS18B20 mně okamžitě nadchlo svojí jednoduchostí a elegancí:

 

Čidlo DS18B20 vyrábí firma Dallas (dnes Maxim/Dallas). Kromě několika druhů teplotních čidel lze v sortimentu nalézt i A/D převodníky, paměti, čidla vlhkosti, potenciometry a další periferie, které spolu komunikují po univerzální sběrnici 1-Wire® Bus. Nás budou zajímat hlavně teplotní čidla, konkrétně DS18B20 které patří z hlediska parametrů mezi ty nejlepší a přitom je cenově dostupné. Je velmi přesné (absolutní přesnost lepší než 0,5°C), lze jej připojit pouze dvěma "dráty" a obsahuje řadu dalších funkcí, které patrně ani nevyužijeme (např. programovatelnou přesnost převodníku 9-12 bitů).

 

KEY SPECIFICATIONS: Temperature Sensors and Temperature Switches
Part Number Interface Accuracy (±°C) Supply Voltage Range (V) Parasite Power Operating Temp. Range (°C) Temp. Thresh. (°C) Meas. Res. (Bits) Package
DS18B20 1-Wire® 0.5 3.0 to 5.5 Available -55 to +125 1, Prog. NV 9 - 12 3/TO-92
8/µMAX
8/SO.150

 

 

Konstrukce

Protože se mi nechtělo "bastlit" zapojení jen tak do konektoru a chtěl jsem dělat více kusů, navrhnul jsem si plošný spoj. Zde je možné stáhnout Schema a PCB, obojí určeno pro freeware editor Eagle 4.11. (pozor, PCB je udělán technikou rozlévání mědi, po nahrání teplomer.brd je nutné aktualizovat pohled přes Tools/Ratsnest). K výrobě jsem použil jednostranný plošný spoj vzhledem k omezeným možnostem domácí výroby, naštěstí jsou ze seriového konektoru použity pouze piny 2 až 5 takže je to možné. Při použití PCB vhodné tloušťky drží plošný spoj v konektoru naprosto pevně.

 

 

Pro jednoduchost je DS18B20 napájeno přímo ze sběrnice (tzv. "parasite-power"), což znamená že jsou vývody čidla 1 a 3 připojeny na RETURN, vývod 2 jsou DATA. Propojovací kabel pak stačí pouze dvouvodičový, připojený CINCH konektorem. Délka 1-wire sběrnice může být až několik desítek metrů, delší vedení je ale vhodné zakončit schottky diodou a použít stíněný kabel - doporučuji nahlédnout do firemní dokumentace. Z důvodu dostupnosti jsem použil na místě Zenerových diod poněkud jiné součástky než uvádí původní dokumentace, vše zakoupeno u GME kromě teplotních čidel, která je lepší kupovat přímo u distributora HTE (91,50 Kč/kus vč. DPH). Cena v maloobchodním prodeji může být podstatně vyšší (176,- Kč/kus v GME). Celkem jsem vyrobil 10ks čidel, všechny chodili na první zapojení a nebylo nutné žadné "doladění" napěťových úrovní jak popisují některé konstrukce.

R1 - 1k5
D1 - BZX83 3,9V
D2 - BZX83 6,2V
D3, D4 - 1N5818
IC1 - DS18B20
konektor CAN9-Z
krytka na CAN9
zásuvka CINCH SCJ-0359

Původně jsem chtěl vytvořit kompaktní zařízení a tak jsem zapájel čidlo teploty přímo do těla konektoru jak je vidět na fotografiích. Kupodivu není ani příliš ovlivněna tepelná setrvačnost zařízení, na druhou stranu je přesnost měření sporadická, neboť většina větracích otvorů PC vyfukuje směrem dozadu a tak je zde teplota mnohem vyšší než skutečná teplota v místnosti. Pro představu jsem naměřil tyto hodnoty: teplota v místnosti 25°C, čidlo volně v zadní části PC 32°C, čidlo zcela uzavřené v krytce 36°C (AMD Athlon 2400+). Jak je patrné, rozdíl mezi skutečnou a naměřenou teplotou může být i více než 10°C takže doporučuji použít konektor a externí čidlo na kabelu vhodné délky (s oběma variantami je na plošném spoji počítáno). Kromě toho provedení s konektorem umožňuje připojit další čidla za sebou a tak měřit teplotu na více místech současně.
POZOR: pro verzi s konektorem je vhodné použít obyčejnou šedivou krytku konektoru, při použití pokovené (stříbrné) krytky může dojít ke zkratu CINCH konektoru na zem a zapojení pak nebude funkční.

 

Software

Na první pokusy bude stačit stáhnout SW přímo ze stránek projektu DigiTemp, konkrétně se jedná o dtreg17.zip (musí se jednat o verzi pro pasivní adaptér DS9097). Program mi bez problémů fungoval pod Win98 a WinXP SP2, naopak nefungoval pod W2000 SP4. V případě problémů je možné zapnout režim kompatibility, pěkný článek o této problematice vyšel na HW serveru. Dtreg je již staršího data a jedná se o konzolovou aplikaci která se spouští v DOS okně.

Nejdřív si musí program "očuchat" jaká čidla jsou připojena a vytvoří si konfigurační soubor digitemp.cfg

F:\ttt>digitemp -s1 -i
DigiTemp v1.7 [REGISTERED] Copyright 1996-2002 by Brian C. Lane
All Rights Reserved - http://www.brianlane.com

Turning off all DS2409 Couplers
.
Searching the 1-Wire LAN
28264C8400000005 : DS18B20 Temperature Sensor
ROM #0 : 28264C8400000005

Pak už se dá vypsat teplota

F:\ttt>digitemp -s1 -a
DigiTemp v1.7 [REGISTERED] Copyright 1996-2002 by Brian C. Lane
All Rights Reserved - http://www.brianlane.com

Mar 02 11:28:18 Sensor 0 C: 30.81 F: 87.46

 

Pro praktické využití je nutné se poohlédnout po nějakém lepším prográmku, zatím nejlepší SW který jsem viděl je LogTemp jehož domovská stránka je zde. LogTemp umí:

1) Přehledně vynést do grafu teplotu z několika čidel
2) Logovat hodnoty do souboru
3) Zobrazit aktuální teplotu v liště
4) Ukládat hodnoty vzdáleně na FTP server
5) Vyhlásit alarm při dosažení určité teploty a další maličkosti...


Program používá ovladače 1-wire sběrnice přímo od Dallasu z jejich SDK, což dává záruku vysoké kompatibility (W95/98/ME/NT/2000/XP) a podpory všech možných rozhraní (COM/LPT/USB) a čidel.

Instalace:
1) Stáhnout a nainstalovat iButton-TMEX and Developers Tool Kit
2) Stáhnout a nainstalovat LogTemp
3) TMEX ovladače je nutné nastavit na správný typ adaptéru a COM port přes který se bude komunikovat (DS9097E, COM1)
4) Pak už stačí spustit logTemp a nastavit pár maličkostí jako třeba interval odečtu teploty, zobrazení v systray....

 

Linux

Nejdůležitější použití pro které jsem celé zapojení vlastně konstruoval bylo měření teploty pod Linuxem, ale nebylo to tak lehké jak se uvádí na http://www.root.cz. V naší síti totiž používáme poněkud neznámou distribuci Trustix 2.0 a tak bylo nutné provést několik změn. Instalace nefungovala ani z RPM balíčků, ani ze zdrojáků, protože chyběla knihovna liblockdev (knihovna která zajišťuje výhradní přístup k zařízení). Liblockdev se mi ale přes veškerou snahu nepodařilo rozchodit, stále to mlelo něco o tom že potřebuje novější verzi souborového systému. Takže jak na to:

1) Stáhnout zdrojový soubor ze stránek projektu digitemp http://www.digitemp.com/software/linux/digitemp-3.3.2.tar.gz

2) Rozbalit do vhodného adresáře

tar xvzf digitemp-3.3.2.tar.gz

3) Vypnout podporu Liblockdev v souboru Makefile

cd digitemp-3.3.2
vi Makefile

# Set LOCK to yes for serial port locking support
LOCK = no

4) Zkompilovat

make ds9097

root@COMPAQ ~/digitemp-3.3.2# make ds9097
gcc -I./src -I./userial -O2 -DLINUX -c -o src/digitemp.o src/digitemp.c
gcc -I./src -I./userial -O2 -DLINUX -c -o src/device_name.o src/device_name.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/crcutil.o userial/crcutil.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/ioutil.o userial/ioutil.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/swt1f.o userial/swt1f.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/owerr.o userial/owerr.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/cnt1d.o userial/cnt1d.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/ad26.o userial/ad26.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/ds9097/ownet.o userial/ds9097/ownet.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/ds9097/linuxlnk.o userial/ds9097/linuxlnk.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/ds9097/linuxses.o userial/ds9097/linuxses.c
gcc -I./src -I./userial -O2 -DLINUX -c -o userial/ds9097/owtran.o userial/ds9097/owtran.c
gcc -I./src -I./userial -O2 -DLINUX -c -o src/ds9097.o src/ds9097.c
gcc src/digitemp.o src/device_name.o userial/crcutil.o userial/ioutil.o userial/swt1f.o userial/owerr.o userial/cnt1d.o userial/ad26.o userial/ds9097/ownet.o userial/ds9097/linuxlnk.o userial/ds9097/linuxses.o userial/ds9097/owtran.o src/ds9097.o -o digitemp_DS9097 -lm

5) Hotovo!! Teď už zbývá jenom vyzkoušet. Nejprve si program musí "očuchat" seriový port a vytvořit konfigurační soubor .digitemprc (čidlo mám na COM2)

root@COMPAQ ~/digitemp-3.3.2# ./digitemp_DS9097 -i -s /dev/ttyS1
DigiTemp v3.3.2 Copyright 1996-2004 by Brian C. Lane
GNU Public License v2.0 - http://www.brianlane.com
Turning off all DS2409 Couplers
.
Searching the 1-Wire LAN
28264C8400000005 : DS18B20 Temperature Sensor
ROM #0 : 28264C8400000005
Wrote .digitemprc

6) A jdeme měřit teplotu...

root@COMPAQ ~/digitemp-3.3.2# ./digitemp_DS9097 -a -s /dev/ttyS1
DigiTemp v3.3.2 Copyright 1996-2004 by Brian C. Lane
GNU Public License v2.0 - http://www.brianlane.com
Mar 08 12:45:20 Sensor 0 C: 25.62 F: 78.12

Zdroje ze kterých jsem čerpal:
http://snet.iba.cz/info/teplomer/navod/
http://www.digitemp.com/
http://www.root.cz/clanky/nejjednodussi-online-teplomer/
http://www.root.cz/clanky/nejjednodussi-online-teplomer-2/

Archiv:
dtreg17.zip
1-Wire Drivers installation package (TMEX Runtime Environment) ver.4.00 beta4
LogTemp 2.10.0.37
digitemp-3.3.2.tar.gz


(c) 3/2005 Milan Štěpánek, trifid2(zavinac)seznam.cz