Mehrere DS18B20 Temperatur Sensoren abfragen

Ich habe mich zwischendurch mal ein wenig mehr mit den Temperatur Sensoren beschäftigt. Als kleine Erweiterung zum ersten Script habe ich die Abfrage so umgeschrieben, dass mehrere Sensoren abgefragt werden und die Genauigkeit gesetzt wird. Hauptsächlich habe ich das gemacht um im nächsten Schritt die Daten an MQTT zu übergeben.

MultiTemperature_Steckplatine2
image-298

Der Aufbau ist ähnlich. Es werden dabei die Sensoren hintereinander an den OneWire Bus (Orange – Mitte) angeschlossen angeschlossen. Spannung und Erde sind an den äußeren Beinen. Die Ausgabe der Arduino Konsole mit drei Sensoren sieht dabei wie folgt aus:

Temperatur_multi_arduino
image-299

Man sieht dabei auch das die Sensoren eine Ungenauigkeit haben.

#include <OneWire.h> // http://www.arduino.cc/playground/Learning/OneWire
#include <DallasTemperature.h> // http://milesburton.com/index.php?title=Dallas_Temperature_Control_Library

#define ONE_WIRE_BUS 7
#define TEMPERATURE_PRECISION 12

OneWire oneWire(ONE_WIRE_BUS); // Einrichten des OneWire Bus um die Daten der Temperaturfühler abzurufen
DallasTemperature sensors(&oneWire); // Bindung der Sensoren an den OneWire Bus

DeviceAddress tempDeviceAddress; // Verzeichniss zum Speichern von Sensor Adressen
int numberOfDevices; // Anzahl der gefundenen Sensoren

void setup(void)
{
   Serial.begin(9600);
   Serial.println("Abfrage mehrerer Dallas Temperatur Sensoren");
   Serial.println("-------------------------------------------");

   // Suche der Sensoren
   Serial.println("Suche Temperatur Sensoren...");
   sensors.begin();
   numberOfDevices = sensors.getDeviceCount();

   Serial.print("Habe ");
   Serial.print(numberOfDevices, DEC);
   Serial.println(" Sensoren gefunden.");

   // Setzen der Genauigkeit
   for(int i=0 ;i<numberOfDevices; i++) {
      if(sensors.getAddress(tempDeviceAddress, i)) {
         sensors.setResolution(tempDeviceAddress, TEMPERATURE_PRECISION);
         Serial.print("Sensor ");
         Serial.print(i);
         Serial.print(" hat eine genauigkeit von ");
         Serial.println(sensors.getResolution(tempDeviceAddress), DEC);
      }
   }
   Serial.println("");

}

void loop(void)
{
   // Aufruf der Funktion sensors.requestTemperatures()
   // Dadurch werden alle werte abgefragt.
   Serial.print("Abfrage der Temperatur... ");
   sensors.requestTemperatures();
   Serial.println("DONE");

   // Ausgabe der Daten für jeden Sensor
   for(int i=0 ;i<numberOfDevices; i++) {
      float tempC = sensors.getTempCByIndex(i);
      Serial.print("Sensor ");
      Serial.print(i, DEC);
      Serial.print(" hat grad Celsius: ");
      Serial.println(tempC);
   }
   delay(1000);
}

 

One Comment

  1. Peter

    Hallo,

    ich habe die gleichen Sensoren an einem AVR-NET-IO von Pollin getestet.
    Dort zeigen sie alle die gleiche Temperatur.
    Frage ich sie vom Arduino ab (über FHEM und Configurable Firmata) haben die drei eine Differenz von fast 1 Grad. Ein Kollege sagte etwas von einem Korrekturwert, den man von jedem 1820 auslesen muss und dann damit die Werte korrigieren.
    Leider habe ich dazu noch nichts näheres gefunden. Habe auch noch recht wenig Ahnung von Arduions und noch weniger von der Programmierung.

Schreibe einen Kommentar

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