Monitoring temperatury w Linuksie

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

Hardware

AuthorImage:[Here we need a little image from you]

Stefan Blechschmidt

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in de Stefan Blechschmidt 

de to en Jürgen Pohl

en to pl Mirosław Majka

AboutTheAuthor:[A small biography about the author]

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.

Abstract:[Here you write a little summary]

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.

ArticleIllustration:[One image that will end up at the top of the article]

title image

ArticleBody:[The main part of the article]

Komponenty

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

Sensor pinout        Sensor picture
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.

Inne komponenty

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 --------

Projekt interfejsu

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ę :-).


wykres obwodu


deska z przodu               deska z tyłu

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.

Obwód interfejsu szeregowego

Dla naszego obwodu interfejsu potrzebne są tylko połączenia czujnika, łącze VDD może być usunięte. Ja je po prostu odciąłem :-).

nie użyty pin

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  

Instalacja oprogramowania

Oprogramowanie jest dostępne jako archiwum tar, można je zainstalować w następujący sposób:

 tar -xvzf digitemp-1.3.tar.gz
w 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/ttyS0
zał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 : 1092214400080089
Zauważ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

Przystosowywanie systemu

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.

Automatyczne pomiary

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.log
inicjuje 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.

Komentarz na zakończenie

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.

Do pobrania

Linki / Opinie