|
|
Stefan Blechschmidt <sb/at/sbsbavaria.de> O Autorze: Będąc elektrykiem zostałem posadzony przed monitorem stacji roboczej CAD w celu rozwijania pewnego przełącznika i stacji kontroli. Najwyraźniej zaraziłem się wtedy nieznanym "wirusem" i dobrze mi z tym. Translated to English by: Mirosław Majka <mirek/at/ozimek.net.pl> Zawartość: |
Monitoring temperatury w LinuksieNotka:
Serwery linuksowe sprawują się odpowiedzialnie i bezpiecznie,
nie potrzebują specjalengo nadzoru, po prostu działają, działają i działają... Ale co się dzieje, kiedy małemu pingwinkowi zaczyna być za gorąco? Ostatnie lato nam nieźle pokazało: powinniśmy sprawić naszemu małemu przyjacielowi system monitoringu temperatury. Ten artykuł pokaże Wam jak zainstalować właśnie taki system za cenę ok. 10 Euro. |
Brian C.Lane napisał program dla czujnika temperatury DS1820 from DALLAS Semiconductor Nie jest trudno złożyć omawiany system kontroli temp. przy użyciu dwóch takich komponentów i kilku innych części.
Uwaga:
Brian C.Lane zmodyfikował swoją stronę i zaprzestał rozwijania wersji użytej w tym artykule. Możesz zatem ściągnąć ją stąd:
digitemp-1.3.tar.gz
Ci z Was, którzy chcą użyć aktualnej wersji digitemp-3.2.0.tar.gz mogą pobrać ją z http://www.digitemp.com/software.shtml
.
Czujnik został oryginalnie wyprodukowany przez DALLAS Semiconductor,
która to fimra została wcielona do Maxim/Dallas Semiconductor.
Zgodnie ze specyfikacją, czujnik może mierzyć temperaturę w zakresie od -55°C do 125°C. Dane pomiarowe są generowane jako cyfrowy sygnał długości 9 bitów. Dodatkowo, każdy czujnik posiada 64 bitowy numer I.D., który pozwala podłączyć więcej czujników. Możliwe jest użycie stu czujników na złączu długości 300 metrów.
Obwód, który tutaj prezentujemy będzie działał tylko z dziesięcioma czujnikami na złączu 60 - metrowym. Obecnie używam czterech czujników na ok. 12 - metrowym złaczu.
Możesz znaleźć więcej informacji na temat samego czujnika w Specyfikacji.
Chciałbym dodać, żę obwód prezentowany tutaj może mierzyć maksymalną temperaturę w wysokości 75°C, co powinno być adekwatne dla naszego zastosowania.
Aby móc podłączyć czujnik do interfejsu szeregowego potrzebujemy kilku dodatkowych skladników. Znajdziesz je w większości sklepów detalicznych z częściami elektronicznymi, w internecie lub (najlepiej) w sklepie elektronicznym tuż za rogiem.
Ilość | Identyfikator | Typ | Typ alternatywny |
---|---|---|---|
1 | Opornik | 1,5 k Ohm | -------- |
2 | Dioda Schottky | 1N5818 | BAT 43 |
1 | Dioda Zener | 1N5228 | ZPY 3,9V |
1 | Dioda Zener | 1N5234 | ZPY 6,2V |
1 | Czujnik | DS18S20 | -------- |
1 | Gnizdko, Szeregowe | RS232C/9 | -------- |
1 | Powłoka łącznika | SUB-D/9 | -------- |
1 | Deska do krojenia chleba | Papier laminowany | -------- |
Obwód interfejsu jest stosunkowo łatwy do skonstruowania, więc wybrałem deskę do krojenia chleba jako podstawę. Przepraszam za moją mało spójną pracę :-).
Przy odrobninie umiejętności komponenty mogą zostać zainstalowane we wtyczce interfejsu szeregowego.
Uwaga
Na tej stronie LinuxNetMag
możemy znaleźć artykuł o digitemp, jak również i forum opisujące obwód przystosowany do pomiarów większych niż 75°C. Osobiście jeszcze nie testowałem ów obwodu.
Dla naszego obwodu interfejsu potrzebne są tylko połączenia czujnika, łącze VDD może być usunięte. Ja je po prostu odciąłem :-).
Oto tabela obwodu karty interfejsu, czujnika i interfejsu szeregowego.
Opis | DB-25 | DB-9 | Czujnik |
DTR | 20 | 4 | Data (PIN 2) |
RXD | 3 | 2 | GND (PIN 1) |
TXD | 2 | 3 | |
GND | 1 and 7 | 5 |
Oprogramowanie jest dostępne jako archiwum tar, można je zainstalować w następujący sposób:
tar -xvzf digitemp-1.3.tar.gzw aktualnym katalogu.
W nowo zainstalowanym katalogu
digitemp1-3
znajduje się kod źródłowy,
dokumentacja i kilka skryptów Perla, jak również pliki binarne
digitemp
, które mogą zostać użyte od razu.
Jeśli digitemp
jest wywoływany bez parametrów, wtedy zobaczysz przegląd możliwych opcji.
DigiTemp v1.3 Copyright 1997-99 by Nexus Computing Usage: digitemp -s<device> [-i -d -l -r -v -t -p -a] -i Initalize .digitemprc file -s/dev/ttyS0 Set serial port -l/var/log/temperature Send output to logfile -f5 Fail delay in S -r500 Read delay in mS -v Verbose output -t0 Read Sensor # -a Read all Sensors -d5 Delay between samples (in sec.) -n50 Number of times to repeat -o2 Output format for logfile -o"output format string" See description below Logfile formats: 1 = One line per sensor, time, C, F (default) 2 = One line per sample, elapsed time, temperature in C 3 = Same as #2, except temperature is in F #2 and #3 have the data seperated by tabs, suitable for import into a spreadsheet or other graphing software. The format string uses strftime tokens plus 3 special ones for digitemp - %s for sensor #, %C for centigrage, %F for fahrenheight. The case of the token is important! The default format string is: "%b %d %H:%M:%S Sensor %s C: %.2C F: %.2F" which gives you an output of: May 24 21:25:43 Sensor 0 C: 23.66 F: 74.59
"Pomoc" podpowiada, że zainstalowane czujniki muszą zostać zainicjowane. Dlatego musimy zdefiniować interfejs, do którego nasz obwód jest podłączony, jak również parametry początkowe.
Polecenie
digitemp -i -s/dev/ttyS0załatwia to. W tym przypadku obwód interfejsu jest podłączony do pierwszego portu szeregowego.
Oprogramowanie wykrywa czujniki, wiadomość podobna do tej powinna się pojawić:
DigiTemp v1.3 Copyright 1997-99 by Nexus Computing ROM #0 : 1032724700080086 ROM #1 : 1092214400080089Zauważamy, że program wykrył 2 czujniki. Dodatkowo w aktualnym katalogu zostaje utworzony plik
.digitemprc
, który będzie zawierał dane o czujnikach, interfejsie i formacie danych wyjściowych.
Poleceniem ./digitemp -a
możemy przeczytać dane wyjściowe czujnika. Proszę zauważyć znak
./
, nadal jesteśmy w katalogu, ktory nie jest częścią zmiennej $PATH, czyli miejsc, gdzie powłoka szuka plików wykonywalnych.
Dane wyjściowe pomiaru
DigiTemp v1.3 Copyright 1997-99 by Nexus Computing Sep 24 21:53:35 Sensor 0 C: 37.94 F: 100.29 Sep 24 21:53:38 Sensor 1 C: 10.62 F: 51.129
Aby zintegrować nasz program z systemem, musimy dokonać kilku poprawek.
Najpierw musimy skopiować plik binarny
digitemp
w miejsce, które pozwala na uruchomienie go bez redefiniowania ścieżki. Ja wybrałem /usr/local/bin/
dla tego celu. Ci, którzy nie są pewni co do ścieżki, mogą to sprawdzić poleceniem echo
$PATH
. Ponadto, plik
.digitemprc
z danymi inicjacyjnymi powinien zostać skopiowany do katalogu domowego użytkownika, który będzie dokonywał pomiarów. Aby zapisywać dane do pliku a nie na terminal, przełącznik -l[PATH/FILE NAME]
powinien zostać użyty.
Teraz przydałoby się zautomatyzować nasze pomiary. Dobrze wypróbowany
cron powinien spełnić swoją rolę. Poprzez crontab -u [USER]
-e
możemy ustawić to dla każdego użytkownika. Wpis w /etc/crontab
0-59/15 * * * * /usr/local/bin/digitemp -a -l/var/log/digitemp.loginicjuje digitemp aby ten mierzył temperaturę co 15 minut i aby zapisywał wyniki do
/var/log/digitemp.log
.
Poleceniem tail /var/log/digitemp.log
możemy sprawdzić ostatnie linijki pomiarów. Jeśli plik
/var/log/digitemp.log
nie jest generowany,
proszę sprawdzić prawa dostępu do plików.
Archiwum tar zawiera kilka skryptów Perla do graficznej interpretacji wyników. Nie będę ich tutaj opisywał. Myślę nad napisaniem kolejnego artykułu o tym jak zbierać dane czujników w bazie mySQL i jak interpretować je poprzez stronę www.
Taką sztuczkę można osiągnąc dzięki Perlowi używająć funkcji mySQL, CGI, graphic.
|
Strona prowadzona przez redakcję LinuxFocus
© Stefan Blechschmidt, FDL LinuxFocus.org |
tłumaczenie:
|
2003-10-28, generated by lfparser version 2.43