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.

Sale
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 21.10.2017 / 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.

dmesg

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:

sudo apt-get install digitemp

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.

digitemp_DS9097 -i -s /dev/ttyUSB0

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:

digitemp_DS9097 -a

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.

Hinterlasse einen Kommentar

2 Kommentare auf "Temperaturmessung mit dem Raspberry Pi – 1wire"

Benachrichtige mich zu:
avatar
Fotos und Bilder
 
 
 
sonstiges Dateiformat
 
 
 
Sortiert nach:   neuste | älteste | beste Bewertung
Bodo
Gast
Bodo
Hallo Daniel, nachdem ich den USB/Seriell-Adapter angeschlossen habe, bekomme ich unter Raspbian den Adapter wie beschrieben unter /dev/ttyUSB0 angezeigt. Wenn ich fhem dann starte hängt sich das System allerdings auf und ich bin nun auf Fehlersuche. lt. Log: 2017.03.22 21:31:14 1: Including fhem.cfg 2017.03.22 21:31:14 3: telnetPort: port 7072 opened 2017.03.22 21:31:14 3: WEB: port 8083 opened 2017.03.22 21:31:14 3: WEBphone: port 8084 opened 2017.03.22 21:31:14 3: WEBtablet: port 8085 opened 2017.03.22 21:31:14 2: eventTypes: loaded 115 events from ./log/eventTypes.txt 2017.03.22 21:31:15 3: Opening OWXSerial device /dev/ttyUSB0 2017.03.22 21:31:15 3: Setting OWXSerial serial parameters to 9600,8,N,1 2017.03.22 21:31:15 3: OWXSerial… weiterlesen »
wpDiscuz