18B20 Temperatursensor anschließen

Letztes Update 2021/01/28 18:58
© Dallas Semiconductors Der Temperatursensor 18B20 ist ein integrierter Schaltkreise im TO-92 Gehäuse, welcher einen Temperatursensor, einen A/D-Wandler und ein 1-Wire™ Interface beinhaltet. Am 1-Wire™ Bus lassen sich mehrere Sensoren parallel betreiben. Die Sensoren werden durch einen vom Hersteller vergebenen, eindeutigen Code vom Prozessor identifiziert. Bei kurzen Zuleitungen reicht eine einfaches 3-Adrige Leitung und ein 4,7kΩ großer Widerstand zwischen Datenleitung DQ und der Betriebsspannung von 3,3Volt (Vcc). Falls bei mehreren Sensoren die Datenübertragung nicht mehr richtig funktioniert, kann das einerseits am PullUp Widerstand von 4,7kΩ liegen, andererseits an der Qualität des Anschlusskabel, an dem die Sensoren hängen. Guten Erfolg verspricht ein Cat5 oder Cat6 Kabel. Falls mehr als 4 oder 5 Sensoren an der Leitung hängen, den PullUp Widerstand verkleinern, aber möglichst nicht unter 2kΩ. Eventuell hilft auch ein 0,1υF Keramikkondensator zwischen Vcc und GND.

(CC) BY-SA
Der Anschluss des Sensors erfolgt mit drei Leitungen am Raspberry, und zwar an den Anschlüssen Pin1 - 3V3, GND und Pin7 - GPIO4. Der Temperaturbereich und die Genauigkeit, ist in den Datenblättern für den DS1820 oder 18B20 nachzulesen.

Temperatursensor installieren

Am Raspberry muss das 1-Wire™ Inerface eingeschaltet sein. Dafür raspi-config aufrufen und den Punkt 3 Interface Options / P7 1-Wire aufrufen und die Frage Would you like the one-wire interface to be enabled? mit <Yes> beantworten.

Das 1-Wire Protokoll aktivieren:

sudo modprobe w1-gpio
sudo modprobe w1-therm

Die config.txt wird geöffnet:

sudo nano /boot/config.txt

und am Ende der Datei wird eine Zeile hinzugefügt, bzw. ergänzt:

dtoverlay=w1-gpio,gpiopin=4,pullup=on

Durch die Eingabe von

lsmod

wird nun überprüft, ob die Module aufgelistet sind. Als Beispiel:

w1_therm 24576 0
w1_gpio 16384 0
wire 40960 2 w1_gpio,w1_therm

Falls die Module nicht aufgelistet sind, kontrollieren, ob der 18B20 an GPIO04 angeschlossen ist.

Damit beim Start die beiden Module geladen werden, diese in die Datei /etc/modules eintragen:

Datei öffnen:

sudo nano /etc/modules

und am Ende zwei Zeilen einfügen:

w1_gpio
w1_therm

Um den Sensor zu identifizieren, muss seine ID herausgefunden werden. Dazu in das devices-Verzeichnis wechseln:

cd /sys/bus/w1/devices/
ls

Je nach Sensortype beginnen die entsprechenden Dateien mit 10-, 28- oder ähnlich.
Hier lautet die ID 10-000801708b93.

pi@rpi:~ $ cd /sys/bus/w1/devices/
pi@rpi:/sys/bus/w1/devices $ ls
10-000801708b93 w1_bus_master1
pi@rpi:/sys/bus/w1/devices $

Zur Kontrolle, ob auf der Hardwareseite alles funktioniert, an der Konsole folgende Eingabe vornehmen:

cat /sys/bus/w1/devices/10-000801708b93/w1_slave

In der Ausgabe sehen wir in der zweiten Zeile in den letzten 5 Stellen die Temperatur in m°C (Milligrad Celsius):

pi@rpi:~ $ cat /sys/bus/w1/devices/10-000801708b93/w1_slave
b9 01 4b 46 7f ff 07 10 d1 : crc=d1 YES
b9 01 4b 46 7f ff 07 10 d1 t=27562
pi@rpi:~ $

Der Wert durch 1000 geteilt ergibt die Temperatur von 27.562°C.

Um den Temperaturwert lesbar darzustellen, kann ein Shell-Script verwendet werden. Da in diesem Script eine Berechnung notwendig ist, wird der Rechner bc für die Konsole installiert:

sudo apt install bc

sudo nano temperatur.sh

#!/bin/bash cd /home/pi # s1 = S/N des 18(B)20 s1=10-000801708b93 t1=$(echo $(cat /sys/bus/w1/devices/$s1/w1_slave | grep "t=") | cut -d "=" -f2) div=1000 out=`echo "scale=1; $t1 / $div" | bc` echo "Temperatur: $out°C"

Script ausführbar machen und ausführen:

sudo chmod +x temperatur.sh
/home/pi/temperatur.sh

Als Ergebnis wird die Temperatur in °C angezeigt:

Temperatur: 22.8°C