Archiv pro měsíc: Květen 2015

Digitální teploměr venkovní teploty

Digitální venkovní teploměrV tomto příspěvku vám přiblížím teploměr s prehistorickým typem mikrokontroléru a stejně prehistorickým digitálním čidlem. I když je čidlo možná i starší než samotný mikrokontrolér, narozdíl od něj se stále vyrábí a těší se velké popularitě mezi bastlíři. Prozradím tedy použitý typ, jedná se o čidlo firmy Maxim-Dallas (dříve Dallas Semiconductors) typu DS18B20. Mikrokontrolér je typu PIC16F84A od firmy microchip.

Teoretický rozbor

Samotné teplotní čidlo je ryze digitální a komunikuje po speciální sběrnici 1-Wire vyvinuté v Dallasu. Sběrnice má několik výhod a pak hromadu nedostatků. Mezi výhody patří například možnost napájení podřízených zařízení z linky, použití jediného vodiče pro komunikaci, systém adres na principu sériových čísel, která se nemohou nikdy zopakovat a jsou vždy jedinečná. Mezi nevýhody patří právě systém adres, kdy při více zařízeních na sběrnici je mikrokontrolér nucen si ukládat 6bajtové sériové číslo a kritickým časováním, které nesmí být narušeno třeba přerušením, protože zařízení jsou ze sběrnice také napájena a úroveň log. 0 delší než předepsaný čas způsobí reset všech zařízení a návrat protokolu na začátek.

Použité přístroje

Tolik k samotné sběrnici, teď se trochu zaměřím na senzor. Ten poskytuje až 12bitovou přesnost teploty v rozmezí -55 až +125 °C. Přesnost si uživatel může zvolit v rozmezí 9 až 12 bitů. Větší přesnost znamená delší převod. Teplota je po dokončení převodu k dispozici ve dvojkovém doplňku (tedy ve formátu signed char) a desetinné místo s rozlišením až 0,0625. Více informací lze nalézt v datasheetu integrovaného obvodu.

Mikrokontrolér je typu PIC16F84A, už v roce 2010, kdy jsem teploměr navrhoval, to byl výběhový typ s minimem paměti a bez jakýchkoli periferií. Nemá ani sériový port. Pyšní se „obrovskou“ programovou pamětí – 1024 instrukcí a ještě větší RAM – 68 bajtů.  Použil jsem jej jen proto, že se mi nechtělo kupovat nový a chtěl jsem najít „odbytiště“ pro takové historické monstrum.

Schéma zapojení

Schéma zapojení teploměruZapojení se zobrazí po kliknutí na obrázek. Myslím si, že snad ani není co popisovat. Mikrokontrolér, displej, tranzistory, čidlo a stabilizátor. Všechno potřebné tam je, nic víc. Teploměr je napájen z 9 V baterie, která mimo stadium 100 % nabití dává napětí kolem 7 V, takže byl zvolen nízkoúbytkový stabilizátor LF50.

Displej je „co šuplík dal“, tedy VQE se společnou anodou od soudruhů z NDR. Sežere strašně moc proudu, ale má příjemnou barvu. Díky velké spotřebě jsem nakonec musel vynechat zakreslené omezovací rezistory v katodách, aby bylo aspoň něco vidět. Nepočítá se tedy s trvalým chodem, protože mikrokontrolér musí dodávat proudy až 200 mA, což je na hranici maximálních hodnot daných výrobcem.

Osazená deska teploměruTranzistory ovládající společné anody displeje pro multiplexování jsou typu BS250, což je MOSFET s kanálem P. V tomto zapojení funguje jako tranzistor PNP. Tehdy jsem byl MOSFET tranzistory okouzlen a chtěl jsem je použít všude. V této konstrukci jsem však zjistil, že pro tyto účely jsou tranzistory MOSFET nevhodné. Jejich cena je oproti běžně používaným typům bipolárních tranzistorů příliš vysoká a parametry nejsou nějaké oslňující. Navíc se na ně musíte pořád usmívat, jinak se prorazí izolační vrstvička malým nábojem statické elektřiny.

Konstrukce

Rozmístění komponentů v krabičce teploměruSamotná konstrukce a umístění teploměru je patrné z obrázků kolem textu. Při výměně oken za plastová jsme umístili husí krk do omítky a připravili jsme tak cestu pro kabel k čidlu. Ten je třížilový (není využito napájení po sběrnici) běžného typu CYSY 3×0.75. Teploměr je v elektroinstalační krabici na omítku, čemuž je také přizpůsoben tvar desky plošného spoje. Nahoře je tlačítko, kterým se připojuje napájení z baterie. Některé součástky jsou přiletovány ze strany spojů, protože by se nevešly mezi kryt krabičky a DPS.

Desku plošného spoje jsem nechal vyrobit ve firmě MARPOS, kde byli moc ochotní a mám s nimi dobré zkušenosti. Jejich pracovní doba se kryje s normální pracovní dobou, takže byl trošku oříšek vyzvednout zakázku osobně, nakonec se to však povedlo. Desky jsou v dobré kvalitě i bez masky, viz fotky. To byl počátek konce výroby desek plošných spojů na koleně. O výrobě DPS se ještě zmíním v samostatném článku.

Program

Původní program z roku 2010 je napsán v assembleru a zabral přibližně čtvrtinu paměti (něco kolem 300 instrukcí). V květnu 2015 jsem program inovoval již v C a program fungující úplně stejně zabíral po přeložení přibližně 62 % paměti. Samozřejmě ve free překladači bez optimalizace. Po optimalizaci by byl kód samozřejmě menší ale ne o moc. Protože se v Cčku mnohem snadněji dělají psí kusy, vymyslel jsem progress bar a jinou indikaci chyb při komunikaci s čidlem. Nakonec program zabral 72 % paměti a byl jsem rád, že se mi to tam všechno vešlo. Ovšem naprogramované a oživené to bylo během jednoho odpoledne narozdíl od assembleru, kde bych každou chybu hledal týden.

V předchozí verzi programu v assembleru mikrokontrolér čekal na dokončení převodu, zatímco na displeji byla „tma“ a do zobrazení výsledku (teploty) tedy nikdo nevěděl, jestli je napájení zapnuto, nebo jestli je baterie vybitá atd. Proto jsem v nové verzi programu vymyslel „progress bar“, který na displeji během převodu zobrazí běhající pomlčku. Uživatel tak vidí, že teploměr je v činnosti a probíhá měření teploty. Pokud se čidlo neozve (např. z důvodu přerušeného vodiče), zobrazuje se střídavě nápis Err a rES jako zkratka názvů Error – Reset pulz bez odezvy. Pokud došlo k chybě při komunikaci a je zjištěn nesprávný kontrolní součet (jiskření tlačítka, elmag. rušení, …), zobrazuje se střídavě Err a CrC jako zkratka Error při výpočtu CRC.

Závěr

Teploměr v provozuTeploměr je v každodenním provozu a zcela úspěšně odolává útokům všech členů domácnosti, kteří dychtí po venkovní teplotě. S přesností jsem spokojen, čidlo je umístěno kousek od omítky, takže asi není ovlivňováno teplem sálajícím přes zdi (v zimě) a po většinu dne je ve stínu. Změřená teplota tedy v naprosté většině případů odpovídá tomu, jak venku je a je proto cenným ukazatelem, jak moc se na zimu (vedro) venku psychicky i fyzicky připravit.

Přibližně po pěti letech mačkání přestalo fungovat tlačítko, takže nejspíš byl vyčerpán počet spínacích cyklů. Baterii je nutné vyměnit přibližně jednou za rok, možná méně, protože si nepamatuji, kdy jsem ji naposledy měnil.