Temperatur Messung mit dem DS18B20 und Arduino Nano

Habe heute einen One-Wire DS18B20 Temperatursensor erhalten und ihn mit dem Arduino Nano verbunden. Der Messbereich des Sensors beträgt von -55°C bis +125°C bei ± 0,5°C Genauigkeit.

Mit den OneWire 2.2 und Dallas Temperature Control Library 3.7.2 Bibliotheken ist die
Temperaturmessung schnell zusammengebaut.

Hier das Foto des Aufbaus mit Schaltplan:

Arduino Nano Temp. Messung via 1-Wire
Arduino Nano Temp. Messung via 1-Wire

Das Programm (8038 byte) gibt zuerst die eindeutige ID des Sensors aus, (28-A2-9D-8A-04-00-00-2B) und dann jede Sekunde den neuen Messwert:


/* 
TWTemp Version 1.0 vom 14.06.2013 

8038 bytes

Thomas Wenzlaff http://www.wenzlaff.de

Temperature Sensor DS18B20 an Digitalen Port Pin 2 wie folgt verbunden
Links=Masse, 
Mitte=Data, 
Rechts=+5V, 
3300 to 4700 Ohm Widerstand von +5V nach Data.

Es wird erst die Adresse des 1-Wire-Device ausgegeben und dann wird die Temperaturmessung gestartet.

*/

/* Benötigte Bibliotheken importieren */
#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2 /* Digitalport Pin 2 definieren */

OneWire ourWire(ONE_WIRE_BUS); /* Ini oneWire instance */

DallasTemperature sensors(&ourWire);/* Dallas Temperature Library für Nutzung der oneWire Library vorbereiten */

void setup()
{
delay(1000);
Serial.begin(9600);
Serial.println("Temperatur Messprogramm");
Serial.println("TWTemp 1.0 vom 14.06.2013");
Serial.println("http://www.wenzlaff.de");
delay(1000);

sensors.begin();/* Inizialisieren der Dallas Temperature library */

adresseAusgeben(); /* Adresse der Devices ausgeben */

Serial.print("Starte Temperatur abfragen ...");
}

void loop()
{
Serial.println();

sensors.requestTemperatures(); // Temp abfragen

Serial.print(sensors.getTempCByIndex(0) );
Serial.print(" Grad Celsius");
}

void adresseAusgeben(void) {
  byte i;
  byte present = 0;
  byte data[12];
  byte addr[8];

  Serial.print("Suche 1-Wire-Devices...\n\r");// "\n\r" is NewLine
  while(ourWire.search(addr)) {
    Serial.print("\n\r\n\r1-Wire-Device gefunden mit Adresse:\n\r");
    for( i = 0; i < 8; i++) {
      Serial.print("0x");
      if (addr[i] < 16) {
        Serial.print('0');
      }
      Serial.print(addr[i], HEX);
      if (i < 7) {
        Serial.print(", ");
      }
    }
    if ( OneWire::crc8( addr, 7) != addr[7]) {
      Serial.print("CRC is not valid!\n\r");
      return;
    }
  }
  Serial.println();
  ourWire.reset_search();
  return;
}

Um die höchstmögliche Genauigkeit des Sensors auszulesen ist im Setup noch dieser Befehl nötig, damit dauert die Messung aber etwas länger:

So sieht die Ausgabe des Programms aus:

TWTemp Ausgabe
TWTemp Ausgabe

Als nächstes folgt dann der Zugriff via Java.