original in de Stefan Blechschmidt
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.
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.
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 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.
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 | -------- |
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 :-)
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.
Bei unserer Schnittstellenschaltung benötigen wir nur 2 Anschlussbeine des Sensors, der Anschluss VDD kann entfernt werden. Ich habe ihn einfach abgezwickt :-).
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 |
Die Software wird als TAR Archiv angeboten und kann mit dem Befehl:
tar -xvzf digitemp-1.3.tar.gzim 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/ttyS0erledigt 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 : 1092214400080089Man 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
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.
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.logbringt 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.
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.