Termometr na USB

Dawno temu byłem zafascynowany prostym układem DS18S20, który działa za pośrednictwem 1-wire i umożliwia dokładny odczyt temperatury przez komputer. Schematów podłączenia przez RS-232 była masa, koszt układu niewielki. Jedyne co powstrzymywało mnie wtedy przed uruchomieniem to… brak realnej potrzeby.

Potem sytuacja się zmieniła – port szeregowy zaczął w komputerach zanikać, a mnie coraz bardziej interesowała
temperatura z wbudowanych czujników (płyta główna, dyski), a nie temperatura otoczenia. Były co prawda schematy jak to podłączyć przez USB, ale w stosunku do pierwowzoru rósł i poziom skomplikowania, i koszt.

Niedawno pojawiła się potrzeba (no dobra, powiedzmy, że potrzeba, bardziej pretekst), więc odświeżyłem temat.
Okazało się, że istnieją tanie moduły PL2303HX USB UART, a także nieco nowsza wersja cyfrowych termometrów, oznaczona symbolem DS18B20. Różnica między wersjami w sumie pomijalna, z perspektywy tego wpisu. Każda z tych rzeczy to ok. 6 zł z dostawą (Allegro), a podłączenie jest jeszcze prostsze i nie
wymaga żadnych dodatkowych elementów, jak widać na schemacie.

Do odczytu temperatury służy digitemp. Opis użycia (zaczerpnięty stąd).

Instalacja pakietu:

apt-get install digitemp

Skanowanie układów:

digitemp_DS9097 -i -s /dev/ttyUSB0

Odczyt wartości:

digitemp_DS9097 -a

Bardziej zależało mi na sprawdzeniu, czy taka prosta wersja faktycznie będzie działać – w wielu miejscach podawane są bardziej skomplikowane schematy. Faktycznie, działa. Rozwiązanie zlutowane na krótko, bez żadnego przewodu ma jednak tę wadę, że moduł PL2303HX grzeje się na tyle, że wpływa na odczyt temperatury. Myślę, że ok. 10 cm kabla załatwi temat, ale gdyby ktoś był zainteresowany to można pomyśleć od razu o kupnie nieznacznie droższej wersji wodoodpornej, z przewodem. Mi akurat zależało żeby kabel się nie pałętał, ale wersję z kablem można zawsze skrócić…

Oczywiście gdyby ktoś chciał całkiem nowocześnie, to teraz czujniki temperatury montuje się do ESP8266 i odczytuje po WiFi. Tyle, że w moim wypadku to niewygodne – problem z zasilaniem, a dane i tak mają trafić do pełnoprawnego komputera, ew. do SoC z Linuksem.

Gdyby ktoś bał się, że blog skręca całkiem w tematy elektroniczne – bez obaw, będzie najwyżej parę wpisów i raczej w ramach wspomnienia o czymś, niż jako podstawowa tematyka.

Zasilaczowe perypetie cz. 1 – zasilacz do laptopa Dell

Na urlopie któregoś wieczora włączyłem laptopa (Dell Vostro 1440), a ten powitał mnie przy starcie komunikatem, że nie rozpoznał zasilacza. Dałem kontynuuj i myślałem, że na tym się skończy, ale szybko stwierdziłem, że to za mało. Laptop działał, ale bateria się nie ładowała. Dodatkowo, procesor działał z najniższym możliwym taktowaniem, czyli odpowiednik trybu powersave. Niezbyt komfortowe, delikatnie mówiąc. Sprzęt ma swoje lata (dokładnie pięć) i choć nie był zbyt intensywnie używany, to na urlopie po prostu wrzucałem zasilacz do plecaka, więc stwierdziłem, że może gdzieś się kabel złamał.

Próbowałem poruszać kablem w co bardziej newralgicznych miejscach, ale bez rezultatu. Ponieważ wiedziałem, że zasilacz jest sprawny, postanowiłem poczytać o wewnętrznej żyle, służącej do sygnalizacji. Z innych zabaw z zasilaczami do laptopów wiedziałem, że jest tam obecne napięcie. Liczyłem, że to tylko prosty dodatek i jest zmostkowane z plusem. Postanowiłem zapytać znajomych, czy tak jest faktycznie. Gdyby tak było, to plan był następujący – wziąć wtyczkę i gniazdo i zrobić przedłużacz, który jednocześnie będzie mostkował plus z tą wewnętrzną żyłą.

Niestety, szybkie rozpytanie i rzut oka w wyszukiwarkę ujawniły, że jest to nieco bardziej skomplikowane: wewnętrzna żyła służy do komunikacji 1-wire zasilacza z laptopem. Natomiast sama usterka faktycznie jest popularna. Na tyle, że można kupić gotowe kable do przylutowania w zasilaczu. Tyle, że wspomniana przejściówka byłaby wielokrotnego użytku i prostsza w montażu…

Postanowiłem zmodyfikować podejście i zobaczyć, czy da się tani zrobić oszusta, czyli przedłużacz jak wyżej, ale udający zasilacz. Czyli trzeba by doczytać o komunikacji 1-wire na linii zasilacz-laptop i układach, które ją realizują. Już rozmyślałem, kto ze znajomych ma oscyloskop, ale sprawa okazała się o wiele prostsza. Ktoś już sprawdził komunikację, opisał format, a nawet zamieścił kod źródłowy i schematy. Tutaj znajdziecie cykl bardzo interesujących wpisów nt. komunikacji laptopów Dell z zasilaczami (oczywiście po angielsku) oraz repo GitHub. Jak widać autor również wpadł na pomysł przejściówki, tyle, że motywowany nieco inną potrzebą.

A jak się sprawa zakończyła u mnie? Nie zależy mi na debugu i zabawie, więc powyższe rozwiązanie nie bardzo ma sens ekonomiczny. Stosowne chipy do komunikacji 1-wire co prawda nie są drogie, bo – jeśli dobrze pamiętam – wychodziło ok. 2 zł za sztukę, ale w paczkach po 5-10 sztuk i przy sprowadzaniu z Chin. Dodatkowo trzeba jeszcze je zaprogramować, programator jest dość drogi, a nikt posiadający takie urządzenie nie przychodził mi do głowy.

Ponieważ korzystanie z laptopa na najniższym taktowaniu było zauważalnie męczące, nie bylem pewny, czy uda mi się otworzyć zasilacz w taki sposób, że złożę go z powrotem, a także nie miałem pewności, czy faktycznie chodzi o kabel, czy też może o uszkodzony układ do komunikacji, szybko kupiłem zastępczy zasilacz oraz… dwa kable. Planuję spróbować zreanimować stary zasilacz przez wymianę kabla – przy odrobinie szczęścia na parę lat starczy, a przejściówka… może innym razem. Kable dwa, bo od sprzedawcy zasilacza, więc wysyłka gratis, a kosztowały niecałe 5 zł za sztukę.

Przy okazji: otworzyć zasilacz do laptopa można wkładając nóż w szczelinę i delikatnie pukając w niego młotkiem. Sposób jest niestety inwazyjny, bo są one klejone – po naprawie trzeba albo skleić klejem (wersja trwała/ładna), albo złożyć i brzydko skleić taśmą z wierzchu.