wtorek, 2 lutego 2010

Rejestracja temperatury aka po co kupiłem SheevaPlug

Do podłączenia czujników temperatury DS18B20 firmy Dallas (kupionych za ca 5 PLN/sztuka na Allegro) dokupiłem -- też na Allegro -- Moduł 1Wire na USB, chipset DS2480B + FT232RL, który jest ,,Od strony programowej zgodny z konwerterami opartymi na układach DS2480B, czyli np. z oryginalnymi interfejsami serii DS9097 firmy MAXIM-DALLAS z tą różnicą, że interfejs podłączamy do portu USB zamiast portu szeregowego RS232 [...] Do konwersji ze standardu RS232 na USB zastosowano układ FT232RL firmy FTDI''. Więcej szczegółów można doczytać tutaj (Kod produktu: MP00202).

zdjęcie
Zdjęcie #1
zdjęcie
Zdjęcie #2
zdjęcie
Zdjęcie #3
zdjęcie
Zdjęcie #4

Teraz uwaga: czujnik DS18B20 ma trzy nogi (aka piny). Skrajne łączę i dolutowuję do jednej żyły (brązowej) przewodu telefonicznego a środkowy do drugiej (żółtej); dwie pozostałe żyły są niepotrzebne. [Kolory oczywiście nie są ważne; podaję je na swój prywatny użytek, gdybym za jakiś czas chciał rozbudować instalacją i dolutować kolejny sensor.] Ponieważ DS18B20 jest bardzo mały, to żeby piny się nie stykały izoluję każdą żyłę cienką rurką termokurczliwą (por. zdjęcie #1, umieszczone obok). Żeby ładniej wyglądało, ale przede wszystkim żeby połączenie czujnik-kabel było mocniejsze (żyły są bardzo cienkie) to na cały przewód naciągam szerszą rurkę (por. zdjęcie #2) i też zgrzewam (por. zdjęcie #3). Zgrzewam zapalniczką....

Moduł MP00202 nie łączę bezpośrednio z przewodem telefonicznym, bo żyły są tak cienkie że wolę zrobić to na dwa pas. Krótki dwużyłowy przewód elektryczny lutuję z żyłami kabla telefonicznego, po czym wzmacniam połączenie naciągając rurkę termokurczliwą. Dużo grubsze żyły kabla elektrycznego znacząco pewniej tkwią w stykach modułu MP00202. Nota bene: żyłę dolutowaną do skrajnych pinów należy połączyć z górnym stykiem, a tą drugą ze stykiem obok (dwa dolne styki są niewykorzystane; por. rys. #4).

Ostatecznie połączyłem równolegle 4 czujniki: pokój, tzw. weranda, kaloryfer i jeden zewnątrzny. Tzn. najpierw podłączyłem jeden i testowałem czy toto w ogóle działa. Ale to tak na marginesie...

Do rejestracji temperatury korzystam z programu digitemp:


sheeva> apt-get install digitemp

Konkurencyjny owfs.org nie jest dostępny w repozytoriach, zaś jego kompilowanie w wersji na SheevaPlug nie jest prostą sprawą. Z kolei digitemp nie działa out of the box, przynajmniej z tą wersją kernela, która była zainstalowana w moim komputerku... Sheeva ma ,,odchudzoną wersję'' kernela -- bez wielu modułów, w tym modułu ftdi_sio do obsługi konwertera USB→Serial, FT232R. Że coś jest nie ten-teges świadczy brak /dev/ttyUSB0. O tym wszystkim zaś doczytałem tutaj.

Nową wersję jądra, zawierającą stosowny moduł ściągnąłem i zainstalowałem z http://sheeva.with-linux.com/sheeva/:


sheeva> wget http://sheeva.with-linux.com/sheeva/README-2.6.32.7

Uwaga #1: po zainstalowaniu jądra niezbędne są zmiany środowiska Uboota (U-Boot environment variables) -- co trzeba zrobić jest opisane na początku pliku README-2.6.32.7. Aby zainstalować jądro wystarczy:


sheeva> ./README-2.6.32.7

Uwaga #2: jeżeli na ekranie pojawi się /bin/bash: bad interpreter: Permission denied, to sprawdźmy (uruchamiając mount bez argumentów) czy aby nie uruchomiamy skryptu w systemie plików montowanym z parametrem noexec.

Jak wszystko pójdzie dobrze (mi poszło) to teraz należy zaktualizować U-Boot environment variables. W tym celu należy połączyć się z SheevaPlug kablem z wtyczkami USB/miniUSB, wyłączyć komputerek, a po włączeniu połączyć się szybciutko poleceniem:


## jeżeli nie ma /ttyUSB1 spróbuj inny /ttyUSB*
cu -s 115200 -l /dev/ttyUSB1

Naciskając dowolny klawisz (należy się spieszyć) spowodujemy wyświetlenie się znaku zachęty U-boota. Wtedy należy wpisać, to co podano w README-2.6.32.7 (lub stosownym innym pliku jeżeli skopiowana była inna wersja jądra). Mówiąc konkretnie wpisać trzeba (działam metodą kopiuj wklej oczywiście; znak ↓ na końcu wiersza oznacza kontynuację):


setenv mainlineLinux yes
setenv arcNumber 2097
setenv bootargs rootfstype=jffs2 console=ttyS0,115200 mtdparts=orion_nand:0x400000@0x100000(uImage),↓
0x1fb00000@0x500000(rootfs) rw root=/dev/mtdblock1 ↓
rw ip=192.168.1.9:192.168.1.4:192.168.1.4:255.255.255.0:DB88FXX81:eth0:none

Teraz


saveenv
reset

Reset nie reboot, por. tutaj. Powinno się pojawić urządzenie /dev/ttyUSB0 (jeżeli podłączymy moduł MP00202 oczywiście). Zatem wreszcie:


sheeva> digitemp_DS9097U -a -i -s/dev/ttyUSB0

Program wypisze coś w stylu:


DigiTemp v3.5.0 Copyright 1996-2007 by Brian C. Lane
GNU Public License v2.0 - http://www.digitemp.com
Turning off all DS2409 Couplers
.....
Searching the 1-Wire LAN
10E8EF98010800E6 : DS1820/DS18S20/DS1920 Temperature Sensor
105C1C990108005A : DS1820/DS18S20/DS1920 Temperature Sensor
1029400102080084 : DS1820/DS18S20/DS1920 Temperature Sensor
1065259901080056 : DS1820/DS18S20/DS1920 Temperature Sensor
ROM #0 : 10E8EF98010800E6
ROM #1 : 105C1C990108005A
ROM #2 : 1029400102080084
ROM #3 : 1065259901080056
Wrote .digitemprc
Feb 02 20:18:08 Sensor 0 C: 17.75 F: 63.95
Feb 02 20:18:09 Sensor 1 C: 20.50 F: 68.90
Feb 02 20:18:10 Sensor 2 C: 43.81 F: 110.86
Feb 02 20:18:11 Sensor 3 C: -4.94 F: 23.11

Temperaturę rejestruję uruchamiając digitempa co godzinę, via crontaba:


##0 * * * * /usr/bin/digitemp_DS9097U -a -l/media/sd/tomek/logs/Digitemp/digitemp.log -s/dev/ttyUSB0
0 * * * * /home/tomek/bin/dt2ht.sh

Skrypt dt2ht.sh uruchamia digitemp_DS9097U (w sposób jaki podano w zakomentowanym wierszu wyżej) a następnie skryptem Perla obrabia plik /media/sd/tomek/logs/Digitemp/digitemp.log do formatu HTML. Wynik można obejrzeć tutaj. Uwaga #3: aby ,,zwykły'' użytkownik mógł uruchomić digitempa trzeba zmienić domyślne prawa dostępu do /dev/ttyUSB0:


cat 'KERNEL=="ttyUSB0", MODE="0666"' >> /etc/udev/rules.d/80-ttyusb.rules

Popularne jest wykorzystanie do graficznej prezentacji programu RRDTool, na co się -- póki co przynajmniej -- nie zdecydowałem. Przy okazji zmagań z termometrami zwiedziłem różne strony i blogi, niektóre całkiem interesujące (porządek linków dowolny): 1234567.

Bez Google ale i Piotra Strzelczyka, który wcześniej się okazało już coś takiego zlutował nie dałbym rady...

Dopisane 25 marca 2010 (Rozbudowa instalacji): Dokupiłem kabel energetyczny (dwużyłowy), bo na zewnątrz budynku przewód telefoniczny wydaje się za delikatny. W tym kablu jedna żyła jest niebieska a druga brązowa. Skrajne lutuję do niebieskiej, a środkowy do brązowej.

1 komentarz:

  1. System mapowania temperatury wykorzystywany jest również w produkcji zrywności. Więcej ciekawych informacji na ten temat można przeczytać w artykule http://technologia-zywnosci.pl/mapowanie-temperatury-w-autoklawie/.

    OdpowiedzUsuń