Jádrem tohoto teploměru je teplotní čidlo SMT160–30 firmy Smartec. Teplotní čidlo SMT160–30 je převodník „teplota / střída“, jeho cena se pohybuje okolo 100 Kč.
Čidlo generuje obdelníkový signál s frekvencí 1–4kHz v závislosti na teplotě, se střídou podle vzorce DC=0,32+0,0047*t , kde t je teplota ve stupních Celsia.
Velkou výhodou tohoto čidla je velice malá spotřeba (menší než 1mW), napájení 5V, digitální výstup a kompatibilita s TTL a CMOS. Teplotní rozsah je od –45°C do +150 °C s absolutní přesností +/-0,7 °C a linearita výstupu je 0,2 °C. Bez větších problémů tak získáte teploměr, který měří s přesností na stupně celsia, což je pro většinu aplikací dostatečné.
Čidlo se dodává v několika pouzdrech, ale pro naše použití je nevhodnější pouzdro T092 (čidlo je potom značené SMT160–30–92, kde 92 značí typ pouzdra).
Připojení teploměru k počítači
V zásadě existují dvě základní zapojení tohoto čidla přímo do počítače. První připojení představuje zapojení čidla přímo na LPT port a druhé zapojení je zapojení čidla na GAME port (na tlačítko střelby).
Obě zapojení jsou si v zásadě rovnocenná, je u nich možné zapojit až 4 čidla zároveň. Dále se budu věnovat jen zapojení jednoho čidla přes LPT port.
Vzhledem k poměrně malému odběru čidla je možné použít k napájení přímo logiku LPT portu, čidlo pak nepotřebuje žádné další napájení.
Zapojení teploměru
V podstatě je možné připojit čidlo přímo na LPT port pomocí konektoru CANNON 25PIN.
Čidlo se bude napájet z PINu 1 (OUT 12) a 14 (OUT11) + 5V (napájí se ze dvou PINu tak, aby se zmenšil odběr). Signál z čidla se přivádí na PIN 15 (IN 5) konektoru. Poslední vývod z čidla – zem (GND) se zapojí na PIN 25.
Ještě je nutné doplnit napájení o kondenzátor 20nF (zapojit mezi +5V – PIN 1 a GND – PIN 25).
Mechanické provedení
Základem je konektor CANNON 25 – LPT port, do kterého se zapájí vlastní vodiče a kondenzátor (je poměrně malý a není problém uložit ho do konektoru).
Co se týká přívodních kabelů, tak bez problémů používám čidlo na 10m kabelu. U vodičů je nutné především zajistit, aby netvořily smyčky. Potom může dojít ke zkreslení signálu a ke zhoršení přesnosti.
Uložení vlastního čidla závisí především na použití. Zejména je nutné zabránit pronikání vody ke kontaktům a vzniku zkratu.
Vzhledem k malým rozměrům čidla je možné ho uložit do kousku hliníkové trubičky (má výbornou tepelnou vodivost) nebo bužírky a konce zalít epoxidem. Získáte čidlo, které je možné použít na měření teploty na méně přístupných místech. K izolaci proti zkratu se hodí tepelně smršťující bužírka.
Další možností je umístit do krabičky elektrikářskou svorkovnici („čokoládu“) a do ní zapojit čidlo a kabely. V případě, že chcete měřit teplotu v místnosti, je možné uložit čidlo přímo do konektoru.
Při zapojování je nutné dbát především na to, aby nemohlo dojít k vyzkratování napájení a tím ke spálení LPT portu v počítači.
Vlastní měření
K určení teploty stačí zjistit střídu signálu a přepočítat ji na teplotu. Nejjednodušší metodou, jak zjistit střídu, je několikrát otestovat logickou úroveň signálu a ze zjištěných údajů určit teplotu podle vzorce:
Teplota [st.C]=( ( (t2 / (t1 + t2) ) – 0.32) / 0.0047)
kde:
t1 je počet měření, kdy byla na portu zjištěna logická 0
t2 je počet měření, kdy byla na portu zjištěna logická 1
Nejjednodušší program na měření teploty
Soubor teplomer.c
#include <stdio.h> #include <unistd.h> #include <sys/io.h> #define DATA 0x378 #define STATUS DATA+1 #define CONTROL DATA+2 float ZmerTo (unsigned short naportu, unsigned char odkud, int stav) // funkce vraci teplotu ve st. Celsia // parametry // naportu - port na kterem se provadi mereni // odkud - bite na ktery je pripojen teplomer // stav - urcuje zda je vstup negovan #define DelkaCyklu 0xffff { int t0, t1, t2; int mask = (1 << odkud); t1=0; t2=0; for (t0 = 0; t0 < DelkaCyklu; t0++) // vlastní mereni if ((inb (naportu) & mask) == 0) t1++ ; // negace mereni v pripade, ze je port negovan t2=DelkaCyklu-t1; if (stav!=0){ t1=t2; t2=DelkaCyklu-t1; }; // vlastní vypocet teploty return ((((double)t2 / ((double)DelkaCyklu)) - 0.32) / 0.0047); } int main (void) { if (setuid (0) < 0) { printf ("Program musi byt spusten rootem\n"); exit (1); } if (ioperm (STATUS, 3, 1)) { printf ("Program musi byt spusten rootem\n"); exit (1); } if (ioperm (CONTROL, 3, 1)) { printf ("Neni pristup na port\n"); exit (1); } // nastaveni control portu na 1 tak aby na nem bylo +5V pro napajeni outb (52, CONTROL); // zmereni teploty //pro LPT port a pro teplomer zapojeny na PIN 15 printf ("Teplota je %4.1f \n", ZmerTo (STATUS, 3, 0)); // nastaveni control portu na 0 tak aby bylo vypnute napajeni cidla outb (55, CONTROL); return (0); }
Kompilace se spustí příkazem gcc -O6 teplomer.c -o teplomer .
Jak je vidět, program musí být spouštěn rootem (nebo musí být na programu nastavené SUID). Dále musím upozornit na to, že na LPT portu jsou některé vstupy a výstupy negovány. Nevadí to, ale pokud budete zapojovat více čidel na jeden LPT port, je nutné s tím počítat.
Nasazení v provozu
Nejjednodušší zapojení tohoto programu do internetového serveru je spouštění programu teploměr pomocí cronu každou hodinu a zápis naměřených hodnot do souboru. Naměřené hodnoty je potom možné zpracovat pomocí PHP nebo je pomocí programu GNUPLOT vynášet do grafu.
Zkušenosti z provozu
Výše uvedené zapojení používám už déle než půl roku pro pravidelné měření venkovní teploty. Čidlo je umístěné venku na 10m kabelu a už bylo vystaveno teplotám od plus 30 stupňů do mínus 20 stupňů Celsia. Vzhledem k umístění čidla (měřené hodnoty jsou ovlivňovány stěnou domu) provádím drobnou korekci teploty (kterou jsem zjistil kalibrací teploměru a u každého čidla bude trochu jiná).
Pokud budete chtít měřit venkovní teplotu úplně přesně, budete muset teploměr nejen zkalibrovat, ale především ho správně umístnit. Pro přesná meteorologická měření musí být teploměr umístěný na prázdném travnatém prostranství, kde nebude stíněn. Dále musí být teploměr umístěn v bílé, dobře větratelné budce, v určité výšce nad zemí…
Jak je vidět, podmínek je hodně a ve většině případů bude stačit, když se venkovní teploměr umístí tak, aby na něj nesvítilo slunce a aby nebyl ovlivňován teplem vycházejícím ze stěn domu.
Závěr
Pokud se rozhodnete postavit si tento teploměr, bude vám stačit jenom pájka a asi 200Kč. Na internetu se sice dá najít řada lepších zapojení, než je toto, ale ta jsou zase o něco složitější. K vyhodnocení údajů z čidla se většinou používají jednochipové procesory. Každý ale nemusí mít přístup k programátoru jednochipu, a tak jsou pro něj tato zapojení nepoužitelná.
Jediné, na co je potřeba dát si pozor, je to, aby nedošlo ke zkratování portů na počítači (a tak k jeho zničení) a aby se u venkovního teploměru nedostávala voda na čidlo.