• Arduino
  • Raspberry Pi
  • Raspberry Pi Pico
  • Micro:Bit

Das Digitalthermometer DS18B20 bietet 9-Bit- bis 12-Bit Celsius-Temperaturmessungen und verfügt über eine Alarmfunktion mit nichtflüchtigen, benutzerprogrammierbaren, oberen und unteren Auslösepunkten.

Dies bedeutet, dass der Sensor über eine programmierbare Ober- und Untergrenze verfügt. Das DS18B20 kommuniziert über einen 1-Wire-Bus, welcher nur eine Datenleitung für die Kommunikation mit einem zentralen Mikroprozessor benötigt. Darüber hinaus kann der DS18B20 die Stromversorgung direkt von der Datenleitung beziehen ("parasite power"). Dadurch entfällt die Notwendigkeit einer externen Spannungsquelle. Jedes DS18B20 besitzt einen einzigartigen 64-Bit-Seriencode. Dadurch können mehrere Sensoren auf demselben 1-Wire Bus agieren und über nur einen Mikroprozessor ausgewertet werden.

Zu den Anwendungen, die von dieser Funktion profitieren können, gehören HVAC-Umgebungssteuerungen, Temperaturüberwachungssysteme in Gebäuden, Anlagen oder Maschinen, sowie Prozessüberwachungs- und Steuerungssysteme.

Technische Daten

Chipsatz DS18B20
Kommunikationsprotokoll 1-Wire
Genauigkeit 9 bis 12 Bit
Messbereich –55°C bis +125°C
Messgenauigkeit ±0.5°C von -10°C bis +85°C

Pin-Belegung

Codebeispiel Arduino

Anschlussbelegung Arduino:

Arduino Sensor
Pin 4 Signal
5V +V
GND GND

Für das folgende Codebeispiel werden zwei zusätzliche Bibliotheken benötigt:

OneWire Library von Paul Stoffregen | veröffentlicht unter der MIT License

Dallas Temperature Control Library von Miles Burton | veröffentlicht unter LGPL

Beide Bibliotheken sind im Paket enthalten und müssen vor dem Start der Arduino IDE in den "library"-Ordner kopiert werden.

Diesen finden Sie standardmäßig unter dem folgenden Pfad Ihrer Windows-Installation:

C:\Benutzer\[Benutzername]\Dokumente\Arduino\Bibliotheken

Hierbei handelt es sich um ein Beispielprogramm, welches nach der Initialisierung des Sensors die gemessene Temperatur seriell ausgibt.

// Erforderliche Bibliotheken werden importiert
#include <OneWire.h>
#include <DallasTemperature.h>            

// Hier wird der Eingangspin deklariert, an den das Sensormodul angeschlossen wird
#define KY001_Signal_PIN 4

// Bibliotheken werden konfiguriert
OneWire oneWire(KY001_Signal_PIN);          
DallasTemperature sensors(&oneWire);    


void setup() {

    // Initialisierung des seriellen Ausgangs
    Serial.begin(9600);
    Serial.println("KY-001 Temperaturmessung");

    // Sensor wird initialisiert
    sensors.begin();  
}

// Hauptprogrammschleife
void loop()
{
    // Temperaturmessung wird gestartet...
    sensors.requestTemperatures();
    // ... und die gemessene Temperatur wird ausgeben
    Serial.print("Temperatur: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.println(" °C");

    delay(1000); // 1s Pause bis zur nächsten Messung
}

Beispielprogramm Download

KY001-Arduino.zip

Das Digitalthermometer DS18B20 bietet 9-Bit- bis 12-Bit Celsius-Temperaturmessungen und verfügt über eine Alarmfunktion mit nichtflüchtigen, benutzerprogrammierbaren, oberen und unteren Auslösepunkten.

Dies bedeutet, dass der Sensor über eine programierbare Ober- und Untergrenze verfügt. Das DS18B20 kommuniziert über einen 1-Wire-Bus, welcher nur eine Datenleitung für die Kommunikation mit einem zentralen Mikroprozessor benötigt. Darüber hinaus kann der DS18B20 die Stromversorgung direkt von der Datenleitung beziehen ("parasite power"). Dadurch entfällt die Notwendigkeit einer externen Spannungsquelle. Jedes DS18B20 besitzt einen einzigartigen 64-Bit-Seriencode. Dadurch können mehrere Sensoren auf demselben 1-Wire Bus agieren und über nur einen Mikroprozessor ausgewertet werden.

Zu den Anwendungen, die von dieser Funktion profitieren können, gehören HVAC-Umgebungssteuerungen, Temperaturüberwachungssysteme in Gebäuden, Anlagen oder Maschinen, sowie Prozessüberwachungs- und Steuerungssysteme.

Technische Daten

Chipsatz DS18B20
Kommunikationsprotokoll 1-Wire
Genauigkeit 9 bis 12 Bit
Messbereich –55°C bis +125°C
Messgenauigkeit ±0.5°C von -10°C bis +85°C

Pin-Belegung

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi:

Raspberry Pi Sensor
GPIO4 [Pin 7] Signal
3,3V [Pin 1] +V
GND [Pin 6] GND

One-Wire Konfiguration Raspberry Pi

Damit der Raspberry Pi mit dem One-Wire Bus kommunizieren kann, muss dieser zunächst aktiviert werden. Hierbei muss die Datei "/boot/config.txt" editiert werden. Öffnen Sie die Datei daher mit dem folgenden Befehl:

sudo nano /boot/config.txt

Fügen Sie den folgenden Inhalt an das Ende der Datei an:

dtoverlay=w1-gpio,gpiopin=4

Anschließend können Sie die Datei mit der Tastenkombination [STRG+O] speichern. Bestätigen Sie dies mit [Enter] und beenden Sie den Editor mit [STRG+X]. Starten Sie Ihren Raspberry Pi nun mit dem folgenden Befehl neu:

sudo reboot

Nun können Sie das folgende Beispiel anwenden. Hierbei wird eine Konsolenausgabe generiert, sobald ein Signal detektiert wird.

Hierbei handelt es sich um ein Beispielprogramm, welches nach der Initialisierung des Sensors die gemessene Temperatur seriell ausgibt.

# coding=utf-8
# Benötigte Module werden importiert und eingerichtet
import glob
import time
from time import sleep
import RPi.GPIO as GPIO
 
# An dieser Stelle kann die Pause zwischen den einzelnen Messungen eingestellt werden
sleeptime = 1
 
# Der One-Wire Eingangspin wird deklariert und der integrierte Pull-up-Widerstand aktiviert
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
 
# Nach Aktivierung des Pull-UP Widerstandes wird gewartet,
# bis die Kommunikation mit dem DS18B20 Sensor aufgebaut ist
print ("Warte auf Initialisierung...")
 
base_dir = '/sys/bus/w1/devices/'
while True:
    try:
        device_folder = glob.glob(base_dir + '28*')[0]
        break
    except IndexError:
        sleep(0.5)
        continue
device_file = device_folder + '/w1_slave'
 
 
# Funktion wird definiert, mit dem der aktuelle Messwert am Sensor ausgelesen werden kann
def TemperaturMessung():
    f = open(device_file, 'r')
    lines = f.readlines()
    f.close()
    return lines
 
# Zur Initialisierung, wird der Sensor einmal "Blind" ausgelesen
TemperaturMessung()
 
# Die Temperaturauswertung: Beim Raspberry Pi werden erkannte One-Wire Slaves im Ordner
# /sys/bus/w1/devices/ einem eigenen Unterordner zugeordnet. In diesem Ordner befindet sich die Datei w1-slave
# in dem die Daten, die über den One-Wire Bus gesendet wurden gespeichert.
# In dieser Funktion werden diese Daten analysiert und die Temperatur herausgelesen und ausgegeben
def TemperaturAuswertung():
    lines = TemperaturMessung()
    while lines[0].strip()[-3:] != 'YES':
        time.sleep(0.2)
        lines = TemperaturMessung()
    equals_pos = lines[1].find('t=')
    if equals_pos != -1:
        temp_string = lines[1][equals_pos+2:]
        temp_c = float(temp_string) / 1000.0
        return temp_c
 
# Hauptprogrammschleife
# Die gemessene Temperatur wird in die Konsole ausgegeben - zwischen den einzelnen Messungen
# ist eine Pause, deren Länge mit der Variable "sleeptime" eingestellt werden kann
try:
    while True:
        print ("---------------------------------------")
        print ("Temperatur:", TemperaturAuswertung(), "degC")
        time.sleep(sleeptime)
 
except KeyboardInterrupt:
    GPIO.cleanup()

Beispielprogramm Download

KY001-RPi.zip

Zu starten mit dem Befehl:

sudo python3 KY001-RPi.py

Das Digitalthermometer DS18B20 bietet 9-Bit- bis 12-Bit Celsius-Temperaturmessungen und verfügt über eine Alarmfunktion mit nichtflüchtigen, benutzerprogrammierbaren, oberen und unteren Auslösepunkten.

Dies bedeutet, dass der Sensor über eine programierbare Ober- und Untergrenze verfügt. Das DS18B20 kommuniziert über einen 1-Wire-Bus, welcher nur eine Datenleitung für die Kommunikation mit einem zentralen Mikroprozessor benötigt. Darüber hinaus kann der DS18B20 die Stromversorgung direkt von der Datenleitung beziehen ("parasite power"). Dadurch entfällt die Notwendigkeit einer externen Spannungsquelle. Jedes DS18B20 besitzt einen einzigartigen 64-Bit-Seriencode. Dadurch können mehrere Sensoren auf demselben 1-Wire Bus agieren und über nur einen Mikroprozessor ausgewertet werden.

Zu den Anwendungen, die von dieser Funktion profitieren können, gehören HVAC-Umgebungssteuerungen, Temperaturüberwachungssysteme in Gebäuden, Anlagen oder Maschinen, sowie Prozessüberwachungs- und Steuerungssysteme.

Technische Daten

Chipsatz DS18B20
Kommunikationsprotokoll 1-Wire
Genauigkeit 9 bis 12 Bit
Messbereich –55°C bis +125°C
Messgenauigkeit ±0.5°C von -10°C bis +85°C

Pin-Belegung

Codebeispiel Micro:Bit

Anschlussbelegung Micro:Bit:

Micro:Bit Sensor
Pin 1 Signal
3V +V
GND GND

Für das folgende Codebeispiel wird eine zusätzliche Library benötigt:

pxt-ds18b20 von DFRobot | veröffentlicht unter der GUI License.

Fügen Sie die Library zu Ihrer IDE hinzu, indem Sie auf "Erweiterungen" klicken und die folgende URL in das Suchfeld eingeben: https://github.com/DFRobot/pxt-ds18b20.git.

Bestätigen Sie die Suche mit [Enter].

Hierbei handelt es sich um ein Beispielprogramm, welches nach der Initialisierung des Sensors die gemessene Temperatur seriell ausgibt.

Beispielprogramm Download

microbit-KY-001.zip

Das Digitalthermometer DS18B20 bietet 9-Bit- bis 12-Bit Celsius-Temperaturmessungen und verfügt über eine Alarmfunktion mit nichtflüchtigen, benutzerprogrammierbaren, oberen und unteren Auslösepunkten.

Dies bedeutet, dass der Sensor über eine programierbare Ober- und Untergrenze verfügt. Das DS18B20 kommuniziert über einen 1-Wire-Bus, welcher nur eine Datenleitung für die Kommunikation mit einem zentralen Mikroprozessor benötigt. Darüber hinaus kann der DS18B20 die Stromversorgung direkt von der Datenleitung beziehen ("parasite power"). Dadurch entfällt die Notwendigkeit einer externen Spannungsquelle. Jedes DS18B20 besitzt einen einzigartigen 64-Bit-Seriencode. Dadurch können mehrere Sensoren auf demselben 1-Wire Bus agieren und über nur einen Mikroprozessor ausgewertet werden.

Zu den Anwendungen, die von dieser Funktion profitieren können, gehören HVAC-Umgebungssteuerungen, Temperaturüberwachungssysteme in Gebäuden, Anlagen oder Maschinen, sowie Prozessüberwachungs- und Steuerungssysteme.

Technische Daten

Chipsatz DS18B20
Kommunikationsprotokoll 1-Wire
Genauigkeit 9 bis 12 Bit
Messbereich –55°C bis +125°C
Messgenauigkeit ±0.5°C von -10°C bis +85°C

Pin-Belegung

Codebeispiel Raspberry Pi Pico

Anschlussbelegung Raspberry Pi Pico:

Raspberry Pi Pico Sensor
GPIO2 Signal
3,3V +V
GND GND

Für das folgende Codebeispiel werden zwei zusätzliche Bibliotheken benötigt:

OneWire Library von Damien P. George | veröffentlicht unter der MIT-Lizenz.

DS18x20 Library von Damien P. George | veröffentlicht unter der MIT-Lizenz.

Hierbei handelt es sich um ein Beispielprogramm, welches nach der Initialisierung des Sensors die gemessene Temperatur seriell ausgibt.

# Bibliotheken laden
import machine, onewire, ds18x20
from time import sleep

# Initialisierung von GPIO2
ds_pin = machine.Pin(10)

# Initialisierung des Sensorobjekts
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))

# Suche nach allen passenden Sensoren
roms = ds_sensor.scan()

# Serielle Ausgabe
print("Found DS devices")
print("Temperature (°C)")

# Endlosschleife zur ständigen auslesung der Temperatur
while True:
  ds_sensor.convert_temp()
  sleep(1)
  # Anhand der Anzahl der gefundenen kompatiblen Sensoren wird hoch gezählt
  for rom in roms:
    # Serielle Ausgabe der gemessenen Temperatur
    print(ds_sensor.read_temp(rom))
  sleep(3)

Beispielprogramm Download

KY001-Pico.zip