INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
DS18B20: ab 60 °C höhere Abweichung
02.03.2019, 14:46 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2019 21:29 von moehrle.)
Beitrag #1
DS18B20: ab 60 °C höhere Abweichung
Hallo, teste seid kurzem den Arduino Uno / Nano.

Nun habe ich die Aufgabe, eine Temperatur zu erfassen (bis ~ 120 °C). Da bin ichauf den DS18B20 gestoßen, da ich dann keinen AD-Wandler brauche.

Nun habe ich einen Testaufbau gemacht, mit folgenden Angaben:
- 12-Bit Auflösung
- nicht parasitäre Beschaltung (Sensor hängt an VCC von Arduino, +5V)

Nun haben wir ein Metall erwärmt, und den Sensor dran gehalten. Als Referenz zwei weitere Messgeräte, zur Kontrolle.

Hier ist dann aufgefallen, das bei knapp 50 °C (gemessen mit den beiden anderen Referenzmessgeräten), der Sensor nur 42 °C angezeigt hat.
Ich habe am Tag darauf den Versuch mit einem anderen Sensor (DS18B20) überprüft, war das gleiche Ergebnis.

Wenn die Temperatur noch weiter stieg, wurde auch die Abweichung größer.

Woran liegt das? Darf ich den Sensor über den kompletten Temperaturbereich evtl. nicht mit den 12-Bit betreiben (wobei dadurch eigentlich die Wandlungszeit verändert wird, je höher die Genauigkeit desto länger die Zeit) ?

Ich habe den auch mal in kochendes Wasser gehalten, da hat der Sensor (beide) auch nur ~84 °C angezeigt.

Macht es da unterschiede, ob man den Messwert mit der Methode:

messWert = sensors.getTempCByIndex(0);

aufruft? Oder müssen die Daten anders abgefragt werden?
Ich frage die Daten jedenfalls ohne zeitliche Verzögerung ab. Kann es daran liegen?
Außerdem habe ich noch den I2C für ein LCD-162 laufen.

Die Daten werden noch über Funk versendet 868Mhz.

Hat jemand eine Idee?

Code:
// Define User Types below here or use a .h file


#include <LiquidCrystal_PCF8574.h>

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

#include <RCSwitch.h>

LiquidCrystal_PCF8574 lcd(0x27);

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

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

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

RCSwitch rcSwitch = RCSwitch();

float messWert = 0.0;
unsigned int zaehler = 0;





// The setup() function runs once each time the micro-controller starts
void setup()
{
    // Sendemodul an dem digitalen PIN 9 angeschlossen.
    rcSwitch.enableTransmit(9);

    //// LCD-Ini, 16 Zeichen, 2 Zeilen
    lcd.begin(16, 2);
    lcd.setBacklight(1);


    delay(1000);
    Serial.begin(9600);
    //Serial.println("Temperatur Messprogramm");

    lcd.setCursor(0, 0);
    lcd.print("Temp-Messprogramm:");


    delay(1000);



    sensors.setResolution(12);
    lcd.print("Auflösung:");
    lcd.setCursor(0, 1);
    lcd.print("12-Bit");

    delay(1000);

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

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

    Serial.println("Starte Temperatur abfragen ...");

    lcd.clear();
    lcd.setCursor(0, 0);
    
    lcd.print("Temperatur in \337C:");

}

// Add the main program code into the continuous loop() function
void loop()
{
    //Serial.println();

    delay(200);

    sensors.getDeviceCount();
    sensors.requestTemperatures(); // Temp abfragen

    messWert = sensors.getTempCByIndex(0);
    //Serial.print("Messwert:");
    //Serial.print(messWert);
    //Serial.println(messWert);
    


    //Serial.print(sensors.getTempCByIndex(0));
    Serial.print(messWert);
    Serial.println(" °C");

    lcd.setCursor(0, 1);
    lcd.print(sensors.getTempCByIndex(0),2);
    lcd.print(" \337C");

    // Senden der Zeichenkette "Hallo Welt!"

    
    //rcSwitch.send("mess");
    //rcSwitch.send((unsigned long)messWert, 10);

    rcSwitch.send((long)messWert,10);
    
    
    //rcSwitch.send(sensors.getTempCByIndex(0),3);
    //rcSwitch.send(messWert, 10);


}







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 (oneWire.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();
    oneWire.reset_search();
    return;
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2019, 18:14 (Dieser Beitrag wurde zuletzt bearbeitet: 02.03.2019 18:23 von Fips.)
Beitrag #2
RE: DS18B20: ab 60 °C höhere Abweichung
(02.03.2019 14:46)moehrle schrieb:  ...mit den beiden anderen Referenzmessgeräten...
Geeicht?

Die allgemeinen Erfahrungen besagen das der DS18B20 bei Temperaturmessungen genauer ist als der BME280.


(02.03.2019 14:46)moehrle schrieb:  sensors.setResolution(9);
lcd.print("Auflösung:");
lcd.setCursor(0, 1);
lcd.print("12-Bit");

Ist das ein Wunschkonzert?


Einfach mal bei Miles Burton vorbeigeschauen!
Zitat:sensors.getResolution();


Gruß Fips

Meine Esp8266 & ESP32 Projekte
Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
02.03.2019, 21:34
Beitrag #3
RE: DS18B20: ab 60 °C höhere Abweichung
(02.03.2019 18:14)Fips schrieb:  
(02.03.2019 14:46)moehrle schrieb:  ...mit den beiden anderen Referenzmessgeräten...
Geeicht?

Die allgemeinen Erfahrungen besagen das der DS18B20 bei Temperaturmessungen genauer ist als der BME280.


(02.03.2019 14:46)moehrle schrieb:  sensors.setResolution(9);
lcd.print("Auflösung:");
lcd.setCursor(0, 1);
lcd.print("12-Bit");

Ist das ein Wunschkonzert?


Einfach mal bei Miles Burton vorbeigeschauen!
Zitat:sensors.getResolution();


Gruß Fips


Die 9-Bitauflösung war noch versehentlich drin.

Also, das waren zwei Messgeräte, aus der Werkstatt. Die beiden Geräte waren sich jedenfalls sehr einig.
Das Problem war halt, bei einer Temperatur von 60 °C (die beiden Fühler zeigten das) hatte der Sensor schon so ca. 8 °C weniger, bei 85 °C war die Differenz noch größer.

Im Datenblatt steht auch, das der Sensor ab 85 °C ungenauer wird, aber nicht in dieser Größenordnung.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Anzahl der DS18B20 ermitteln AlphaRay 3 1.676 02.08.2017 09:13
Letzter Beitrag: Fips
  DS18B20 Pool-Thermometer mit 7Seg.-Anzeige Evilgnievel 19 4.095 23.06.2017 09:27
Letzter Beitrag: Tommy56
  Datenlogger mit DS18B20 lcd und sd Kart FreDicnc 7 2.225 15.06.2017 09:48
Letzter Beitrag: hotsystems
  Zuordnung von DS18B20 Adressen Jelimi 41 16.746 26.10.2015 17:13
Letzter Beitrag: Jelimi
  DS18B20 - Zeit beim Auslesen verkürzen? ArduPI 3 4.114 09.01.2015 19:00
Letzter Beitrag: ArduPI
  Arduino UNO + DS18B20+ Temperaturschaltung robin 13 13.958 06.02.2014 19:47
Letzter Beitrag: robin

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste