[LinuxFocus-icon]
LinuxFocus article number 315
http://linuxfocus.org

Stefan Blechschmidt
von Stefan Blechschmidt
<sb/at/sbsbavaria.de>

Über den Autor:

Als gelernter Elektriker hat man mich 1990 vor einen CAD Arbeitsplatz gesetzt, um eine Schaltanlage zu planen. Anscheinend habe ich mich damals mit einem noch unbekannten Virus infiziert, und das ist gut so.

Temperaturüberwachung mit Linux

Titelbild

Zusammenfassung:

Linuxserver verrichten ihre Arbeit zuverlässig und sicher, somit schenkt man ihnen kaum Beachtung, denn sie laufen und laufen. Was aber, wenn es dem kleinen Pinguin zu heiß wird.
Der Sommer hat es uns gezeigt, also sollte wir unseren kleinen Freund eine Temperaturüberwachung schenken. Dieser Artikel soll dir zeigen, wie du eine solche, mit geringen Aufwand für ca. 10 €, bauen kannst.


_________________ _________________ _________________

 

Die Komponenten

Brian C.Lane hat ein Programm für den Temperatursensor DS1820 von DALLAS Semiconductor geschrieben. Mit diesen zwei Komponenten und einer Handvoll Bauteile ist es nicht mehr schwer, eine Temperaturüberwachung zu bauen.

Anmerkung
Brian C.Lane hat seine Seite umgebaut und bietet die Version, digitemp-1.3.tar.gz, die ich in diesem Artikel verwende, nicht mehr an.
Wer seine aktuelle Version digitemp-3.2.0.tar.gz verwenden möchte, kann sie sich von der Seite http://www.digitemp.com/software.shtml herunterladen.

 

Der Sensor

Sensor Anschlussübersicht               Sensor Bild
Der Sensor wurde ursprünglich von DALLAS Semiconductor hergestellt, die sich zu Maxim/Dallas Semiconductor zusammengeschlossen haben. Laut Datenblatt kann der Sensor Temperaturen von -55°C bis 125°C messen. Die Daten der Messung gibt er als digitales Signal mit einer Breite von 9 Bit aus. Außerdem besitzt jeder Sensor eine 64 Bit ID Nummer, so dass mehrere Sensoren an einer Schnittstellenschaltung (Bus) betrieben werden können. Man spricht hier von 100 Sensoren an einem Bus bis zu 300 Meter Länge.
Mit der hier vorgestellten Schaltung sollten aber nur 10 Sensoren an einem 60 Meterbus funktionieren. Ich betreibe zur Zeit 4 Sensoren an einem Bus mit ca. 12 Meter.

Mehr Infos über den Sensor findest du im Datenblatt.

Ausserdem möchte ich nicht verschweigen, dass mit der hier vorgestellten Schaltung nur Messungen bis 75 Grad möglich sind, das sollte aber für unseren Anwendungsfall reichen.

 

Die Bauteile

Um den Sensor an die serielle Schnittstelle anschließen zu können, brauchen wir noch ein paar zusätzliche Bauteile. Du bekommst diese bei den meisten Elektronikhändlern, im Internet oder noch besser bei deinem Elektronikladen in deiner Nähe.

Anzahl Bezeichnung Typ alter.Typ
1 Resistor 1,5 k Ohm --------
2 Schottky Diode 1N5818 BAT 43
1 Zener Diode 1N5228 ZPY 3,9V
1 Zener Diode 1N5234 ZPY 6,2V
1 Sensor DS18S20 --------
1 Buchse seriell RS232C/9 --------
1 Steckergehäuse SUB-D/9 --------
1 Lochrasterplatte Hartpapier --------
 

Aufbau der Schnittstellenschaltung

Da die Schnittstellenschaltung sehr einfach ist, habe ich mich für den Aufbau auf einer Lochrasterplatte entschieden. Sorry, an dieser Stelle für meine Lötkunst :-)


Schalplan


Platine - Vorderseite               Platine - Rückseite

Wer geschickt ist, bringt die Bauteile auch im Stecker der seriellen Schnittstelle unter.

Anmerkung
Auf der Seite LinuxNetMag findet man auch einen Artikel über digitemp, unter anderem aber auch ein Forum, in der eine Schaltung beschrieben wird, bei der Messungen über 75°C möglich sind. Die Schaltung wurde aber von mir noch nicht getestet.

 

Beschaltung der seriellen Schnittstelle

Bei unserer Schnittstellenschaltung benötigen wir nur 2 Anschlussbeine des Sensors, der Anschluss VDD kann entfernt werden. Ich habe ihn einfach abgezwickt :-).

Anschluss nicht genutzt

Nachfolgend eine Tabelle der Beschaltung zwischen der Schnittstellenkarte der Sensoren und der seriellen Schnittstelle.

Bezeichnung DB-25 DB-9 Sensor
DTR 20 4 Data (PIN 2)
RXD 3 2 GND (PIN 1)
TXD 2 3  
GND 1 und 7 5  
 

Installation der Software

Die Software wird als TAR Archiv angeboten und kann mit dem Befehl:

 tar -xvzf digitemp-1.3.tar.gz
im aktuellen Verzeichnis ausgepackt werden.

Im dem neuerstellten Verzeichnis digitemp1-3 befinden sich die Quelldateien, Beschreibung und einigen Perlscripts unter anderem aber auch die ausführbare Datei digitemp, die direkt verwendet werden kann.

Wird digitemp ohne Parameter aufgerufen, bekommt man eine Übersicht der Parameter zu Gesicht.

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

Wie uns die Hilfe zeigt, müssen wir die angeschlossenen Sensoren, diese können ja mehrere sein, initialisieren. Hierbei muss die Schnittstelle, an der unsere Schaltung angeschlossen ist, und der Parameter für die Initialisierung angegeben werden.

Der Befehl

digitemp -i -s/dev/ttyS0
erledigt das, wobei hier die Schnittstellenschaltung an der ersten seriellen Schnittstelle angeschlossen ist.

Die Software liest daraufhin die Sensoren aus, es erscheint eine Meldung ähnlich dieser:

DigiTemp v1.3 Copyright 1997-99 by Nexus Computing

ROM #0 : 1032724700080086
ROM #1 : 1092214400080089
Man kann hier erkennen, dass die Software 2 Sensoren gefunden hat. Zusätzlich wird im aktuellen Verzeichnis die Datei .digitemprc erstellt, in der die Daten über die Sensoren, der Schnittstelle und dem Ausgabeformat festgehalten werden.

Jetzt können wir mit dem Befehl ./digitemp -a alle Werte der Sensoren auslesen. Zu beachten sind hier die Zeichen ./, da wir uns immer noch in einem Verzeichnis befinden, das nicht in den aktuellen Suchpfad eingetragen ist.

Ausgabe einer Messung

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

 

Anpassung des Systems

Um das Programm in unser System zu integrieren, müssen noch ein paar kleine Anpassungen gemacht werden.

Zuerst sollte man die binär Datei, also digitemp, in ein Verzeichnis kopieren, in dem Programme ohne Pfadangabe ausgeführt werden können. Bei mir ist die Wahl auf /usr/local/bin/ gefallen. Wer sich unsicher ist, kann die Pfade mit echo $PATH auslesen. Ausserdem muss noch die Datei .digitemprc mit den Initialisierungsdaten in das Homeverzeichnis des Users kopiert werden, der die Messungen durchführt. Um die Messausgabe nicht auf der Konsole, sondern in einer Datei zu sichern, wird der Schalter -l[PFAD/DATEINAME] verwendet.

 

Messungen automatisieren

Jetzt fehlt uns noch, die Messungen zu automatisieren, was für uns der altbewährte cron erledigt. Mit crontab -u [USER] -e können wir Jobs für den jeweiligen User anlegen. Der Eintrag

0-59/15 * * * * /usr/local/bin/digitemp -a -l/var/log/digitemp.log
bringt digitemp dazu, alle 15 Minuten eine Messung durchzuführen und diese nach /var/log/digitemp.log zu schreiben.

Mit dem Befehl tail /var/log/digitemp.log können wir uns die letzten Zeilen der Messungen ansehen. Sollte die Datei /var/log/digitemp.log nicht erstellt werden, bitte auf die Dateirechte achten.

 

Schlusswort

Im Archiv sind noch einige Perlscripte zur grafischen Auswertung enthalten. Diese werde ich an dieser Stelle nicht beschreiben. Ich spiele mit dem Gedanken, in einem weiteren Artikel zu schreiben, wie man die Sensordaten in eine Datenbank mySQL bringt und diese dann über ein Webinterface auswertet.

Es wird dann hauptsächlich über Perl mit den Funktionen mySQL, CGI, Grafik gehen.

 

Download

 

Links / Referenzen



Der LinuxFocus Redaktion schreiben
© Stefan Blechschmidt
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Autoren und Übersetzer:
de --> -- : Stefan Blechschmidt <sb/at/sbsbavaria.de>

2005-01-14, generated by lfparser_pdf version 2.51