Open Source im professionellen Einsatz

© photocase.com

Temperatursensoren mit Perl auslesen

Ist das nicht cool?

Mit Linux hängt der kreative Bastler relativ leicht selbst gebaute Hardware an seinen Rechner. Dieser Snapshot vermittelt an einem Beispiel Grundlagen dafür und infiziert mit Lötkolbenfieber.

Es ist noch gar nicht so lange her, da musste man noch Device-Treiber schreiben, um exotische Eigenbau-Hardware anzusteuern. Seit aber USB-Hotplugging im 2.6er Kernel anstandslos funktioniert, geht alles viel einfacher. Der in der folgenden Beispielanwendung verwendete Temperaturfühler DS18S20 [3], hergestellt von der Firma Dallas Semiconductor, ist über einen so genannten One-Wire-Bus anzusteuern, den wiederum ein im Rechner steckender USB-Dongle betreibt. Die unter [2] frei erhältliche OWFS-Steuerungssoftware fragt die Daten über eine Perl-Schnittstelle ab.

Statt One-Wire sollte der Bus allerdings besser Two-Wire heißen, denn zwei dünne Kupferkabel (meist in einer einzigen Umhüllung) gehen vom Sensor zum USB-Dongle (siehe Abbildung 1). Am anderen Ende des Kabels findet sich ein Telefonstecker (RJ11), der sich in den USB-Dongle einklicken lässt. Den erwähnten Temperatursensor gibt es im einschlägigen Elektronikfachhandel für wenige Euro zu kaufen (zum Beispiel 4,50 Euro bei [http://www.conrad.de]). Er ist zwischen -55°C und +125°C einsetzbar. Der One-Wire-USB-Dongle DS9490R, an den der Bastler mit den handelsüblichen Telefon-Mehrfachsteckern viele Sensoren zugleich hängen kann, schlägt mit etwa 15 bis 25 Dollar zu Buche (zum Beispiel bei Hobby-boards.com).

Das OWFS-Projekt [2] auf Sourceforge bietet eine Reihe von Schnittstellen an, um die Temperaturwerte der Sensoren auszulesen. Eine davon nutzt das User-Filesystem Fuse und bildet die Sensordaten auf das Filesystem ab, ähnlich der »/proc«-Hierarchie in Linux. Abbildung 2 zeigt, wie ein Dongle mit zwei Sensoren sich dem Benutzer präsentiert: Nicht nur die ausgelesenen Temperaturwerte sind verfügbar, sondern auch noch eindeutige IDs der Sensoren, deren Typbezeichnung und vieles mehr. In den kleinen Transistor-ähnlichen Gehäusen steckt nämlich ein winziger Microcontroller, der einiges auf dem Kasten hat.

Ablesung

Die Werte der Messstationen liest ein einfacher »cat«-Befehl aus den Dateien, die Abbildung 2 verwendet allerdings »perl -ple1«, um ein Newline anzuhängen. Unter dem Eintrag »10B2A7C7000800/temperature« findet sich der vom ersten Sensor gemessene Wert: 22,8125°C. Der zweite Sensor mit der ID »10.E0E3C7000800«, der in einer Winternacht in San Francisco draußen hing, misst hingegen kühlere 14,4375°C (in Kalifornien wird es selten richtig kalt). Unter dem Eintrag »type« steht die Typbezeichnung des Fühlers (DS18S20), damit sich über die Programmierschnittstelle herausfinden lässt, welche Sorte Sensor mit dem One-Wire-Bus verbunden ist. Der Hersteller Dalles bietet alles Mögliche an, darunter auch Schalter, Spannungs- und Strommesser.

Lötkolben anheizen

Der USB-Dongle hat als Eingang eine Telefonbuchse. Um die Sensoren dort einzuhängen, muss ich vorher noch jeweils ein langes Kabel mit einem abschließenden Telefonstecker an die Beinchen der Temperaturfühler anlöten. Am einfachsten geht das, indem ich von einem normalen Telefonverlängerungskabel mit Steckern an beiden Enden einen der Stecker brutal mit einer Zange abzwacke. Dann muss ich noch die äußere Hülle des Kabels abisolieren. Dabei kommen entweder zwei oder vier dünne Drähte zum Vorschein.

Ich benötige nur das rote und das grüne Kabel, die restlichen dürfen einer Kneifzange zum Opfer fallen. Der Temperaturfühler hat drei Beinchen, von denen das ganz rechts (wenn man das Gehäuse mit der abgeflachten Seite nach vorne ansieht und die Beinchen nach unten zeigen) überflüssig ist. Es dient dazu, dem Fühler extra Spannung zuzuführen, aber der begnügt sich auch damit, Strom aus der Datenleitung zu stehlen [8].

Mit einer Zange zwicke ich also das rechte Fühlerbeinchen ab und bereite das Telefonkabel mit drei Schrumpfschlauchstücken vor (Abbildung 3). Später erhitze ich die Schlauchstücke vorsichtig, was sie elegant zusammenschmurgeln lässt, um dem Fühler ein einigermaßen Wohnzimmer-kompatibles Aussehen zu verleihen.

Das grüne innere Telefonkabel löte ich danach ans linke Bein des DS18S20, das rote kommt ans mittlere (Abbildung 4). Dann fahre ich mit dem Lötkolben nahe an den zwei roten inneren Schrumpfschläuchen entlang, worauf diese einschrumpfen und so die abisolierten Drahtstücke umschließen. Falls sie nicht weit genug schrumpfen, hilft ein Stück Isolierband, sie so zu befestigen, dass sie sich nicht berühren und einen Kurzschluss verursachen.

Anschließend führe ich das dickere (gelbe) Schrumpfschlauchstück vor, bis der Sensor nur noch leicht rausspitzelt, und lasse den Schlauch sich unter der Lötkolbenhitze zusammenziehen. Abbildung 5 zeigt den fertigen Fühler, dessen Telefonstecker entweder direkt im Dongle Platz findet oder aber - falls gleichzeitig mehrere Sensoren zum Einsatz kommen - über einen Mehrfachstecker (Abbildung 6).

Zu Testzwecken lasse ich nun einen Sensor im Zimmer und führe den anderen durchs Fenster ins Freie. Das OWFS-Projekt liefert mit dem Modul »OW« eine generische Perl-Schnittstelle mit, die das Modul »OWTemp.pm« (siehe Listing 1) auf die konkret verwendeten Temperaturfühler zuschneidet.

Abbildung 1: Die Temperatursensoren sind über den One-Wire-Bus mit dem USB-Dongle verbunden.

Abbildung 1: Die Temperatursensoren sind über den One-Wire-Bus mit dem USB-Dongle verbunden.

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook