Pages: [1] 2 3 ... 5   Go Down
Author Topic: Öl Temperatur messen, welcher Öltemperaturgeber? (KFZ)  (Read 8923 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Leute,

ich bin derzeit auf der Suche nach einem Öltempgeber (M12x1,5) für mein Arduino Uno, welches dann in der Ölablassschraube befestigt wird, habe soweit im Forum bisschen gelesen, bin mir jedoch nicht sicher welchen Tempsensor ich verwenden soll. (fürs Auto)

Es geht um die Öltemperatur, Sensor soll so etwas sein: http://www.kosoeurope.com/temperatursensor-m12xp1.5-150c-schwarzer-stecker

oder so etwas: http://www.ezt-autoteile.de/VDO-Sensoren/Zubehoer/VDO-Temperaturgeber/Geber-150C-Oeltemperatur/VDO-Temperaturgeber-fuer-Oeltemperatur-M12x15::42679.html

wobei ich mich nur Frage, zumindest beim VDO steht, Nennspannung: 6 - 24V, soviel gibt das Arduino doch gar nicht her?!

hat das jmd mal gemacht?
« Last Edit: March 22, 2013, 03:32:29 am by farewell » Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 270
Posts: 21845
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Nennspannug heißt der Spanungbereich bei dem der Sensor funktioniert. In diesem Fall geeignet für Motorräder, Autos und Lastwagen. Ohne Datenblatt bzw ohne zu wissen welch ein Sensor dieser Sensor ist ist es unmöglich eine korrekte Auswertung zu schreiben.
Grüße Uwe
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 10
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

technische Daten von VDO hab ich jetzt nur das gefunden:

http://www.temperaturgeber.de/vdo_temperaturgeber_daten.html

es muss jetzt auch nicht VDO sein, eine alternative die in die ölablassschraube reinpasst, wäre mir ja auch recht =)
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das passt gut.

Ein Heissleiter ist nur ein Widerstand. Den verbindest du mit einem anderem Widerstand zu einem Spannungsteiler und schliesst ihn zwischen GND und 5V.

5V  -- R --+-- Geber == GND
              |
             Analog-Eingang

Im Beispiel "Öltemperatur"

60°C - 221,2 Ohm
90°C -   83,0 Ohm
120°C -   36,5 Ohm

wäre z.B. ein 100 Ohm Widerstand schön. ( Das zieht zwar ca. 30 mA aus der 5V Versorgung, gibt aber einen weiten Messbereich )
Da der Geber auch 24 V aushalten würde, macht ihm dieser Strom sicher nichts aus.
Der Widerstand sollte eine 1/4W Version sein.

Bei 90 ° misst du ca. 465  (2.27 V)
     120° sind  etwa   275  (1.34 V)
( mit dem 100 Ohm Vor-Widerstand )
Logged

Forum Moderator
BZ (I)
Online Online
Brattain Member
*****
Karma: 270
Posts: 21845
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Problem ist daß der PTC den Widerstand nicht linear mit der Temperatur ändert.
Grüße Uwe
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 160
Posts: 3168
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das Problem ist daß der PTC den Widerstand nicht linear mit der Temperatur ändert.

Das ist normalerweise kein Problem, wenn er ein Multimeter mit möglichst genauem Widerstandsmessbereich hat. Und es ist ein NTC Widerstand (siehe unten).

Dann braucht er nur bei zwei möglichst genau bestimmten Temperaturen den Widerstand seiner VDO-Messschraube auszumessen und kann sich leicht die Formel ermitteln, mit deren Hilfe er dann JEDE Temperatur aus den Messungen mit seinem Arduino ausrechnen kann.

Die Kennlinie eines NTC ist zwar nicht linear, aber praktisch trotzdem durch Messung an zwei Temperaturpunkten zu ermitteln, aufwändiger ist das gar nicht, denn es besteht ein logarithmischer Zusammenhang.

VDO-Schraube in 0° kaltes Wasser hängen ==> Widerstand bei 0° messen
VDO-Schraube in kochendes Wasser hängen ==> Widerstand bei 90° bis 100° messen (je nach Höhenlage über Meeresspiegel)

Damit ist dann alles klar. Wem nicht, dem rechne ich das mal vor, wie die Kalibrierwerte für die Formel ermittelt werden, und wie man aus dem Arduino mit Mess-Vorwiderstand und der Formel dann immer die passende Temperatur ausrechnet.

[Edit] Was rede ich eigentlich vom Messen, die Werte für den 150°-VDO-Öltemperaturgeber stehen im Internet, so dass man damit sofort losrechnen könnte:
http://www.temperaturgeber.de/vdo_temperaturgeber_daten.html

Und das mit dem Rechnen mache ich dann auch gleich mal.
Falls Du einen Standard-Sketch für Messungen mit NTCs verwendest, der die NTC Materialkonstante "B" erfordert, hier die Berechnung des Datenblattwerts "B" anhand der Öltemperatur-Sensordaten auf der Webseite (absolute Temperaturen in Kelvin von mir ergänzt):
60°C ==> 333,15K ==> 221,2 Ohm
120°C ==> 393,15K ==>  36,5 Ohm

Formel für die Konstante B
B= (T1 * T2)/ (T2-T1) * ln(R1/R2)

Einsetzen (mit absoluten Temperaturen in Kelvin):
B= (393,15*333,15)/(393,15-333,15)* ln(221,2/36,5) = 3933

Damit hast Du als Datenblattwerte für den VDO-Sensor zum Einsetzen in einschlägige Berechnungsformeln (wie sie z.B. in den Datenblättern beliebiger NTC-Widerstände genannt werden):
T1 = 333,15 K
R1 = 221,2 Ohm
B = 3933
Die Berechnungsformeln selbst können aus jedem beliebigen Datenblatt eines beliebigen Herstellers von NTC-Widerständen entnommen werden, den Formeln ist es nämlich egal, wenn man in den Formeln die Konstanten eines anderen NTC von einem Fremdhersteller einsetzt.

Wenn das Rechnen das Problem ist, kann ich natürlich noch weiterrechnen und ein paar Zeilen Code dazu schreiben.
« Last Edit: March 22, 2013, 04:30:50 pm by jurs » Logged

at the gate to high forest
Offline Offline
Full Member
***
Karma: 11
Posts: 191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo!
Ich verstehe nicht ganz wie man aus 2 Punkten eine Kurve berechnet, kannst du deine Rechnung in einem Diagramm oder einer Excel Tabelle zeigen?

Ich hab den Sensor seit zwei Jahren im Auto zur Öltemperatursensor, nutze ihn aber bisher nur als Grenzwertüberwachung. Hatte auch hin und her gerechnet und auch nur die Kurve durch den Spannungsteiler etwas strecken können. So hatte ich einen Messbereich von 70 - 130C° aber immer noch mit einer Toleranz von +/- 2,5C°.


Gruß

Heinz
« Last Edit: March 24, 2013, 10:24:56 am by Scherheinz » Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 160
Posts: 3168
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich verstehe nicht ganz wie man aus 2 Punkten eine Kurve berechnet, kannst du deine Rechnung in einem Diagramm oder einer Excel Tabelle zeigen?

Tja, wo man doch aus der Mathematik weiß, dass zwei Punkte mal eben so eine Gerade exakt bestimmen können, ist das vielleicht schwer verständlich.

Vielleicht wird es verständlicher, wenn Du folgende Zusatzbedingung hinzumimmst:
Die Widerstandskurve eines NTC-Widerstands verläuft logarithmisch

Und wenn Du diese Zusatzbedingung als bekannt annimmst, kannst Du die Widerstandskurve eines NTC-Widerstands tatsächlich aus nur zwei Punkten der Kurve ermitteln.

Sobald Du zu jeder Temperatur den Widerstand des NTC ("Temperaturfühler") kennst, dann kannst Du aus den Daten der Schaltung für Vorwiderstand, Betriebsspannung und gemessene Spannung jederzeit den aktuellen Widerstand des NTC ermitteln und von diesem widerum mit hoher Genauigkeit auf die aktuelle Temperatur zurückschließen.

kannst du deine Rechnung in einem Diagramm oder einer Excel Tabelle zeigen?

Sorry, Diagramm oder Excel-Tabelle, sowas kann ich nicht.

Wenn es Dir reicht, kann ich Dir die noch zusätzlich notwendigen Formeln herleiten, so daß Du am Ende aus den Schaltungsdaten (NTC-Konstante B wie oben vorgerechnet, Vorwiderstand, Betriebsspannung) und dem Meßwert (analogRead am Pin) die Temperatur ausrechnen kannst, direkt in Arduino-Code.

Soll ich mal versuchen, das verständlich zusammenzuschreiben?
« Last Edit: October 22, 2013, 12:42:36 pm by jurs » Logged

at the gate to high forest
Offline Offline
Full Member
***
Karma: 11
Posts: 191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das wäre super! Ich versuche mir halt immer über Excel was herzuleiten, aber selbst wenn das klappt ist es noch schwierig das Ganze in den Arduino zu bekommen  smiley-wink

 Hab gerade noch was gefunden....

http://e30-talk.com/attachments/elektrik/141061d1352352184-zusatzinstrumente-durchmessen-vergleichen-vdo-temp-geber_kennlinien.pdf
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 135
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Tach!

Ich mache zur Zeit genau das Gleiche wie Du.

Also die Temp.-Sensoren von Koso sind 10k NTC's.

Ich kann Dir gerne meinen Code zur Verfügung stellen, dann kannst Du mit dem NTC + Spannungsteileraufbau einfach Deine Temperatur errechnen.
Zum Spannungsteileraufbau:
http://www.nextit.de/2011/07/thermometer-mit-arduino/

Hier kannst Du mein Projekt sehen:
http://arduino.cc/forum/index.php/topic,148346.0.html
Am Ende gibts auch nen kleines Video zum Ist-Stand.
« Last Edit: March 24, 2013, 11:21:05 am by maeckes » Logged

at the gate to high forest
Offline Offline
Full Member
***
Karma: 11
Posts: 191
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Also mein VDO ist ein 1K NTC. Bin gerade dabei mir die Widerstandstabelle anzuschauen
Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 160
Posts: 3168
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das wäre super! Ich versuche mir halt immer über Excel was herzuleiten, aber selbst wenn das klappt ist es noch schwierig das Ganze in den Arduino zu bekommen  smiley-wink

So hier zunächst mal die Herleitung der Formeln. Um weitgehend konform mit den Datenblättern der NTC-Hersteller zu sein, bezeichne ich im folgenden die Nenntemperatur des NTC als T0, den Nennwiderstand als R0 (also etwas abweichend wie oben bei der Herleitung der Materialkonstanten B).

Die Schaltung: Temperatur-Messschaltung mit NTC/Thermistor

VB -----<Vorwiderstand>-----<NTC-Messwiderstand>----- Ground 0V
5V            RV         |        RN
                         |      
                         |      
                        VA
                    Analogeingang
                      am Arduino

mit
VB = Betriebsspannung des Arduino (irgendwo bei ca. 5V)
RV = Vorwiderstand
RN = Widerstand des NTC (temperaturabhängig!)
VA = Spannung am Arduino-Messeingang

Es gelte die vereinfachte Annahme, dass der Analogeingang des Arduino so hochohmig sei,
dass dort kein Strom hindurchfließt, sondern der Strom rein von VB über den Vorwiderstand,
und den NTC-Widerstand nach Ground fließe.

Dann gilt jeweils das Ohmsche Gesetz (U=R*I):

VA = RN*I
VB = (RV+RN)*I             |Gleichungen dividieren

VA/VB= (RN*I)/((RV+RN)*I)  |I kürzen

VA/VB= RN/(RV+RN)          |*(RV+RN)

VA/VB*(RV+RN)= RN          |weiter umformen

RV*VA/VB + RN* VA/VB = RN

RV*VA/VB = RN - RN*VA/VB

RV*VA/VB = RN(1-VA/VB)

RN= RV*VA/VB / (1-VA/VB) ==> Formel für den Widerstand des NTC-Widerstands!

Weiter geht's mit einer Formel aus dem NTC-Datenblatt eines beliebigen Herstellers von NTC-Widerständen
T = T0 * B / (B + T0 * ln(RN / R0))

Falls die Materialkonstante B aus einem Datenblatt bekannt ist, kann man diese zur Berechnung verwenden. Und falls man nur zwei Wertepaare aus Temperatur und Widerstand hat, kann die Konstante selbst berechnet werden. Ich habe deshalb mal zwei Funktionen gemacht, und zwar zur Verwendung bei bekannter Materialkonstante B aus einem Datenblatt:
float temperature_NTCB(float T0, float R0, float B, float RV, float VA_VB)

Und falls man die Materialkonstante B nicht hat, aber dafür zwei Wertepaare für Temperatur und Widerstand:
float temperature_NTC(float T0, float R0, float T1, float R1, float RV, float VA_VB)

Die einzelnen Parameter sind im Code nochmal erklärt. Die Variable "VA_VB" bezeichnet das Verhältnis aus Spannung am NTC geteilt durch die Betriebsspannung. Praktischerweise ermittelt der Aruino genau dieses Verhältnis in 1024 Schritten, so daß man an der Stelle einfach den Messwert des Analogpins geteilt durch den Maximalwert 1023.0 (das .0 damit es eine Float-Variable wird) übergeben kann.

Vielleicht mag mal jemand den Code testen. Ich habe gar keinen NTC hier.
Code:
// 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)
// Ermittlung der Temperatur mittels NTC-Widerstand
// Version der Funktion bei gegebener Materialkonstante B
// Erklärung der Parameter:
// T0           : Nenntemperatur des NTC-Widerstands in °C
// R0           : Nennwiderstand des NTC-Sensors in Ohm
// B            : Materialkonstante B
// Vorwiderstand: Vorwiderstand in Ohm  
// VA_VB        : Spannungsverhältnis "Spannung am NTC zu Betriebsspannung"
// Rückgabewert : Temperatur
{
  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;
}


float temperature_NTC(float T0, float R0, float T1, float R1, float RV, float VA_VB)
// Ermittlung der Temperatur mittels NTC-Widerstand
// Version der Funktion bei unbekannter Materialkonstante B
// Erklärung der Parameter:
// T0           : Nenntemperatur des NTC-Widerstands in °C
// R0           : Nennwiderstand des NTC-Sensors in Ohm
// T1           : erhöhte Temperatur des NTC-Widerstands in °C
// R1           : Widerstand des NTC-Sensors bei erhöhter Temperatur in Ohm
// Vorwiderstand: Vorwiderstand in Ohm  
// VA_VB        : Spannungsverhältnis "Spannung am NTC zu Betriebsspannung"
// Rückgabewert : Temperatur
{
  T0+=ABSZERO;  // umwandeln Celsius in absolute Temperatur
  T1+=ABSZERO;  // umwandeln Celsius in absolute Temperatur
  float B= (T0 * T1)/ (T1-T0) * log(R0/R1); // Materialkonstante B
  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 A2

void loop()
{
  float T0=60;    // Nenntemperatur des NTC-Widerstands in °C
  float R0=221.2; // Nennwiderstand des NTC-Sensors in Ohm
  float T1=120;   // erhöhte Temperatur des NTC-Widerstands in °C
  float R1=36.5;  // Widerstand des NTC-Sensors bei erhöhter Temperatur in Ohm
  float Vorwiderstand=100; // Vorwiderstand in Ohm  
  float temp;    
  int aValue=analogRead(ANALOGPIN);
  
  // Berechnen bei unbekannter Materialkonstante
  temp=temperature_NTC(T0, R0, T1, R1, Vorwiderstand, aValue/MAXANALOGREAD);
  Serial.print("NTC : ");Serial.print(temp);Serial.println(" C");
  // Berechnen bei bekannter Materialkonstante B=3933;
  temp=temperature_NTCB(T0, R0, 3933, Vorwiderstand, aValue/MAXANALOGREAD);
  Serial.print("NTCB: ");Serial.print(temp);Serial.println(" C");
  delay(1000);
}
« Last Edit: October 07, 2013, 03:29:55 am by jurs » Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich mache das folgender maßen

5V--------2k7 1%----------KTY81/110---------GND

Zwischen dem 2k7 und dem KTY gehe ich zum Analogeingang
da das KFZ Bordnetz Störungen verursacht würde ich noch eine Schutzschaltung für den Analog eingang empfehlen

siehe anhang

* KTY81-110.pdf (12.06 KB - downloaded 47 times.)
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3071
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
da das KFZ Bordnetz Störungen verursacht würde ich noch eine Schutzschaltung für den Analog eingang empfehlen


Mal abgesehen davon, dass Schutzschaltungen nie schaden,
verstehe ich das so, dass die Schaltung von den 5V des Arduino gespeist wird ( die auch als Aref verwendet werden kann / sollte ).

Zu meinem Versändnis:
Wie kommen da Störungen zustande, vor denen die Zusatz-Schaltung schützen soll ?
(Woher man saubere 5V her kriegt, ist eine andere Frage)
Logged

Germany
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Störungen können zb über die masseleitung kommen
zb von der Zündanlage Zündspulen etc auch die Lichtmaschine kann Störungen im Bordnetz verursachen
wie du saubere 5V bekommst kannst du hier sehen


* Spannungsversorgung.pdf (13.92 KB - downloaded 76 times.)
Logged

Pages: [1] 2 3 ... 5   Go Up
Jump to: