Archiv pro rubriku: Bastlení obecné

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.

Výroba dálkového ovladače pro zrcadlovky Pentax

Celkový pohled na krabičku dálkového ovládáníKamarád vlastní zrcadlovku této značky a chtěl pořizovat snímky aniž by stál u fotoaparátu a mačkal spoušť. Jeho fotoaparát umožňuje jak připojení externí spouště kabelem, tak použití infračerveného ovladače. Pro daný účel bylo vhodnější vyrobit bezdrátový ovladač.

IR protokol PentaxInfračervený ovladač pracuje na principu modulování nosné frekvence (obvykle kolem 36kHz a se střídou 50%) vysílanými daty. Proto bylo nutno zjistit dvě věci. Jak frekvenci nosné, tak vysílanou sekvenci. Na jednom internetovém fóru byl nalezen obrázek, na kterém je uvedeno vše potřebné. Pro zvětšení na něj klikněte. Po několika pokusech bylo rozhodnuto, že tato posloupnost se bude neustále opakovat z důvodu možného použití režimu „Bulb“, tedy „jak dlouho držíš spoušť, tak dlouho se snímek exponuje“. Když se neopakovala, fotoaparát v režimu Bulb jen krátce cvakl závěrkou.

Schéma ovladačeSamotné zapojení vysílače nepotřebuje téměř žádný komentář. Je to výhradně baterie, procesor, tlačítko a dvě LE diody. Tlačítko přímo spíná napájecí napětí, protože spotřeba procesoru v režimu SLEEP není zanedbatelná a zbytečně by baterii vybíjela. Předřadné odpory pro LED jsou zvoleny podle jejich typu, pro IR led jsem odpor zkoušel i s ohledem na dosah vysílače. Bylo třeba jej zmenšit, aby byl dosah větší. Blokovací kondenzátor připojený na napájení procesoru se neosvědčil, protože procesor se po vypnutí napájení tlačítkem nedostal ihned do resetu, ale až po určitém čase. Na fotkách je proto patrné, že na ploškách není připájen žádný kondenzátor.

Program v procesoru je jednoduchý a byl ve své době napsán v Assembleru. Dnes bych už to asi psal v Céčku, ale program je velmi jednoduchý díky použití interního modulu PWM. Tento modul je na začátku programu nastaven na frekvenci odpovídající 38kHz, což je kmitočet nosné. Dále se již pracuje pouze se nastavením střídy a to na 50% pro vysílání (na obrázku protokolu oblast znázorněná jako „ON“) a 0% pro tmu (oblast „OFF“). Program je zacyklen do nekonečné smyčky a běží dokud je procesor pod napětím. Vždy na konci jednoho cyklu zapne červenou LED, což je potvrzení odeslání kódu. Dioda se zapne jen na 13 ms a během vysílání je vypnutá. Pravděpodobně jsem to tak udělal jednak kvůli omezení proudové spotřeby (port procesoru má limit na součet proudů ve všech vývodech) a jednak pro možnost, že by se program „ztratil“ (např. zákmitem tlačítka se procesor nemusí resetovat, ale může začít dělat „nesmysly“ místo vysílání – těmto nepříjemnostem bylo nakonec zabráněno odebráním výše zmíněného blokovacího kondenzátoru, avšak kontrola běhu programu byla ponechána). Pro zajímavost jsem objevil v počítači i verzi v C, která je podobně jednoduchá, avšak je to jeden z mých prvních programů v C, a proto jsou např. čekací smyčky napsány ještě v Assembleru. Program je k dispozici v podobě HEX souboru připraveného pro procesor PIC12F683 a v zipu najdete také obě verze programu ve dvou jazycích pro porovnání.

Dálkový IR ovladačFyzické provedení ovladače můžete vidět na obrázcích. Byla zvolena krabička, jež je běžně k mání v prodejnách s logem mamuta (nebo slona, podle vkusu). Po zakoupení krabičky bylo zjištěno, že je opravdu malá a nevejde se tam držák na baterii. Proto je lithiová baterie CR2032 zapájena do desky plošného spoje. Aby se deska uvnitř nepohybovala a po stlačení tlačítka se nezatlačila dovnitř, je na desce vylitý kousek lepidla z tavné pistole. V krabičce je z výroby vyvrtaná díra pro indikační LED. Dálkový IR ovladačPro IR diodu bylo třeba vyvrtat příslušný otvor vhodně umístěný na boku, aby se ovladač pohodlně držel při míření na fotoaparát. Samotná deska plošného spoje byla vyrobena fotocestou a všechny součástky jsou na straně spojů. LE diody mají ohnuté nožičky těsně u desky a jsou tak jednoduše upraveny pro povrchovou montáž bez vrtání. Pouze baterie je připevněna z druhé strany a připájena improvizovanými drátky. U procesoru jsou prodloužené plošky k programovacím vývodům, aby bylo možné procesor naprogramovat. Desku jsem nakreslil v programu Eagle. Pokud máte zájem o layout desky, napište mi na mail admin zavináč martin-uhlik.eu.

Malá zajímavost na závěr… Na internetu můžete narazit na podobný ovladač, jež si můžete zakoupit za krásně kulatou částku – jeden dolar. Pokud se vám nechce investovat vaše úspory přímo do Číny, podpořte domácí překupníky součástek zakoupením jednotlivých dílů v naší vlasti a sestavením právě popsaného ovladače.