Temperaturmessung mit dem Raspberry Pi – 1wire

Der Raspberry eignet sich dank seinem geringen Stromverbrauch perfekt für Mess-, Steuer- und Regelungsaufgabe im privaten Bereich. Sehr beliebt sind eigene Wetterstationen mit Temperaturmessung. Einen leichten Einstieg im Bereich Wetterstation erreicht man bei Verwendung von 1-Wire-Temperatursensoren. Sie sind relativ günstig und leicht zu installieren.

1-Wire Temperatursensoren

1-Wire Temperatursensoren sind günstig und leicht zu installieren. Gerade bei Anfänger sind sie sehr beliebt, da man schnell Erfolge erzielt. 1-Wire-Sensoren benötigen neben GND nur eine Datenleitung. Neben der Datenübertragung wird auch die Stromversorgung über diese Datenleitung geregelt. Ein weiterer Vorteil dieser Technik ist, dass alle Sensoren einfach an diese Datenleitung angeschlossen werden müssen. Die Verbindung arbeitet seriell und bidirektional. Es wird also über die Datenleitung gesendet und empfangen. Da man nur eine Datenleitung und GND zur Verfügung hat, arbeitet der 1Wire-Bus asynchron, also ohne Taktleitung. Je nach Topologie lassen sich bis zu 100 Sensoren ansteuern. Die Ansteuerung erfolgt über eine 64-Bit-ROM-ID, somit ist jeder Sensor eindeutig identifizierbar. Wer mehr Infos haben möchte, dem empfehle ich den Wikipedia-Eintrag.

Es gibt im Grunde drei unterschiedliche Typen von 1-Wire-Temperatursensoren. Der DS18S20, DS18B20 und der DS1822. Sie sind untereinander Anschluss- und Softwarekompatibel. Der Unterschied besteht lediglich in der Qualität der Messung und dem Preis (Stand Januar 2016).

SensorMessspanne und GenauigkeitAuflösungPreis € / Stück
DS18S20-55°C bis +125°C
+-0,5% von -10°C bis +85°C
9 Bit2,35 €
DS18B20-55°C bis +125°C
+-0,5% von -10°C bis +85°C
9 - 12 Bits (programmierbar)1,80 €
DS18B22-55°C bis +125°C
+-2% von -10°C bis +85°C
9 - 12 Bits (programmierbar)-

Natürlich bekommt man bei Ebay oder Amazon günstiger an die Sensoren. Aber eventuell mit (sehr) langen Lieferzeiten. Die DS18xx-Sensoren kommen in einem T0-92 Gehäuse und besitzen neben den eigentlichen Temperatursensor einen AD-Wandler und ein 1-Wire Interface, welches auch eine parasitäre Stromversorgung ermöglicht. Der Anschluss der Sensoren kann also durch zwei verdrillte Leitungen erfolgen. Das Verdrillen ist besonders bei langen Leitungen sehr wichtig. Möchte man Temperaturen im Bereich von über 70°C messen, dann sollte man jedoch auf die parasitäre Versorgung verzichten und die Sensoren mit einer extra Stromversorgung zwischen 3V und 5V versorgen, was eine dritte Leitung benötigt.

 Anschluss am Raspberry Pi

Ein 1-Wire-Bus kann durch mehrere Möglichkeiten an den Rapsberry angeschlossen werden:

  1. Direkter Anschluss an einem GPIO-Pin: Diese Möglichkeit ist die Möglichkeit mit dem geringsten Aufwand. Es wird keine zusätzlich externe Beschaltung benötigt. Der Nachteil ist jedoch, dass der Bus direkt an den empfindlichen GPIOs hängt. Bei langen Leitungen kann dies zur Zerstörung des Raspberrys kommen.
  2. Verwendung der I²C-Schnittstelle: Durch Verwendung eines I²C zu 1-Wire Adapters (z.B. DS2483) sieht diese Möglichkeit nach eine sehr simplen Lösung aus. Durch der SMD-Bauweise kann es jedoch kompliziert sein, mit einem solchen Adapter zu arbeiten. Auch ist nicht gewährleistet, dass das verwendete Betriebssystem dies unterstützt.
  3. Verwendung der internen seriellen Schnittstelle: Es wird ein aktiver Seriell zur 1-Wire Adapter benötigt (z.B. DS2480B). Auch hier muss dann wieder SMD gelötet werden und es wird eine 5V Spannungsversorgung benötigt.
  4. Einsatz eines fertigen USB-Busmasters. Hierbei ist keine weitere Lötarbeit mehr nötig. Der Anschaffungspreis kann jedoch schnell den Preis des Raspberrys übertreffen.
  5. selbstgebastelter USB zu 1-Wire Adapter: Kauf eines billigen USB-Seriell Wandlers und Selbstbau eines Seriell zu 1-Wire Adapters

Wie man sieht, gibt es viele Möglichkeiten die alle ihre Vor- und Nachteile haben. Ich habe mich für den Selbstbau eines USB zu 1-Wire Adapters entschieden, welche ich euch hier vorstellen möchte.

USB zu 1-Wire Adapter

Der USB zu 1-Wire Adapter besteht im Grunde aus zwei in Reihe geschaltete Adapter. Zu einem ein USB-Seriell und zum Anderen ein Seriell-1wire-Adapter.

USB-Seriell-Adapter

Für meinen Adapter habe ich mir bei Amazon einen einfachen USB-Seriell-Adapter  besorgt.

Angebot
Ugreen 2m USB auf RS232 Seriell Adapter USB Seriell...
  • USB auf DB9 Seriell Druckerkabel hilft Ihnen Serielle Geräte wie DB9 Seriell Geräte zu verbinden, es ermöglicht es jedem PC, serielle Geräte(RS232,DB9) und System anzuschließen.Wie PCs ,Router,GPS,Barcode-Scanner,Strichcode Maschines, serielle Modems , Digitalkameras , Kartenleser, Handfläche PCs, Mobiltelefone , PDAs, oder ISDN- Terminaladapter über USB-Port .
  • USB auf RS232 Seriell Adapterkabel Unterstützt für Datenrate bis zu 1 Mbps.Erkennt USB Suspend Zustand.
  • USB DB9 Adapterkabel mit PL2303 Chipsatz unterstützt für Windows 10/ 8.1 / 8/ 7 / Vista / XP / 2000 und Mac OS X 10.6 und mehr;

Letzte Aktualisierung am 3.12.2016 / Affiliate Links / Bilder von der Amazon Product Advertising API

Beim Kauf sollte man darauf achten, dass er unter Linux arbeitet und als Chip den Prolific Chip PL2303 verwendet, da das zuständige Kernelmodul pl2303 bereits Bestandteil von Raspbian „Debian“ ist.

Nachdem man den Adapter an eine freie USB-Schnittstelle des Raspberrys angeschlossen hat, sollte bereits im Systemlog entsprechende Meldungen auftauchten.

Ausschnitt Systemlog:

Systemlog-USB-Seriell

Wie man sieht, wurde der Adapter erfolgreich erkannt. Zusätzlich erhält man die Information, dass die Ansteuerung des Adapters über das Devicefile /dev/ttyUSB0 erfolgt. Dieser Pfad wird später bei der Konfiguration der Software benötigt. Bevor man jedoch damit starten kann, müssen wir erstmal den Seriell-1wire-Adapter bauen.

Seriell-1wire-Adapter

Der Seriell-1wire-Adapter ist relativ simpel im Aufbau. Es beruht auf den OWFS-DS9097. Lediglich 5 Bauteile und der passende Stecker werden dafür benötigt:

  • 1 Z-Diode 6,2V
  • 1 Z-Diode 3,9V
  • 2 Schottky-Dioden 1N5818
  • 1 Widerstand 1,5kΩ
  • 1 D-Sub Buchse 9 polig
  • 1 D-Sub Kappe mit seitlicher Kabelzuführung

Schaltbild:Anschluss1wire

Mit etwas Geschick bekommt man die Elektronik in das Gehäuse des D-Sub-Steckers. Die im Schaltplan eingezeichneten wireadapterTemperatursensoren werden dann mit einer verdrillten 2-adrigen Leitung außerhalb des Gehäuses angeschlossen. Hierbei wird auf extra Stecker verzichtet, die Sensoren werden direkt an die Leitungen angelötet. Zusätzliche Sensoren werden dann einfach parallel auf dem Bus geschaltet. Die maximale Kabellänge hängt von vielen Faktoren ab. In meinem Setup arbeiten 4 Sensoren bei einer Bus-Länge von ca. 20m zuverlässig.

Temperaturmessung mit der Software digitemp

Nachdem man die Hardware fertiggestellt hat, kann man sich an die Software machen. Um mit den Sensoren arbeiten zu können, benötigt man die Software DigiTemp. Mit folgendem Befehl kann man diese installieren:

Mit diesem Paket kann man unterschiedliche Bus-Master ansteuern. Für jeden Bus-Typ gibt es unterschiedliche ausführbare Programme. Für den DS9097 ist digitemp_DS9097 zuständig.

Sollte man mehrere USB-Geräte angeschlossen haben, muss das USB0 entsprechend angepasst haben. In unserem Fall haben wir jedoch durch dmesg festgestellt, dass der Adapter unter USB0 geführt wird.

Der 1-Wire-Bus wird nun gescannt:

wireBusSensoren

Durch den Parameter -i wurde im aktuellen Arbeitsverzeichnis eine Datei mit dem Namen .digitemprc erstellt. Diese Datei enthält die IDs der Sensoren, so dass man nur bei Anschluss neuer Sensoren den kompletten Bus erneut scannen muss.

Die Messwerte der Sensoren lässt sich nun wie folgt abrufen:

Man erhält nun die Sensoren mit deren Messwerten:wireBusSensorenWerte

Wenn alles wie gewünscht klappt, kann man nun die Sensoren und deren Lötverbindungen mit Schrumpfschlauch schützen und die Temperaturmessung kann beginnen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*