original in de Stefan Blechschmidt
de to en Jürgen Pohl
en to pl Mirosław Majka
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.
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.