7 stycznia 2010

Termometr i BSD

Już od dłuższego czasu przymierzałem się do spożytkowania w jakiś sposób mojego terminala Sumo ST166, który udało mi się zdobyć za całkiem dobrą sumę.
Mając na uwadze obecnie panujące temperatury na zewnątrz, których bądź co bądź do życia codziennego znajomość jest przydatna - zdecydowałem aby zbudować termometr na bazie tego właśnie terminala.

Moja przygoda z ST166 zaczęła sie już jakiś czas temu, kiedy zdecydowałem się na jego zakup, już z zamysłem zainstalowania na nim mojego ulubionego systemu z rodziny *BSD: NetBSD. Domyślnie terminal funkcjonował na Windows CE, jego zmiana nie przysporzyła wiele problemów, sprowadziło się to na zamianie nośnika z dedykowanej pamięci flash na adapter ATA <-> Compact Flash. Z początku obawiałem się jak rozwiążę połączenie pomiędzy adapterem a zminiaturyzowanym złączem ATA, lecz problem szybko się rozwiązał po tym jak znalazłem idealnie pasującą tasiemkę w starym laptopie marki EPSON. Karta CF, jaką zastosowałem ma pojemność 2GB, co w zupełności wystarcza na rozszerzoną opcję instalacji NetBSD, sama instalacja systemu przebiegła bardzo sprawnie i bezproblemowo.


Z racji tego, że terminal wyposażony jest jedynie w pory USB, musiałem wymyśleć w jaki sposób podłączyć do niego czujnik temperatury DS1820 na szynie 1-Wire. Rozwiązań można znaleźć wiele, lecz w większości są to interfejsy na port szeregowy, którego nie posiadam. Postanowiłem więc spróbować pogodzić ze sobą czujnik z konwerterem USB <-> RS232 na bazie układu Prolific PL-2303 służący do komunikacji pomiędzy komputerem a telefonem komórkowym nie wyposażonym w port USB. Z racji tego, że po stronie portu szeregowego tego konwertera transmisja odbywa się w standardzie TTL, musiałem wymyśleć układ który pełnił by rolę "sterownika" pomiędzy czujnikiem. Natknąłem się na projekt w którym autor podłącza identyczny czujnik do routera Linksys WRT54, którego port działa w identycznym standardzie jak i mój konwerter. Schemat jest banalny, składa się jedynie z jednego tranzystora PNP i trzech rezystorów. Cały układ zlutowałem w pajączku i umieściłem w oryginalnej obudowie.
Całość prezentuje się następująco:

Sam czujnik został zabezpieczony klejem na gorąco przed zwarciem i korozją. Termometr zaczął działać zaraz po samym podłączeniu do komputera. Transmisja została przetestowana programem dostarczonym przez producenta:

Po wstępnych próbach, czas przyszedł na przetestowaniu gotowego termometru na maszynie z NetBSD, do tego celu znalazłem ciekawą aplikację Digitemp, docelowo stworzoną pod Linuksa, lecz dosięgłem informacji, że pod *BSD również powinna działać.

Na tym etapie niestety nie poszło już tak łatwo jak wcześniej, lecz w ostateczności udało mi się uporać z napotkanymi problemami. Dalsze perypetie z termometrem, gdzie postaram się przybliżyć całą część programową - opiszę w następnym wpisie, już wkrótce! :-)