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 |
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í.
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 |
Pak už se dá vypsat teplota
F:\ttt>digitemp -s1 -a 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....
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 # Set LOCK to yes for serial port locking support |
4) Zkompilovat
make ds9097 root@COMPAQ ~/digitemp-3.3.2# make ds9097 |
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