Raspilab Wetterstation dritte Mission Temperatur messen mit dem DS18B20

Der DS18B20 Sensor wandelt analoge Temperaturen in digitale um. Die Daten überträgt er seriell an den Raspberry Pi über ein sogenanntes 1-wire-Interface.  Der DS18B20 hat den Vorteil, dass man sehr einfach bis zu zehn dieser Sensoren an einen Raspberry über gemeinsame Leitungen anschließen kann.

Sie benötigen einen Rasperry Pi mit Raspi-OS. Wie Sie Raspi-OS aufsetzen, lesen Sie hier …

Eine Übersicht über alle Raspberry Pi bezogenen Artikel …

Beschaltung

Abb. 1 zeigt die Beschaltung des DS1820. Der Widerstand mit 4,7 Kilo-Ohm ist ein sogenannter Pull-Up-Widerstand und sorgt dafür, dass der Anschluss DQ eine definierte Spannung hat.

Anschlüsse und Beschaltung des DS18B20 Temperatursensors

Abb. 1: Beschaltung des Temperatursensors DS1820

Verkabelung des DS1820 mit dem Raspberry Pi

Den Sensor DS1820 stecken Sie nun auf das Breadboard, möglichst genau so wie in Abb 2. Achtung: Die flache Seite zeigt zu den Kabeln, falsch herum verkabelt zerstört den Sensor

mit Anschluss  GND 1 (Ground) in E1,

Anschluss DQ 2 (Signal) in E2,

Anschluss VDD 3 (3,3 V) in E3.

DS18B20 an den raspberry anschließen

Abb. 2: Verkabelung des Raspberry Pi mit dem Sensor DS1820

 

Sensor in E1, E2 und E3

Widerstand in C2 und C6

Jumperkabel in A1 und Pin 39

Jumperkabel in A2 und Pin 40

Jumperkabel in A6 und Pin 17

Erklärung: Die Abrundung des Sensors muss in Richtung F schauen, siehe Abb. 2

Es ist auch möglich, den Temperatursensor über nur zwei Anschlussleitungen mit dem Raspberry zu verbinden („parasitäre Spannungsversorgung“). Beim Betrieb mit mehreren parallelen Sensoren im Außeneinsatz hat sich diese Lösung allerdings als weniger stabil entpuppt.

Vorbereiten des Raspberry Pi für die Temperaturmessung

Schritt 1: Konfigurationsdatei config.txt im Verzeichnis /boot mit nano öffnen:

sudo nano /boot/config.txt

Schritt 2: Folgenden Inhalt unten in config.txt hinzufügen:

dtoverlay=w1-gpio,gpiopin=21

Erklärung:

Für den verbunden Pin muss die GPIO-Nummer angeben werden.

Beispiel: Verbunden mit Pin 40 (=GPIO Nummer 21)

Beipiel 2: Verbunden mit Pin 11 (=GPIO Nummer 17)

Wollen Sie den Anschluss für etwas anderes verwenden, müssen Sie den Eintrag wieder auskommentieren, indem Sie ein „#“ davorschreiben

Schritt 3: System rebooten (damit die Änderungen gültig werden) mit

sudo reboot

Schritt 4: Geben Sie folgende Befehle in die Konsole ein

update 12.06.2021, aktuelles Raspi-OS: der komplette Schritt 4 konnte weg gelassen werden.

sudo modprobe w1-gpio pullup=1

sudo modprobe w1-therm

Schritt 5: Gehen Sie mit cd ins Verzeichnis für die angeschlossenen 1-wire-Geräte

cd /sys/bus/w1/devices/

und geben sie den Befehl

ls

ein, um eine Übersicht die Temperatursensoren zu erhalten.

Es sollten zwei Ordner vorhanden sein, die so ähnlich aussehen wie

28-00000XXXXXXX

W1_bus_master1

Schritt 6: Gehen Sie in das Verzeichnis, das so heißt wie die Zahlenkolonne, z.B.

cd 28-00000XXXXXXX

Schritt 7: Lesen Sie testweise die Temperatur aus mit

cat w1_slave

Erklärung: Der Befehl   cat   zeigt den Inhalt einer Datei an.

Abb. 9: Ausgabe des DS1820

Erklärung: t=18875 muss durch 1000 geteilt werden, um die Temperatur 18,875 °C zu erhalten

Ein Python-Programm für die Temperaturmessung erstellen

Schritt 1: Datei für das Python-Programm mit nano anlegen mit

nano temp.py

Schritt 2: Schreiben Sie den Quellcode in die Datei:

#!/usr/bin/python
# misst Temperaturen mit DS1820
import time
while 1:
    time.sleep(2)
    #Die Devicenummer 28-0000074b57ed muss angepasst werden
    #und so lauten wie Ihr Verzeichnis
    tempfile = open("/sys/bus/w1/devices/28-0000074b57ed/w1_slave")
    inhalt = tempfile.read()
    tempfile.close()
    tempdata = inhalt.split("\n")[1].split(" ")[9]
    temperatur = float(tempdata[2:])
    temperatur = temperatur/1000
    print "Temperatur betraegt: " + str(temperatur) + " Grad"

und speichern Sie die Dateien mit Strg+o, schließen Sie nano mit Strg+x.

Schritt 3: Geben Sie dem Programm Ausführungsrechte:

sudo chmod 777 temp.py

Schritt 4: Führen Sie das Programm aus mit dem Befehl

./temp.py

Fassen Sie den Sensor mit Daumen und Zeigefinger an. Die Temperatur sollte sich erhöhen.

Erläuterung zum Quellcode:
#!/usr/bin/python ….. sorgt dafür, dass Ihr Quelltext direkt mit dem Programm Python ausgeführt wird
import time ….. bindet Funktionen für die Zeitbehandlung mit ein
while 1: … damit startet eine Endlosschleife
time.sleep(2) … wartet zwei Sekunden
inhalt = tempfile.read() … liest den Inhalt einer Datei in die Variable mit dem Namen inhalt
tempfile.close()
tempdata = inhalt.split(„\n“)[1].split(“ „)[9]
temperatur = float(tempdata[2:])
temperatur = temperatur/1000 … die drei Zeilen extrahieren die Temperatur
print „Temperatur betraegt: “ + str(temperatur) + “ Grad“ …. die Temperatur wird formatiert ausgegeben.

Sie sollten nun alle zwei Sekunden eine neue Zeile mit der aktuellen Temperatur auf dem Bildschirm sehen (Abb. 3).

Screenschot der Ausgabe des DS18B20

Abb. 3 Screenshot mit der Ausgabe der Daten des DS18B20

Teile diesen Beitrag.

Schreibe einen Kommentar

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