DS1820 Temperatursensor

Der DS1820 Temperatursensor misst die Temperatur in einem großen Bereich mit hoher Genauigkeit.

Es gibt zwei Ausführungen: den DS18S20 und den DS18B20

Der DS18B20 Temperatursensor

Die Kommunikation mit dem Sensor geht über einen sogenannten OneWrite Bus. Es können auch mehrere DS1820 an eine Busleitung angeschlossen werden.
Diese Bus- oder Datenleitung wird mit einem Pull-Up Widerstand (>4,7K, 10K funktionieren auch) auf Versorgungsspannung gezogen.
Die anderen beiden Anschlüsse sind die Versorgungsspannung und Masse.
Es ist auch eine parasitäre Spannungsversorgung über die Datenleitung möglich. Dann werden nur zwei der drei Pins des DS1820 benötigt.
Der Stromverbrauch im Standby-Modus lag bei nachgemessenen 3,2µA - bei aktiver Messung 680µA.

Eigenschaften

Ansteuerung

Die Softwarebibliothek für den DS1820 benötigt die OneWire Bibliothek.

/** Bibliotheken einbinden */
#include <OneWire.h>
#include <DallasTemperature.h>

/** Pin der Datenleitung bzw. des OneWire Busses */
#define PIN_DS1820  3

/** Instanzen erzeugen */
OneWire oneWire(PIN_DS1820);
DallasTemperature DS1820(&oneWire);

/** Helper */
int n;

/** Setup */
void setup() {
  // Serielle Verbindung
  Serial.begin(115200);

  // DS1820 initialisieren mit Auflösung 12 Bit
  DS1820.begin();
  DS1820.setResolution(12);

  // Anzahl DS1820 Sensoren ermitteln 
  n = DS1820.getDeviceCount();
  Serial.print("Anzahl DS1820: ");
  Serial.println(n, DEC);

  // Aktuelle Auflösung ausgeben
  int res = DS1820.getResolution();
  Serial.print("Aufloesung: ");
  Serial.print(res, DEC);
  Serial.println(" Bit");
}

/** LOOP */
void loop() {
  // Messung starten
  DS1820.requestTemperatures();

  // Alle Temperaturen ausgeben
  for (int i=0; i<n; i++) {
    float t = DS1820.getTempCByIndex(i);
    Serial.print("Temperatur Sensor Nr.");
    Serial.print(i);
    Serial.print(": ");
    Serial.println(t, DEC);
  }

  // 2 Sek. warten
  delay(2000);
}

Download des Sourcecode.

Abschalten des OneWire Busses

Der OneWire Buss kann zum stromsparen abgeschaltet werden. Die DallasTemperature hat leider keine Methode dafür. Diese kann ergänzt werden:

void DallasTemperature::shutdown(void) {
    _wire->depower();
}

Links