[Tutorial] Temperatursensor DS18B20 am SHC verwenden

    • [Tutorial] Temperatursensor DS18B20 am SHC verwenden

      Hier mal eine Beschreibung, wie der Temperatursensor DS18B20 angeschlossen wird.
      Diese Anleitung richtet sich an Anfänger, die mit wenig Geld schon mal erste Erfolge mit ihrer Hausautomation sammeln wollen.

      Der DS18B20 ist ein 1-Wire-Temperatursensor der Maxim. Dieser Sensor hat kann einen Temperaturbereich von -10° bis +85° mit einer Genauigkeit von 0,5° messen. Der große Vorteil dieses Sensors ist, dass die Digitalisierung und das Datenprotokoll gleich vollständig in den Sensor integriert ist, und dieser die Größe und Abmessungen eines herkömmlichen Transistors hat.

      Wie wird dieser Sensor angeschlossen:
      Es gibt 2 Anschlussvarianten. Eine einfach 3-adrige und eine erweiterte 4-adrige.
      Bei der einfachen Anschlussvariante wird der DS18B20 mit 3,3V versorgt, welches dann gleichzeitig die Pegelspannung für den Datenausgang darstellt (deswegen spart man sich eine Leitung). Diese niedrige Versorgungsspannung kann aber nur über einen sehr kurzen Leitungsweg sicher zur Verfügung gestellt werden, und eignet sich daher nur, wenn der Temperatursensor nahezu direkt am Raspberry betrieben werden soll (z.B. um dessen Betriebstemperatur zu überwachen).

      Bei der zweiten, und sichereren Variante, der 4-adrigen, wird als Versorgungsspannung 5V vom Raspi genommen. Da aber der Datenausgang, welcher ja direkt mit einem GPIO verbunden ist, nur mit max 3,3V betrieben werden darf (sonst geht der GPIO-Eingang kaputt), wird eine zusätzliche 3,3V Spannung benötigt um die Pegelspannung für den Datenausgang zur Verfügung zu stellen.

      In beiden Varianten sitzt ein Widerstand von 4,7 KOhm zwischen der Datenleitung (DQ bzw. dem GPIO-Port) und der Versorgungsspannung 3,3V vom Raspi. Das hat folgenden Grund: Über den Widerstand wird im Ruhezustand der Pegel von DQ auf 3,3V angehoben (was ja theoretisch auch ohne Widerstand gehen würde). Werden jetzt Daten übertragen, dann legt der DS18B20 in einem gewissen Takt GND (also Masse) auf den Ausgang (DQ). Ohne diesen Widerstand hätten wir auf unserem Raspi jetzt einen direkten Kurzschluss und wir würden ihn grillen. Durch den Widerstand aber, wird der Strom begrenzt, der über die 3,3V fließen kann, und somit haben wir keinen Kurzschluss.

      Die genaue Anschlussvariante kann man den beiden Anschlussbeispielen entnehmen, die im Anhang hängen.

      Das schöne am 1-Wire-Bus ist, dass ich weitere 1-Wire-Sensoren einfach auf den Bus aufschalten kann. Das macht man einfach so, dass alle VDD's, DQ's, GND's und die Pullupspannung (3,3V) mit einander verbunden werden, also parallel geschaltet werden. Der Widerstand ist dabei nur einmal notwendig. Sinnvollerweise ziemlich nahe am Raspi.

      Leitungslängen von bis zu 100 m und 150 Sensoren stellen unter Berücksichtigung der Leitungsqualität kein Problem dar.

      Weitere Informationen über die genaue Funktionsweise von 1-Wire und einigen Beispielen kann man unter Google oder auf Wiki finden.

      Da es sich um ein Bus-System handelt, kann es nur einen Master geben, aber sehr fiele Slaves. Der Master ist in unserem Fall der Raspi selbst. Nur muss hier natürlich eine entsprechende Software laufen, der den Master darstellt.
      Dazu benötigen wir 2 Module:
      - w1-gpio
      - w1-therm
      Diese zwei Module sind mit Raspbian bereits auf unserem Raspi vorhanden.
      Mit den Befehlen:

      Source Code

      1. sudo modprobe w1-gpio pullup=1
      2. sudo modprobe w1-therm

      können wir deren fehlerfrei Funktion testen. Sollten hierbei keine Fehlermeldungen auftauchen, läuft unser 1-Wire-Temperatur-Master schon mal.
      Jetzt können, sofern die DS18B20 schon angeschlossen sind, bereits Temperaturen empfangen und ausgelesen werden.
      Mit modprobe sind die Module zwar geladen, jedoch würde wir die Befehle nach jedem Neustart erneut eingaben müssen.
      Damit sie automatisch geladen werden müssen wir die Datei /etc/modules um 2 Zeilen ergänzen.
      Rufen wir die Daten /etc/modules mit folgenden Kommando auf:

      Source Code

      1. sudo nano /etc/modules

      Dann ergänzen wir die Datei am Ende um folgende Zeilen:

      Source Code

      1. w1-gpio pullup=1
      2. w1-therm

      Eines wäre noch von Wichtigkeit: Die Entwickler von dem Modul w1-gpio waren der Meinung der w1-Bus sollte immer am GPIO Pin4 (entspricht dem Pin 7 auf dem Stecker) angeschlossen werden. Dieses ist auch fest im Source-Code hinterlegt, so dass wir die Datenleitung DQ, die zu den DS18B20 führt auch an diesem Pin anschließen müssen.
      Es gibt zwar die Möglichkeit, sich den Sourcecode herunter zu laden, den Pin zu verändern, und dann neu zu compilieren, aber das sollten nur diejenigen machen, die sich das auch zutrauen.

      Ist jetzt das SHC bereits installiert, und Senderreceiver, Sendertransmitter richtig konfiguriert, so sollten unter Sensorpunkte in der Administration unsere Temperatursensoren auftauchen. Hier werden aber nur die Temperatursensoren angezeigt, die auch an dem Raspi angeschlossen sind. Wenn eine verteile Installation vom SHC vorliegt, werden die Temperatursensoren, die an anderen Raspi's angschlossen sind, hier nicht angezeigt.
      Unter Schaltfunktionen-Raumlose Elemente werden aber alle Temperatursensoren angezeigt, auch die von anderen Raspi's in der verteilten Installation, sofern sie nicht schon Räumen zugewiesen wurden.

      Jetzt kann es aber vorkommen, dass man alles gemacht hat, und sich auch sicher ist, dass alles richtig ist, und trotzdem tauchen im SHC die Sensoren nicht auf.
      In dem Falle würde man als erstes prüfen, ob denn die Sensoren korrekt ausgelesen werden.
      Hierzu wechseln wir in der Rapsi-Konsole in das Verzeichnis /sys/bus/w1/devices mit

      Source Code

      1. cd /sys/bus/w1/devices

      Dort finden wir im Idealfall mehrere Verzeichnisse.
      Einmal das Verzeichnis w1_bus_master1 und je nach Anzahl der Sensoren mehrere Verzeichnisse nach dem Muster
      10-000000abcdef oder 28-000000abcdef, wobei die längere Zahl der Seriennummer des DS18B20 entspricht.
      In diesen "Slave"-Verzeichnissen finden wir eine Datei namens w1_slave, die wir uns mit

      Source Code

      1. cat w1_slave

      anzeigen lassen können.
      Diese Datei besteht aus 2 Zeilen:

      34 00 4b 46 ff ff 0c 10 f8 : crc=f8 YES
      34 00 4b 46 ff ff 0c 10 f8 t=26000

      Wichtig ist hier in der ersten Zeile das crc=f8 YES, was uns anzeigt, dass die Daten fehlerfrei empfangen wurden, und darunter die zweite Zeile mit dem Temperaturwert in tausendstel Grad.
      Jetzt können wir dem DS18B20 z.B. mit den Fingern erwärmen und wieder mit dem cat-Befehl überprüfen, ob die Temperatur steigt. Ist das der Fall, so funktioniert unser 1-Wire-Temperatursensor problemlos, und der Fehler muß in der Konfiguration der Senderreceiver oder Sendertransmitter liegen.
      Ist aber bis hier hin schon ein Fehler aufgetreten, so müssen wir den erst mal beheben, bevor wir uns mit dem SHC befassen.

      Ansonsten haben wir jetzt die einfache Möglichkeit Temperaturen zu erfassen. Durch seinen günstigen Preis, kann man bei EBay schon für sehr wenig Geld sich einige dieser Sensoren zulegen. Auch die Widerstände liegen im Cent-Bereich.
      So kann man sich schnell mit wenig Aufwand Temperaturübersicht über die Räume oder die Außentemperatur schaffen.
      Files
      Gruß Dieter
      --------------
      Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

      The post was edited 1 time, last by DieterWo ().

    • RE: [Tutorial] Temperatursensor DS18B20 am SHC verwenden

      Bei dem neuen Kernel von Raspian funktioniert die Sache mit dem nach laden der Module  w1-gpio und w1-therm nicht mehr so richtig. 


      Einfach in der 

      Source Code

      1. su nano /boot/config.txt


      die Zeile: 

      Source Code

      1. dtoverlay=w1-gpio


      einfügen und Anschließend neustarten. Schon wird der Sensor richtig erkannt. ;) 

      The post was edited 1 time, last by Dorrjoerg ().