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
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.
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:
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
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:
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
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: