Temperatursensor DS18B20 am Raspberry

pids18b20Mit dem 1wire-Sensor DS18B20 lässt sich kostengünstig die Wassertemperatur messen. Er ist bereits ab 2-3€ verfügbar und kann recht einfach mit dem Raspberry verbunden werden. Diese Sensoren lösen nach und nach meine alten USB-Sensoren TEMPer1 ab, da diese bereits in die Tage gekommen sind. Zudem sind diese Module deutlich teurer als der DS18B20-Sensor. Das Anschließen sowie die Einrichtung am Raspberry wird in diesem Beitrag beschrieben.

 

 

[themify_box style=”rounded” ]In diesem Artikel verwendetes Zubehör

[/themify_box]

 

Grundsätzliches

Zunächst sei erwähnt, dass der DS18B20-Sensor über dem 1wire-Bus kommuniziert. Das stellt für die Himbeere kein Problem dar, jedoch gibt es einige Punkte zu beachten. Wenn mehrere 1wire-Sensoren angeschlossen werden sollen, geschieht dies immer über den gleichen GPIO-Port, weil im späteren Verlauf der Anleitung der GPIO Port 4 als 1wire-Bus konfiguriert wird. An der Himbeere sind grundsätzlich maximal 10 Geräte an diesem Bus nutzbar, wobei man sich mit acht Geräten auf der sicheren Seite bewegt, da sonst die 3,3V-Spannungsversorgung an ihre Grenzen stößt.

 

Sensoren verbinden

Sämtliche Sensoren teilen sich den GPIO-Port 4, sowie die Spannungsversorgung. Zwischen der 3,3V-Versorgung und Ground (GND) setzen wir einmalig einen 4,7K Ohm-Widerstand. Daraus ergibt sich folgendes Schaltbild:

 

DS18B20

 

Oder in einer alternativen Darstellung:

Schaltung blanko

 

 

 

Konfiguration

Nachdem der Sensor bzw. die Sensoren angeschlossen wurden, starten wir den Raspberry Pi. Raspbian bringt die notwendigen Treiber bereits mit, so dass hier kein Handlungsbedarf besteht. Jedoch müssen wir die entsprechenden Kernel-Module nachladen. Das geschieht manuell durch

modprobe w1-gpio
modprobe w1-therm

 

Wenn wir die entsprechenden Module beim Systemstart mitladen möchten, editieren wir die Datei “/etc/modules” und fügen folgende Zeilen hinzu:

w1-gpio
w1-therm

 

Falls auf dem System der device-tree aktiviert ist, müssen wir die Datei “/boot/config.txt” wie folgt ergänzen:

dtoverlay=w1-gpio,gpiopin=4

 

Alternativ kann der device-tree mit dem Tool “raspi-config” (am einfachsten unter “Advanced Options” => “Device Tree“) deaktiviert werden.

 

 

Sensoren auslesen

Nachdem der Raspberry neu gestartet wurde oder die Kernelmodule per Hand geladen wurden, prüfen wir nun, ob die Sensoren im System zur Verfügung stehen:

ls /sys/bus/w1/devices/

 

Wie wir im folgenden Screenshot erkennen können, wurden zwei Sensoren am Bus erkannt. Die Ordnernamen mit den Zahlen ist die jeweilige ID des Sensors und sollte für spätere Zwecke dokumentiert werden.

1

 

Nun schauen wir uns an, was uns die jeweiligen Sensoren mitzuteilen haben:

cat /sys/bus/w1/devices/ID_DES_SENSORS/w1_slave

 

Wie wir im folgenden Screenshot erkennen, erhalten wir eine Antwort des Sensors. Die letzten Ziffern (rot eingekreist) geben die gemessene Temperatur an, in diesem Fall gemütliche 4,437°C.

2

 

Um die Temperatur nun besser lesbar auszugeben, basteln wir uns ein kleines Script, beispielsweise “/scripts/ds18b20.sh“:

#! /bin/bash

#Pruefen, ob Suffix angegeben
if [ -z "$1" ] ;then
    echo "So geht das nicht"
    exit 1;
fi

# Temperatur des Sensors auslesen
temp=$(awk "BEGIN {print $(/bin/cat /sys/bus/w1/devices/$1/w1_slave |tail -n1 |cut -d"=" -f2)/1000}")

# Wert ausgeben
echo "Gemessene Temperatur des Sensors: ${temp} °C"

 

 

Die Ausführung des Scripts erlauben wir mit

chmod +x /scripts/ds18b20.sh

und starten es mit

/scripts/ds18b20.sh ID_DES_SENSORS

 

Nun erscheint die gemessene Temperatur in einem verständlichen Format:

3

 

Diese Werte können wir nun in Datenbanken speichern, per Mail versenden oder in openHAB verwenden.