S7


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Temperatur messen und anzeigen
- mit Datenspeicherung
(Rapberry Pi und DS18B20)


Eine interessante Alternative für eine Temperaturmessung bietet der IC DS18B20. Der Baustein liefert den aktuellen Temperaturwert über nur eine Leitung. Bei Bedarf können an diese eine Data-Leitung mehrere DS18B20-Bausteine hintereinander angeschlossen werden. Sparsamer geht es nur über drahtlose Verbindung. Mit dem Sensor kann man zusätzlich eine Schwäche von Raspberry Pi überwinden. Der kleine Minicomputer verfügt über keine analogen Eingänge und kann über seine GPIOs nur zwischen 1 und 0 unterscheiden. Ein Sensor, der gemessene Werte digital zur Verfügung stellt, ist genau das, worauf Raspberry Pi steht.

Die Schaltung

In der folgenden Schaltung kommt neben dem Temperatursensor DS18B20 und Raspberry Pi eine 7-Segmentanzeige mit dem Treiber TM1637 zum Einsatz. Mit der Anzeige wird die aktuelle Temperatur angezeigt. Zusätzlich werden die gemessenen Temperaturwerte in einer Datei für spätere Auswertung gespeichert.

DS18B20

DS18B20

Temperatursensor DS18B20

Der Temperatursensor DS18S20 kann über den 1-Wire Bus angesprochen werden. Er verfügt über einen A/D-Wandler und stellt dank dessen seine Daten digital zur Verfügung. An die Data-Leitung, wie bereits oben erwähnt, können gleichzeitig mehrere Sensoren angeschlossen werden, die dann mit nur einem digitalen Eingang ausgelesen werden können. Das ist darauf zurückzuführen, dass die Sensoren mit eindeutigen Seriennummern versehen sind. Der Sensor kann Temperatur im Bereich von -55 bis +125 °C erfassen. Seine Stromaufnahme beträgt ca. 1 mA. Er kann genauso gut für Schaltungen mit Raspberry Pi als auch mit Arduino verwendet werden. Seine Spannungsversorgung beträgt 3 bis 5,5 V.

DS18B20 (Notizbuch)


Anzeige

7-Segment-Anzeige 3642bh

Anzeige Modul mit 7-Segment-Anzeige 3642bh

Modul mit TM1637

Rückseite mit TM1637

Als Anzeige kommt ein fertiges Modul, das eine (4-Digit) 7-Segmentanzeige und den Treiber TM1637 mit Umgebungselektronik beinhaltet, zum Einsatz. Um die Anzeige anzusprechen, müssen zwei GPIOs geopfert werden. Infos zu dem Display:

Schaltungen_mit_TM1637


Schaltplan

Schaltplan

Schaltplan

Testschaltung

Testschaltung

Das Programm

Das Programm fragt in regelmäßigen Zeitabständen (hier 5 Sek.) den Temperatursensor DS18B20 nach der aktuellen Umgebungstemperatur ab, liest sie aus und schickt den aktuellen Wert an die 7-Segmentanzeige. Da die Anzeige lediglich aus vier Digits besteht und der gesamte Wert mit Nachkommastellen nicht angezeigt werden kann, wird der Anzeigewert abgerundet. Alternativ könnte man für Anzeigezwecke ein LCD-Display einsetzen. Der gesamte Temperaturwert mit drei Nachkommastellen wird zur Kontrolle in dem Shell-Fenster angezeigt. Der neu ausgelesene Temperaturwert wird gleichzeitig in einer Datei abgespeichert. Der Speicherungsvorgang wird mit dem Aufleuchten der Leuchtdiode D1 signalisiert. Die gespeicherten Werte können zu späterem Zeitpunkt ausgewertet werden.

Die zentrale Stelle in der Schaltung nimmt der Minicomputer Raspberry Pi an. Er empfängt die Temperaturwerte von dem Sensor, leitet sie weiter zu der 7-Segmentanzeige und bereitet sie zur Speicherung vor. Auch er steuert die Leuchtdiode, die Speicherungsvorgang signalisiert, an. Bevor er seine Arbeit aufnehmen kann, müssen einige Vorbereitungen getroffen werden.

Falls das noch nicht geschehen ist, muss der 1-Wire Bus aktiviert werden. Die Aktivierung erfolgt über das Menü „Einstellungen“. Man klickt sich wie folgt durch:
Einstellungen/Raspberry-Pi-Konfiguration/Schnittstellen/Eindraht-Bus
An dieser Stelle ist der Option-Button „Aktiviert“ anzuklicken. Anschließend muss der Rechner neu gestartet werden.

Im LXTerminal kann man schnell prüfen, ob der Sensor Daten liefert und sie auch empfangen werden.
Mit „cd“ wechselt man in das „devices“ Verzeichnis:
$ cd /sys/bus/w1/devices
Mit
$ ls
werden die aktiven Sensoren mit Nennung aufgelistet. Anschließend kann man mit dem Kommando (richtige Nennung angeben!)
$ cat Nennung/w1_slave“
den aktuellen Temperaturwert auslesen. Der angezeigte Wert entspricht dem 1000fachen Wert der tatsächlichen Temperatur. Hier 21437 = 21,437 °C. Die Bezeichnung des Sensors kann mit
$ cat /sys/devices/w1_bus_master1/w1_master_slaves
in Erfahrung gebracht werden. Im Terminal sieht das ungefähr so aus:

Sensor prüfen

Sensor prüfen

Nachdem sichergestellt wurde, dass die Schaltung richtig funktioniert, kann man sich dem Python-Programm widmen. Zunächst werden passende Bibliotheken geladen.
Für das Display (7-Segmentanzeige) kommt die Bibliothek "raspberrypi-python-tm1637“ zum Einsatz. Ein Installationsbeispiel ist hier zu finden:

Stoppuhr mit TM1637

Im weiteren Schritt wird die Bibliothek für den Sensor DS18B20 eingebunden. In dem Beispiel-Programm verwenden wir die Bibliothek w1thermsensor. Sie muss ggf. installiert werden:
$ git clone https://github.com/timofurrer/w1thermsensor
$ cd w1thermsensor
$ sudo apt-get install python3-w1thermsensor

Jetzt kann das Programm zusammengestellt werden:


# ------------------------------------------------------------
# Temperatur erfassen, anzeigen und festhalten
# Temperatursensor DS18B20
# 4Digit-7Segmenanzeige mit TM1637
# Raspberry Pi 3B, Python 3
# ------------------------------------------------------------
                             # Bibliotheken 
import tm1637
import time
import RPi.GPIO as GPIO
from w1thermsensor import W1ThermSensor
import math

GPIO.setwarnings(False)      # Fehlermeldung abschalten 
GPIO.setmode (GPIO.BOARD)    # Nummerierung J8-Header 
GPIO.setup (38, GPIO.OUT)    # Ausgang für die Leuchtdiode 
                             # Pins für Kommunikation mit Anzeige 
                             # GPIO17 = Pin 11 (CLK) 
                             # GPIO27 = Pin 13 (DIO) 
tm = tm1637.TM1637(clk=17, dio=27)

# Hauptprogramm -------------------------------- 
                             # Die Bezeichnung des Sensors wird im Terminal mit 
                             # cat /sys/devices/w1_bus_master1/w1_master_slaves 
                             # ausgelesen 
sensor = W1ThermSensor(W1ThermSensor.THERM_SENSOR_DS18B20, "3c01b556b489")
while True:
    Temperatur = sensor.get_temperature()
    print (Temperatur)       # Im Terminal anzeigen 
                             # Anzeigewert abrunden 
    Anzeige_Temperatur = math.floor (Temperatur)
                             # 7Segment Anzeige 
    tm.temperature (Anzeige_Temperatur)
                             # Leuchtdiode Ein 
    GPIO.output (38, GPIO.HIGH)
                             # Daten in Datei festhalten 
    datei = open('Temperatur.txt','a')
                             # Wert Umwandeln 
    StrTemperatur = str(Temperatur)
                             # Datum + Uhrzeit 
    Zeitpunkt = time.ctime()
                             # Ausgabe zusammenfassen 
    StrTemperatur = "\r\n" + Zeitpunkt + " - Temperatur = " + StrTemperatur
    datei.write (StrTemperatur)
    datei.close()
    time.sleep (0.5)         # Kurze Unterbrechung 
                             # Leuchtdiode Aus 
    GPIO.output (38, GPIO.LOW)
    time.sleep (4.5)
# ---------------------------------------------------- 
        

Die Einträge in der Datei Temperatur.txt

Aufzeichnung

Aufzeichnung

Kurzvideo

Bei dem Versuch (Kurzvideo) wollen wir die Gelegenheit nutzen und erfahren, wie weit man einen Gegenstand (in diesem Fall den Temperatursensor) mit einem durchschnittlichen Haartrockner erwärmen kann. Den Haartrockner betreiben wir auf der niedrigsten Stufe. Der höchste gemessene Temperaturwert bei diesem Versuch betrug 59,5 °C. Anhand der gespeicherten Daten ergibt sich folgender, in einem Exel-Diagramm dargestellter Temperaturverlauf:

Temperaturverlauf

Temperaturverlauf

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz