Letztes Update 2021/01/28 18:58
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.
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.
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