Temperaturberechnung mittels NTC-Widerstand

Hallo Leute,

ich versuche mittels eines NTC-Widerstandes an einem Arduino Uno die Temperatur auszulesen.
Leider scheitere ich an der Umrechnung des Siganls in C°.
Den Schaltungsaufbau findet ihr im Anhang.

Ich bekomme beim auslesen an A0 den Wert von ca. 510 ausgegeben.
Nun weiß ich nicht wie ich den umrechnen muss, damit ich ich was sinnvolles rausbekomme.

Es geht um diesen NTC-Widerstand: http://temperatur-shop.de/index.php?cat=KAT72&lang=DEU&product=TS-NTC-502%20(502358)&sid78910D081B7F411D80FC469D5E1017A8=8d947422e9373b4ca00e5335751c01af

Vielen Dank im Voraus

Grüße

Marco

Anschluss.jpg

Marco_G:
Nun weiß ich nicht wie ich den umrechnen muss, damit ich ich was sinnvolles rausbekomme.

Für die Schaltung "NTC mit Vorwiderstand" habe ich hier in diesem Thread einige Beiträge gepostet:
http://forum.arduino.cc/index.php?topic=155733.0

Unter anderem, wie Du Dir bei fehlendem Datenblatt aus den Werten von nur zwei Temperaturpunkten die Materialkonstante B herleiten kannst, die dann in den üblichen NTC-Berechnungsformeln eingesetzt werden kann:
http://forum.arduino.cc/index.php?topic=155733.msg1168213#msg1168213

Und für die Verwendung in Arduino-Programmen zwei Funktionen zur Temperaturberechnung, davon die eine Funktion zur Verwendung bei bekannter Materialkonstante B und die andere Funktion, wenn man nur zwei Temperaturpunkte von der Kennlinie kennt:
http://forum.arduino.cc/index.php?topic=155733.msg1170722#msg1170722

Vielleicht kannst Du ja etwas damit anfangen.

B kann man aus dem Datenblatt ablesen:

Beim TS-NTC-502 ist das 3976

Vielen Dank für die schnelle Antwort. :slight_smile:

Der Thread muss untergegangen sein bei mir :slight_smile:

Grüße

Marco

Guck mal hier - steht alles
http://www.nextit.de/2011/07/thermometer-mit-arduino/

Ich habe jetzt den Quelltext aus dem Thread genommen und angepasst.
Es scheint auch zu funktionieren, obwohl mir ein Wert von 26 °C etwas hoch vorkommt. :slight_smile:

Jetzt zu meiner eigentlichen Frage:
Woher weiß das Programm wie hoch VA_VB ist, wenn es nicht definiert bzw. mit Analogpin verknüpft wurde?

// NTC temperature calculation by "jurs" for German Arduino forum
#define ABSZERO 273.15
#define MAXANALOGREAD 1023.0

float temperature_NTCB(float T0, float R0, float B, float RV, float VA_VB)
{
  T0+=ABSZERO;  // umwandeln Celsius in absolute Temperatur
  float RN=RV*VA_VB / (1-VA_VB); // aktueller Widerstand des NTC
  return T0 * B / (B + T0 * log(RN / R0))-ABSZERO;
}

void setup()
{
  Serial.begin(9600);
}

#define ANALOGPIN A0

void loop()
{
  float T0=25;    // Nenntemperatur des NTC-Widerstands in °C
  float R0=5000; // Nennwiderstand des NTC-Sensors in Ohm
  float B=3976;   // Materialkonstante B
  float RV=4700; // Vorwiderstand in Ohm  
  float temp;    
  int aValue=analogRead(ANALOGPIN);
  // Berechnen bei bekannter Materialkonstante B;
  temp=temperature_NTCB(T0, R0, B, RV, aValue/MAXANALOGREAD);
  Serial.print("NTCB: ");Serial.print(temp);Serial.println(" C");
  delay(500);
}

Ich bin noch Anfänger im Programmieren und deshalb ein wenig unbeholen damit.

Vielen Dank

VA_AB ist aValue/MAXANALOGREAD

Siehe hier:

Kurz, das Ergebnis der Rechnung wird beim Methoden Aufruf in die Parameter-Variable kopiert.

ah, jetzt seh ich es auch :slight_smile: hätte ich selber draufkommen können :slight_smile:

Danke!

Marco_G:
Ich habe jetzt den Quelltext aus dem Thread genommen und angepasst.
Es scheint auch zu funktionieren, obwohl mir ein Wert von 26 °C etwas hoch vorkommt. :slight_smile:

Tja, jetzt müßtest Du noch die "Eigenerwärmung des Sensors" herausrechnen, wenn Du es genauer benötigst, denn: Der Sensor hat einen elektrischen Widerstand und es fließt ein Strom hindurch. Das bewirkt einen Spannungsabfall und die im Sensor entstehende Verlustleistung beträgt:
P = U*I

Mal überschlägig gerechnet: Der Vorwiderstand sei 4.7K, der Widerstand des Sensors bei 25°C sei 5K, dannn hängt die Messschaltung an 9,7K @roundabout 5V, was zu einem Strom durch den Sensor führt von:
I = U/R = 5 V / 9700 Ohm = ca. 0,515 mA

Davon fallen am Sensor ab 5/9,7 *5V = 2,58 V

Macht eine Verlustleistung am Sensor von ca. P=U*I= 1,33 mW

Der Sensor ist also quasi eine Eigenheizung mit einer Heizleistung von 1,33 mW. Das ist nicht viel, aber der Sensor ist klein, und laut Datenblatt hat der Sensor diese Eigenschaft:
Eigenerwärmung: 1,2 mW/K

D.h. unter den gegebenen (bzw. angenommenen) Messumständen wären von dem mit meiner Formel aus dem Thread ermittelten Temperatur noch die Eigenerwärmung abzuziehen, die da beträgt:
deltaT= 1,33/1,2 = 1,1°C

Also wäre die um die Eigenerwärmung korrigierte Temperatur nur 26-1.1 = 24.9°C

Im übrigen hat der Sensor Toleranzen: Eine Toleranz des Widerstands von 0,5% bedeutet auf eine absolute Temperatur (vom absoluten Nullpunkt aus gerechnet) von 273+25= 298, davon 0,5% = 298*0,005= ca. 1.5°C

D.h. die gemessene Temperatur beträgt dann 24,9°C +/-1.5°C.

Bitte berücksichtige, dass Temperatursensoren ggf. relativ lange Zeit benötigen, um die aktuelle Lufttemperatur anzunehmen, und sobald "warme Körper" in der Nähe sind und Wärmestrahlung auf den Sensor abstrahlen, sich immer eine "Mischtemperatur" einstellt, die irgendwo zwischen der "Lufttemperatur" und der "Temperatur des warmen Körpers in der Nähe" liegt.

Marco_G:
Jetzt zu meiner eigentlichen Frage:
Woher weiß das Programm wie hoch VA_VB ist, wenn es nicht definiert bzw. mit Analogpin verknüpft wurde?

Das Verhältnis VA_VB (mathematisch VA/VB) wird in meinem Beispielprogramm direkt beim Funktionaufruf ermittelt.

Die maximale Spannung am Analogpin entspricht der Betriebsspannung bzw. 1023 als ADC-Messwert.
Die tatsächliche Spannung am Analogpin ist der gelieferte Analogwert.
Das Verhältnis von gemessener Spannung zu Betriebsspannung ist also immer
VA_VB ==> VA/VB = Analogwert/1023.0

Vielen Dank für die hilfreichen Antworten :slight_smile: Ihr seit Super :slight_smile:

Grüße

Tja, jetzt müßtest Du noch die "Eigenerwärmung des Sensors" herausrechnen...

Macht eine Verlustleistung am Sensor von ca. P=U*I= 1,33 mW

Der Sensor ist also quasi eine Eigenheizung mit einer Heizleistung von 1,33 mW. Das ist nicht viel, aber der Sensor ist klein, und laut Datenblatt hat der Sensor diese Eigenschaft:
Eigenerwärmung: 1,2 mW/K

Ist das tatsächlich so ???

Dieses ca. 1.1°C ( ja, korrekt wäre 1.1 Kelvin) durch 1.3 mW wird doch aber auch (evtl. nur zum Teil) an die zu messende Umgebung abgegeben, oder nicht?
Wenn der NTC mit Wärmeleitpaste an einem "unendlich" großen Stück Kupfer-Rohr mit warmem Wasser drin befestigt ist, dessen Temperatur er messen soll, glaube ich einfach nicht, dass der Sensor, das Rohr und das ganze Wasser mit meinen 1.3 mW messbar erwärmt werden...

michael_x:
Wenn der NTC mit Wärmeleitpaste an einem "unendlich" großen Stück Kupfer-Rohr mit warmem Wasser drin befestigt ist, dessen Temperatur er messen soll, glaube ich einfach nicht, dass der Sensor, das Rohr und das ganze Wasser mit meinen 1.3 mW messbar erwärmt werden...

Ja, auch meiner Meinung nach beziehen sich die Datenblattwerte des Herstellers wohl kaum auf Deine speziellen Applikation mit Wärmeleitpaste und Kupfer-Rohren. Wenn im Datenblatt steht "Eigenerwärmung 1,2 mW / K, Ansprechzeit 15s in stehender Luft" dann würde ich vermuten, dass sich auch die Eigenerwärmung auf den Betriebszustand "in stehender Luft" bezieht.

Nur so am Rande: NTCs werden auch als Flüssigkeitssensoren verwendet. Eine Flüssigkeit leitet die Eigenerwärmung einfach besser ab als Luft und so kann eine Flüssigkeit detektiert werden.
Grüße Uwe