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
- DS18S20 = Auflösung 9 Bit
- DS18B20 = Auflösung (einstellbar) zwischen 9 und 12 Bit
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
- Spannungsversorgung 3-5,5V
- Messbereich von -55°C bis 125°C
- Genauigkeit von ±0,5°C (zwischen -10°C und 85°C), ±2°C (zwischen -55°C und 125°C),
- Auflösung 9 bzw. 9-12 Bit
- Stromverbrauch Messung 1-1,5mA, Standby 750-1000nA
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
- Softwarebibliothek für die DS18x Reihe: http://milesburton.com/Main_Page?title=Dallas_Temperature_Control_Library
- OneWire Bibliothek: http://www.pjrc.com/teensy/td_libs_OneWire.html
- Datenblatt bei Maxim für den DS18S20
- Datenblatt bei Maxim für den DS18B20
- Nette Seite: http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20