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.

6 Gedanken zu „Raspilab Wetterstation dritte Mission Temperatur messen mit dem DS18B20

  1. Stefan K. Antworten

    Bei mir ist es leider so, dass das w1_slave File bei jeder 2 – 4 Abfrage leer ist. Daher läuft dann auch das Python-Programm in einen Fehler. Hat das sonst noch jemand? Wenn das File nicht leer ist, passt die Temperatur auch.

  2. Thomas Ladisch Antworten

    Hallo Claus,
    wir haben 3 DS1820 über eine Leitungslänge von jeweils ca.15m angeschlossen, das funktioniert problemlos. Jetzt sollte ein vierter DS1820 ebenfalls mit einer Leitungslänge von 13m hinzukommen, sobald ich den anschließe sind die Daten der andern 3 weg. Kann es sein das wir bei der Leitungslänge den Widerstand verändern müssen. Die Leitungen haben einen Eigenwiderstand jeweils von 1,8 Ohm.
    Vielleicht weis jemand eine Lösung.

    VG Thomas

  3. Daniel Antworten

    Achtung ein kleiner Fehler ist hier zu Beginn!
    Das gelbe Kabel wird in der Darstellung in den GPIO24 (Pin 18) reingesteckt, aber das ist falsch!
    Das gelbe Kabel muss in das 3V3 (Pin 17) gesteckt werden. Quasi gleich gegenüber vom Pin 18.
    Trotzdem eine gute Hilfe, aber ich hab mich 1 Stunde rumgeärgert wieso es nicht funktioniert.

  4. Maxim Antworten

    Ist beim Bild für die Verkabelung das gelbe Kabel nicht falsch ? Sollte doch beim 3.3V Anschluss in der Reihe darunter sein.

  5. Norbert Antworten

    Guten Abend Claus,

    habe mich nun auch mit den DS1820 beschäftigt und wollte eigentlich im Laufe des kommenden Jahres meine Heizungsregelung auf Komplett digital umstricken.

    Aber:
    Der Befehl „cat“ liest eigentlich nur den Inhalt einer Datei aus, aber ich habe doch noch gar keinen Befehl zur Wandlung der Temperatur dem DS1820 gegeben? Wie kann da eine aktuelle Temperatur drin stehen?
    Des Rätsels Lösung legt in dem OS des Raspi: (ob es bei andern OS ähnlich habe ich jetzt nicht geforscht!)
    Wird das One Wire Interface im Raspi Config enabled, dann wird (nach meiner Messung) automatisch und ohne weiteres Zutun alle acht Sekunden der Bus master (also der raspi) aktiv. Wahrscheinlich nur mit „Wer ist da“ und Auslese Befehl
    So steht dementsprechend die aktuelle Temperatur in der entsprechenden Datei. Darüber hinaus wird bei einem Konsole cat Befehl für die entsprechende Datei diese vorher nochmals aktualisiert.
    Selbst wenn ich also gar keine Temperaturen abfrage, habe ich immer Verkehr auf der Datenleitung. Eigentlich sollten die Leitungen ja verdrillte Leitungen sein, aber bei meiner oben genante Heizungsregelung sind das nur einfache Unterputzleitungen. Und die führen darüber hinaus auch noch sternförmig zu der Regelung. Würde also andauend mehr oder weniger heftig HF mäßig stören. und ob es überhaupt funktioniert?!

    Tja, da muß ich erst mal weiter schauen …

    Grüße und schon einen Tag zu früh einen Guten Rutsch

    Norbert

    • Claus Brell Autor des Beitrags

      Das wird sicherlich funktionieren (technisch). Was mich bisher von der kompletten Eigenlösung abgehalten hat, ist, dass diese dann von mir als Person abhängig ist. Meine Frau kann also nicht einfach einen Installateur anrufen, der es repariert, wenn ich gerade nicht da bin …

Schreibe einen Kommentar

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