Temperatur mit einem DS18B20 ermitteln

Eine einfache Art die Temperatur zu ermitteln, ist der Anschluss eines DS18B20. Der DS18B20 benutzt bis zu 12bit um die Temperatur über einen oneWireBus zu übermitteln. Dafür gibt es schon fertig Bibliotheken. Zum einen die “Arduino Library for Dallas Temperature ICs” von der Webseite. Zusätzlich ist auch die OnWire Bibliothek von der Arduino Webseite notwendig.
Der Aufbau erfolgt wie abgebildet. Wichtig ist der 4,7k Ohm Widerstand parallel zwischen Eingang und 5V. Ich benutze für den Datenanschluß PIN 7. In den Bespielen wird of PIN 2 benutzt. Es ist auch möglich weitere “DS18B20” in reihe zu schalten. Der Aufbau ist ähnlich und im Internet zu finden.

TemperatursingleDS18B20
image-197

 

Zum Auslesen gibt es ein kleines Beispielprogramm. Nach dem einspielen der Bibliotheken, einfach in den Examples der Arduino GUI gucken. Vorsicht ist geboten, da die Genauigkeit, bei manchen Scripts auf 9 bit gesetzt wird. Bis ich herausgefunden hatte das der DS18B20 mehrere Genauigkeiten unterstützt, hatte ich schon gedacht das mein zweiter Sensor defekt ist.

Die Genauigkeit kann auch wieder zurückgesetzt werden. Ich habe dafür das Beispielskript ein wenig entschlagt. Wichtig ist die Zeile 33 “sensors.setResolution(insideThermometer, 12);”.
Folgende Genauigkeit konnte ich dabei Nachvolziehen.

  • 9 bit 0,5 schritte
  • 10 bit 0,25 schritte
  • 11 bit 0,125 schritte
  • 12 bit 0,05 schritte

Je kleiner die Auflösung ist, desto schnell ist die Abfrage des Wertes. Auch für den Austausch eines alten Sensors ist die Genauigkeit wichtig. Der alte Sensor hatte nur eine Genauigkeit von 0,5. Um diesen zu ersetzen muss der neue Sensor vorher auch auf 9 bit gestellt werden.


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

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE_BUS 7

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// arrays to hold device address
DeviceAddress insideThermometer;

void setup(void)
{
// start serial port
Serial.begin(9600);
Serial.println("Dallas Temperature IC Control Library Demo");

// locate devices on the bus
Serial.print("Locating devices...");
sensors.begin();
Serial.print("Found ");
Serial.print(sensors.getDeviceCount(), DEC);
Serial.println(" devices.");

// search for devices on the bus and assign based on an index.
if (!sensors.getAddress(insideThermometer, 0)) Serial.println("Unable to find address for Device 0");

// set the resolution to 12 bit (Each Dallas/Maxim device is capable of several different resolutions)
sensors.setResolution(insideThermometer, 12);

Serial.print("Device 0 Resolution: ");
Serial.print(sensors.getResolution(insideThermometer), DEC);
Serial.println();
}

void loop(void)
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
Serial.print("Requesting temperatures...");
sensors.requestTemperatures(); // Send the command to get temperatures
Serial.println("DONE");

// It responds almost immediately. Let's print out the data
float tempC = sensors.getTempC(insideThermometer);
Serial.print("Temp C: ");
Serial.println(tempC);
delay(10000);
}

 

2 Comments

  1. Do you mind if I quote a few of your articles as long as I provide
    credit and sources back to your weblog? My blog site is in the
    exact same area of interest as yours and my users would definitely benefit from some of the information you present here.
    Please let me know if this ok with you. Thanks!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.