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 so viel wie das der Sensor eine programierbare Ober- und Untergrenze hat, die sich nicht von alleine verändern können. Das DS18B20 kommuniziert über einen 1-Wire-Bus, der per Definition nur eine Datenleitung (und Masse) für die Kommunikation mit einem zentralen Mikroprozessor benötigt. Darüber hinaus kann der DS18B20 Strom direkt von der Datenleitung beziehen ("parasite power"). Dadurch entfällt die Notwendigkeit einer externen Spannungsquelle. Jedes DS18B20 hat einen einzigartigen 64-Bit-Seriencode, dadurch können mehrere DS18B20 auf demselben 1-Wire Bus funktionieren. So erschließt sich dann die Möglichkeit nur einen Mikroprozessor zu verwenden, um mehrere DS18B20 zu steuern/auszuwerten, die über einen großen Bereich verteilt sind. 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
Masse 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

// 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 temperature measurement");

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

// Hauptprogrammschleife
void loop()
{
    // Temperaturmessung wird gestartet...
    sensors.requestTemperatures();
    // ... und gemessene Temperatur ausgeben
    Serial.print("Temperature: ");
    Serial.print(sensors.getTempCByIndex(0));
    Serial.write(176); // UniCode Angabe eines Zeichens für das "°"-Symbol
    Serial.println("C");

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

Beispielprogramm Download

KY001-Arduino.zip

Codebeispiel Raspberry Pi

Anschlussbelegung Raspberry Pi:

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

One-Wire Konfiguration Raspberry Pi

Damit der Raspberry Pi mit dem One-Wire Bus, damit der Sensor/DS18B20 seine Messdaten digital sendet, kommunizieren kann, muss dieser vorerst aktiviert werden. Hierbei muss die Datei "/boot/config.txt" editiert und um folgende Zeile ergänzt werden:

dtoverlay=w1-gpio,gpiopin=4

Die Datei können Sie editieren, indem Sie den Befehl...

sudo nano /boot/config.txt

... in die Konsole eingeben. Mit der Tastenkombination [STRG+X] können Sie das Editieren beenden und mit [STRG+Y] abspeichern.

Nachdem Sie den Raspberry Pi mittels...

sudo reboot

... neugestartet haben, können Sie das untenstehende Beispiel anwenden.

Hierbei handelt es sich um ein ähnliches Beispielprogramm mit dem Unterschied das hier keine LED zum Leuchten gebracht wird sondern etwas in der Konsole ausgegeben wird, wenn ein Signal detektiert wird.

# coding=utf-8
# Benoetigte 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 PullUp-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 erkennte 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 dem 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(), "°C")
        time.sleep(sleeptime)
 
except KeyboardInterrupt:
    GPIO.cleanup()

Beispielprogramm Download

KY001-RPi.zip

Zu starten mit dem Befehl:

sudo python3 KY001-RPi.py

Codebeispiel Micro:Bit

Anschlussbelegung Micro:Bit:

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

Hierbei handelt es sich um ein MakeCode Beispiel für Micro:Bit welches essenziel das gleiche macht wie die Beispiele der anderen beiden Varianten. Jedoch ist dieses Beispiel eher näher an das Beispiel des Raspberry Pi angelehnt als an das Beispiel des Arduino.

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

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

Diese Librarie müssen Sie vor der benutzung des Codes erst zu ihrer IDE hinzufügen.

Dies tun Sie indem Sie in ihrer IDE auf Erweiterungen gehen und, mit der folgenden URL https://github.com/DFRobot/pxt-ds18b20.git, nach der Bibliothek suchen um diese dann hinzuzufügen.

Beispielprogramm Download

microbit-KY-001.zip