In diesem Blogpost stelle ich kurz den DS18B20 Temperatur Sensor vor und die Möglichkeiten diesen mit einem Arduino zu betreiben. Der DS18B29 ist ein digitaler Temperatursensor welcher mit einem 1-Wire-Bus arbeitet. Das besondere an dem 1-Wire-Bus ist, dass wenn man möchte mit nur zwei Adern als Verbindungsleitung auskommt.

Leitungslänge

Jeder DS18B20 verfügt über eine eindeutige Adresse mit der er angesprochen werden kann. An einem 1-Wire-Bus kann man also eine vielzahl von Teilnehmern betreiben. Die Leitungslänge kann dabei bis zu 100m betragen. Bis zu 150 Teilnehmer können so auf einer Leitung kommunizieren.

Verbindungsarten

Es gibt insgesamt zwei Verbindungsarten wie man den DS18B20 betreiben kann. Im Prinzip geht darum ob der Sensor seine Energie über den Datenbus bezieht oder nicht. Hat man also sowieso 5V (3.3V gehen auch) zur Verfügung z.B. weil man nahe an einem Arduino bietet es sich an den DS18B20 mit einer externen Spannungsversorgung zu betreiben.

Parasite Powered DS18B20

Die Parasite-Power Stromversorgung nutzt den Strom der Datenleitung. Ein anderer Vorschlag ist die Datenleitung während Temperatur-Conversions auf die Versorgungsspannung mit einem MOSFET zu pullen. Im Datenblatt dazu mehr.

External Powered DS18B20

Technische Daten
  • Versorgungsspannung 3.0V bis 5.5V
  • Messbereich: -55°C bis +125°C
  • Auflösung von 0.5°C bis 0.0625°C
  • +/- 0.5°C Präzision bis 85°C
Benötigte Libraries

Folgende Libraries werden Benötigt:

Kleines Beispiel Arduino Sketch:

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 4
#define TEMPERATURE_PRECISION 9

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer;

void setup() {
	while (!Serial) {  
	;
	}
	
	if (!sensors.getAddress(insideThermometer, 0)) Serial
		.println("Unable to find address for Device 0");
	
	sensors.begin();
}

void loop() {
	sensors.requestTemperatures();
	float tempC = sensors.getTempC(insideThermometer);
	
	Serial.print(tempC);
	Serial.print("        ");
	Serial.print("\r");
	delay(1000);
}

Dies sollte einen angeschlossenen DS18B20 zum laufen bringen und die Temperatur auf Serial printen.

#define ONE_WIRE_BUS 4

Hiermit legt man fest welchen DataPin am Arduino man benutzen möchte.

#define TEMPERATURE_PRECISION 9

Hiermit legt man die Sensor Auflösung fest.

  • 9-Bit für 0.5°C
  • 10-Bit für 0.25°C
  • 11-Bit für 0.125°C
  • 12-Bit für 0.0625°C