English version is here

Jednoduchý, presný a lacný teplomer k PC

Tento článok si kladie za cieľ oboznámenie čitateľov a výskumníkov s perifériou k PC typu "dobré a užitočné zariadenie" (podľa mojich skúseností s potrebou snímania teploty pri vývoji zariadení alebo v domácnosti).

Úvod:

    Popísané zariadenie umožňuje meranie teploty na 4-och miestach pomocou počítača. Pripája sa ku Game portu PC (ktorý je väčšinou nevyužitý) a senzory môžu byť od počítača vzdialené až 10 metrov. Absolútna presnosť merania teploty je lepšia než 1°C v teplotnom rozsahu -30÷100°C (dané použitými senzorami). Rozlíšenie je však (z praktických skúseností) 0.01°C (šum merania). Každý senzor sa pripája 3-vodičovým tenkým káblikom a keďže je prenos informácie digitálny, tak jeho parametre nevplývajú na presnosť merania. Obslužný program na PC zobrazuje teploty senzorov, môže ich chronologicky zaznamenávať do súboru a umožňuje aj kalibráciu jednotlivých senzorov.

Schéma pripojenia senzorov:

    Zariadenie využíva senzory typu SMT160-30. Sú to integrované obvody na meranie teploty. K svojej činnosti potrebujú iba napájacie napätie +5V. Ich výstupom je digitálny signál o frekvencii cca 3kHz (1÷4kHz), ktorého strieda je priamo úmerná teplote. Ich výhodou je: iba 3-vodičové pripojenie, digitálny výstup, veľká dĺžka pripojenia (podľa výrobcu až 20m). Na zrealizovanie teplomera potrebujeme iba senzory teploty, prívodné vodiče, konektor CANNON15 (samec s krytom), príp. ochranné poistky. Samotná schéma zapojenia je na nasledujúcom obrázku. Vidíme, že teplomer je veľmi jednoduchý. Výhodou pripojenia na Game port počítača je prítomnosť napájacieho napätia +5V, čím vylúčime potrebu externého napájania. Poistky chránia toto napájanie pred prípadným skratom a sú umiestnené priamo v kryte konektora CANNON15 (aby sme si náhodou nepokazili zvukovú kartu!).
Schéma 4-kanálového teplomera:

Thermometer schematic
a jeho fyzické prevedenie:

Princíp činnosti:

Senzory teploty SMT160-30 dávajú na výstup signál, ktorého strieda je priamo úmerná teplote. Tento signál je privedený na vstupné piny Game portu, ktoré slúžia ako vstupy pre tlačítka joysticku. Obslužný program sníma tento signál (jeho striedu) a vyhodnotí ho ako teplotu senzora podľa kalibračných konštánt (linearita a offset). Keďže výstupná frekvencia zo senzorov je relatívne veľká, sú kladené vyššie nároky na matematické výpočty a rýchlosť snímania, čo rieši softvér.


Funkcie obslužného programu:

    Softvérové vybavenie je vlastne srdcom celého teplomera. Základná obrazovka zobrazuje teplotu jednotlivých senzorov a umožňuje nastavenie meracích parametrov. Zaškrtnutím políčok si môžeme zvoliť, ktoré teploty senzorov budeme merať. Môžeme si zvoliť interval medzi dvomi meraniami, integračný čas jedného merania a koľko posledných hodnôt sa bude priemerovať (kĺzavý priemer). Zvýšením integračného času zvyšujeme presnosť merania. Zvýšením počtu priemerovaných teplôt opäť zvyšujeme presnosť merania, ale súčasne aj zavádzame dolnopriepustný filter na meranú teplotu (potlačíme prudké zmeny teploty). Ak senzor teploty nie je prítomný, program to automaticky zistí.

Main window About window 

    Je možné aj zmeniť pomenovanie jednotlivých senzorov (napr. aby sme mali predstavu o mieste merania). Mená senzorov si môžeme zvoliť nasledujúcim postupom: Presunieme sa myšou alebo klávesnicou (tabulátorom alebo šípkami) na zvolený senzor tak, aby bol okolo neho tenký rámik. Potom stlačíme klávesu F2, čím sa políčko zafarbí na modro a sme v editovacom režime. Teraz môžeme zadávať meno senzora. Editáciu mena ukončíme klávesou F2 (alebo Enter, príp. Esc).
Change sensor name
    Program umožňuje aj kalibráciu jednotlivých senzorov. Od výrobcu majú obvody SMT160-30-92 zaručenú presnosť cca 1°C v teplotnom rozsahu -30÷100 °C, ale je možné to vylepšiť zmenou sklonu a posunutím prevodovej krivky. Linearitu senzora totiž výrobca zaručuje max. 0.2÷0.4 °C , čo je vlastne dosažiteľná presnosť merania po kalibrácii. Pri menšom teplotnom rozsahu (napr. izbové teploty) je možné dosiahnuť presnosť 0.1°C, čo je veľmi dobrý výsledok. Pre kalibráciu slúži v programe samostatné okno. Tu zadáme skutočnú teplotu (meranú napr. veľmi presným teplomerom) a teplotu meranú našim senzorom. Môžeme kalibrovať samostatne offset alebo linearitu (vtedy zadávame iba jeden pár teplôt), alebo môžeme urobiť úplnú kalibráciu z dvoch teplôt (napr. pri 0°C a 100°C). Nakalibrované hodnoty sa uložia do "ini" súboru.

Calibration window


    Program je možné minimalizovať do systémového menu (príkazom "Hide" z kontextového menu, kliknutím na ikonu v systémovom menu alebo klávesou "Esc") a opätovne ho vyvolať. Ako bublinku v systémovom menu program zobrazí teplotu prvého senzora. Ak v systémovom menu klipneme stredným tlačítkom, tak sa nám teplota zobrazí (rozvinie) do systémového menu (nefunguje ak máte driver na kolečko myši). Kontextové menu je možné vyvolať aj kliknutím na ikonu v systémovom menu pravým tlačítkom myši.

System tray temperature in system tray


    Program má aj zvukový výstup. Povie nám teplotu daného senzora, ak na ňu klipneme v kontextovom menu. Ak si chcete upraviť hlasový výstup na vašu reč (alebo jazyk), stačí ak si nahráte "wav" súbory s číslovkami v adresári "\Sound".

Context menu


    Pre meracie a výskumné účely program umožňuje zaznamenávať teploty do súboru. Súbor má formát CSV a je ho možné otvoriť v programe Microsoft Excel. V Exceli si môžete vyniesť časový priebeh teplôt senzorov. Je vhodné si pri vytváraní grafu v Exceli nastaviť formát času na hh:mm:ss.00 (prvý stĺpec) a dátumu na dd:mm:rrrr (druhý stĺpec). Záznam do súboru spustíme z kontextového menu a rovnakým spôsobom ho aj zastavíme.

Options Save As window


    Pre sledovanie teploty v určitých medziach slúži okno Alerts , kde si môžeme nadefinovať horné a dolné hranice teplôt. Prekročenie týchto hraníc pre daný senzor hlási program dvoma spôsobmi. Môže sa nám zobraziť do popredia okno, alebo sa nám rovno povie cez zvukovú kartu daná teplota na detekovanom senzore (zvukový výstup vo formáte: "alert" "sensorX" "has" "<number>" "grades", napr. "pozor prvý teplomer má 35.41 stupňov"). Toto oznamovanie sa deje v intervale 30-tich sekúnd. Ak sú prekročené medze u viac senzorov, tak sa oznamujú cyklicky (pričom prednosť má vyššia teplota).

Alerts window

    Program si pamätá posledné nastavenia a kalibráciu v "ini" súbore (stav pri ukončení programu), takže ak chceme použiť inú sériu senzorov, musíme vymeniť vzhľadom na kalibračné údaje tento "ini" súbor. Hlavné okno programu sa pri presunutí k okraju obrazovky samo "prichytí" tohto okraja (napr. ako okno Winampu). Ak chceme spustiť program minimalizovaný, tak ho ukončíme tiež minilalizovaný (cez kontextové menu "Exit" na ikone v systémovom menu). Ak sa pri pokuse o zatvorenie programu robí záznam teplôt do súboru, program nás na to upozorní (aby sme si náhodou neporušili meranie) - a pri následnom spustení sa spýta na možnosť opätovného záznamu.
Ak chcete vidieť tento teplomer aj v okne "Device manager" (zatiaľ však iba pod Windows9x), stačí si ručne pridať nový hardware a naviesť k súboru \GamePortTemp\INF\GameTemp.inf :
 "ControlPanel"-"Add New Hardware"-"Next"-"No the device isn't in the list"-"Next"-"No, I want to select the hardware from a list"-"Sound, video and game controllers"-"Next"-"Have Disk"-"Browse"-"<...\GamePortTemp\INF\GameTemp.inf>"-"OK"-"OK"-"Finish". Potom sa v okne "Device manager" zobrazí zariadenie Temperature Monitor on Game port tak, ako je to na nasledujúcich obrázkoch. Toto nemá vplyv na funkčnosť programu a je to urobené iba pre estetiku (a pre dokázanie si, že aj to sa dá  ;-) ).

Thermometer in Device Manager  Thermometer properties page (Device Manager)


Požiadavky na systém:
    Funkcie programu boli odskúšané na operačných systémoch Windows9x a Windows XP (teda program by mal fungovať aj pod WindowsNT/2000/XP - teda aspoň s administratorskými právami). Program vyžaduje procesor aspoň Pentium/AMD-K6 a vyšší (nespustí sa na procesore 486 - vypíše oznam). Testovaný bol na konfiguráciách od Pentium 150MHz bez MMX až po Pentium 1000MHz (takže všetko čo je vyššie než 486). Program si sám zistí prítomnosť Game portu v počítači a bez neho sa nespustí. Program je možné spustiť aj viacnásobne - ale pri jeho násobnom spustení sa Vás na to spýta.

Ukážka nameraných grafov:

    Na nasledujúcich obrázkoch je ukážka merania priebehu teploty v byte. Senzory boli položené spoločne na pracovnom stole pri okne v tvare štvorca tesne pri sebe (vzdialené cca 1cm). Teplota sa snímala od rána do večera (čas je na osi x). Z grafu jasne vidieť, že citlivosť senzorov je skutočne dobrá (snímalo sa každé 2 sekundy s integračnou dobou 30ms a priemerovaním 10-tich posledných hodnôt).
Senzory, keďže boli pri sebe, ukazovali zhodne doobeda približne rovnaké teploty. Na začiatku grafu vidieť ranné vetranie - pokles teploty a opätovný nárast. Okolo 14-tej hodiny zrazu teplota prudko vzrástla pri súčasnej nezhode teplôt senzorov. Senzory sa navzájom "rozišli" v teplotách po pároch. Po poklese teploty sa senzory opäť dostali na spoločnú teplotu. Tento graf ma tiež prekvapil - tak som skúmal prečo to tak bolo a tu je vysvetlenie:
    Senzory boli položené na pracovnom stole pri okne. Bol slnečný zimný deň a o 14.00 sa tieň z naproti stojaceho domu dostal mimo senzorov - preto ten nárast teploty. Ale prečo sa senzory navzájom rozišli? Pretože boli tesne vedľa seba a dva predné senzory zakrývali svojím tieňom dva zadné. Ostrý pokles a opätovný nárast teploty v strede grafu bol spôsobený tieňom okrasnej mriežky na okne, ktorý je tenký a preto jeho prechod trval krátko. Pokles teploty po 15-tej hodine bol pozvoľnejší než nárast, lebo pracovný stôl je čierny a vyhrial sa pôsobením slnečných lúčov. Na konci grafu je vidieť i náš príchod domov z práce - mierny nárast teploty (po zväčšení tohto detailu grafu na druhom obrázku je jasne viditeľný nárast o 0.2 °C).

Temperature during day

Temperature during day - zoomed end of measurement

Download:

    Uvedený program je pre nekomerčné použitie freeware (ale keby sa Vám extra páčil môžete mi prispieť - venoval som tomu dosť času - a hlavne tá idea...). Je možné si ho stiahnuť z internetu : ako zbalený archív GamePortTemp.zip (alebo verzia 0.95 pre monitoring teploty počítača: GamePortTempPC.zip). Tento archív obsahuje balík súborov, ktoré stačí nakopírovať do ľubovoľného adresára. Ak si chcete upraviť hlasové výstupy na svoju reč, stačí vymeniť súbory v adresári "Sound" za Vaše (ten môj hlas nie je bohviečo ;-) ).
  Uvedené senzory SMT160-30 je možné kúpiť v GM-electronic  http://www.gme.sk (alebo http://www.gme.cz) za cenu cca 150,-Sk (alebo 100,-Kč). V Bratislave je predajňa na Budovateľskej ulici č.27 a v poslednom čase sa veľmi polepšili - isto Vám poradia.

  Informácie o poslednej verzii:
verzia: 0.96 (DLL 0.72)
zmeny oproti predchádzajúcim verziám:
v0.8   - základná verzia pre Windows9x/ME
v0.81 - podpora WindowsXP/NT/2000
v0.83 - odstránenie kozmetických chýb a chyby nemožnosti kalibrácie vo WindowsXP/NT/2000
v0.84 - možnosť pomenovania senzorov
v0.85 - odstranený problém načítania kalibrácie z INI súboru (ak ste mali ako desatinný oddeľovač čiarku)
v0.86 - odstranený problém detekcie neštandardného umiestnenia Creative SoundBlaster v systéme, odstránený problém logovania dlhých časov (nad 1 minútu)
v0.87 - odstránený problém dlhých meracích intervalov pod Windows XP, rozšírenie rozsahu intervalu merania na 1milión sekúnd (999 999 999 milisekúnd - teda cca 11 dní)
v0.88 - odstránený problém nespoľahlivého zavedenia drivera pod Windows XP (niekedy pri štarte programu bol potrebný opätovný reštart)
v0.89 - odstránený problém nedetekovania SoundBlaster Live (zmena iba v DLL)
v0.90 - možnosť pokračovania v meraní aj po zobudení počítača z hibernácie (v minulých verziách bol potrebný reštart programu)
v0.91 - možnosť automatického logovania do súboru uvedeného ako parameter v príkazového riadku
v0.92 - zmenená DLL knižnica : zabudovaný HTTP server poskytujúci teplotu na web stránke. Stačí zadať na ľuboloľnom počítači v sieti do browsera http://<IPaddress> príp. http://<computername> alebo (ak to beží lokálne) http://localhost a stránka \DLL\GameTemp.htm sa vykoná interným webserverom (nahradia sa teploty). Pre viac informácii si pozrite súbor \DLL\GameTemp.htm . Môžete si vyrobiť viac webstránok - html súborov  potom je dotaz v tvare http://<IPaddress>/<filename>.
v0.93 - malá úprava ohľadom desatinnej čiarky v HTTP serveri
v0.93 (DLL 0.72) - pridaná podpora v DLL knižnici na inicializáciu z INI súboru (kalibračné údaje a parametre HTTP servera)
v0.95 - na podnet Vlastimila Jirečka pridaná podpora shutdown počítača pri prekročení teploty (a zápis prvých troch teplôt do "TempLCD.txt"), vhodné na meranie teploty komponentov počítača (link:Luxusní, nádherná a jedinečná dřevěná Case)
v0.96 - na podnet Vlastimila Jirečka zmenený formát súboru "TempLCD.txt" - teraz sa zapisujú č teploty na každý riadok samostatne (ako čisté čísla bez ďalších znakov - vhodné pre posielanie teploty na externý LCD displej pomocou obslužného software)

Zdrojové kódy:

    Pre veľký záujem zo strany užívateľov (a moju zaneprázdnenosť odpovedať na veľa otázok záujemcov) zverejňujem všetky zdrojové kódy programu: DLL knižnica aj aplikácia.
    Knižnica DLL "GameTemp.dll" je jadrom systému a obsahuje základné funkcie na meranie teploty a kalibráciu senzorov. Aplikácia využíva funkcie z tejto DLL knižnice a sprístupňuje užívateľovi grafické rozhranie. Kto chce može si urobiť vlastnú aplikáciu využívaním DLL knižnice (iba 5 základných funkcií). V DLL knižnici je zabudovaný aj HTTP server - takže ju stačí iba otvoriť inou aplikáciou a HTTP server bude fungovať.
Zdrojové kódy (spolu s binárnymi súbormi) si môžete stiahnuť ako zbalený balíček GamePortTempSources.zip .

Internetové odkazy:

[1] datasheet ku SMT160-30
[2] http://www.cesko.host.sk - sekcia Hardware alebo Software
[3] http://www.gme.sk , http://www.gme.cz - GM-electronic : predaj senzorov SMT160-30
[4] môj e-mail : cesko@internet.sk

Obsah:

Úvod
Pripojenie senzorov
Princíp činnosti
Obslužný program a jeho funkcie
Ukážka nameraných grafov
Download
Zdrojové kódy

Odkazy

autor: Ing. Igor Češko:
         homepage: www.cesko.host.sk
         e-mail: cesko@internet.sk