Spannungsteiler: Öltemperatursensor am KFZ

Hi Leute,

habe mal wieder etwas mehr Zeit an meiner Multianzeige am Auto zu arbeiten. Jetzt plage ich mich schon bis um 5:00 Uhr morgens mit dem blöden Thema und komme irgendwie nicht weiter. Ich will einen Raid HP Öltemperatursensor auslesen. Soweit ich weis, reichen dafür die 5V vom Arduino nicht aus. Mein Hauptproblem ist, wie baue ich einen entsprechenden Spannungsteiler? Wo genau wird der Sensor eingebaut? Wo greife ich mit dem Arduino mein Signal ab?

Anbei mal die Kennlinie des Öltemperatursensors:

Quelle der Kennlinie: http://home.arcor.de/bolle-is-back/downloads/Raid-HP_Oeltemp.pdf

Ich habe mich mal an einem Spannungsteiler versucht. Auf Youtube gibt es diverse Videos. Nur wie gesagt, wo kommt der Sensor hin und wo greife ich das Signal für den Analog Eingang ab?

Hier mal ein verzweifelter Versuch, wie ich aus den 12V wenigstens mal 5V hinkriege, aber der Sensor muss ja noch platziert werden.

Ich würde mich echt freuen, wenn ihr mir weiterhelfen könntet.

Gruß

Irfan

Link zum Sensor fehlt.

Ich weiß aber nicht, was du da mit einem Spannungsteiler an 12 Volt willst ?

Aus der Kennlinie geht hervor, dass es ein Widerstand ist und da kannst du auch direkt einen Spannungsteiler an 5 Volt aufbauen und die Spannung mit dem Arduino messen.

Weitere Infos erhältst du sicher von den KFZ-Experten.

Achilles84:
ch will einen Raid HP Öltemperatursensor auslesen. Soweit ich weis, reichen dafür die 5V vom Arduino nicht aus. Mein Hauptproblem ist, wie baue ich einen entsprechenden Spannungsteiler? Wo genau wird der Sensor eingebaut? Wo greife ich mit dem Arduino mein Signal ab?

So ein Öltemperatursensor wird üblicherweise anstelle der Ölablßschraube eingebaut. Also Ölablaßschraube rausdrehen, Öltemperatursensor einschrauben.

Den Masse-Anschluß (0V/ Ground) bekommt der Sensor dann über sein Schraubgewinde mit der Ölwanne.

Informiere Dich über das passende Gewinde der Ölablaßschraube, damit Du Dir einen passenden Sensor lkaufst! Ansonsten müßtest Du anfangen, die Ölwanne zu modifizieren und da erstmal ein geeignetes Gewinde dranbekommen, wo Du den Sensor einschrauben kannst.

Und der Signalanschluß ist entweder mit einem angeflanschten Flachstecker herausgeführt, oder wie auf dem Bild Deines Sensors mit einem kürzen Stückchen Anschlußdraht, so wie auf dem Bild:

Vorsicht: Bei Vibrationen besteht bei so einem Drahtanschluss an der Schraube die Gefahr eines Kabelbruchs, Dauerschwingungsbruch durch Vibrationseinwirkung. Also beim Einbau darrauf achten, dass der herausgeführte Draht nicht zu sehr in Schwingungen geraten kann, wenn Du so einen Öltemperaturgeber mit Drahtanschluss verwendest!

Den Widerstand bildet Dein Temperaturgeber zwischen Masse und dem Anschlußdraht.

Und so ein Widerstand funktioniert sehr wohl auch mit 5 Volt.

Dies ist also der "variable Widerstand" in Deiner Spannungsteilerschaltung, dessen Wert gemessen werden soll. Zusätzlich brauchst Du noch einen "Festwiderstand.

Den Wert des Festwiderstands legst Du danach fest, in welchem Temperaturbereich Du die höchste Empfindlichkeit/Genauigkeit der Temperaturmessung haben möchtest. Der Festwiderstand im Spannungsteiler sollte also bei ca. 1000 Ohm (ca. 1K) liegen, wenn die Messungen bei ca 45 Grad Öltempemperatur am besten werden sollen, und bei ca. 51 Ohm, wenn Du die genauesten Temperaturmessungen lieber bei 135 Grad Öltemperatur haben möchtest.

Da kann ich jurs nur beipflichten. Genau so funktioniert das. Hab das auch mit einem VDO Sensor so bei mir gemacht. Laut Datenblatt wäre der auch mit 6-24 V zu verwenden. Aber da es eben nur ein variabler Widerstand (in meinem Fall NTC) ist, funktioniert das genau so mit 5 V.

Den variablen Widerstand schaltest du mit einem Vorwiderstand in Serie. Zwischen den beiden Widerständen liegt der Analog In.

Darf ich fragen welche Multifunktionsanzeige du für welches Auto bastelst. Arbeite an einem ähnlichen Projekt :slight_smile:

LG

Hallo Leute,

vielen Dank schon mal für all eure Antworten.

So ein Öltemperatursensor wird üblicherweise anstelle der Ölablßschraube eingebaut. Also Ölablaßschraube rausdrehen, Öltemperatursensor einschrauben.

....

Informiere Dich über das passende Gewinde der Ölablaßschraube, damit Du Dir einen passenden Sensor lkaufst! Ansonsten müßtest Du anfangen, die Ölwanne zu modifizieren und da erstmal ein geeignetes Gewinde dranbekommen, wo Du den Sensor einschrauben kannst.

Hey Jurs, vielen Dank für deine ausführtliche Antwort. Ich habe an meinem C20LET Motor vor, den Temperatursensor direkt an die Ölpumpe zu verbauen. Dafür ist werksseitig bereits eine Blindschraube vorhanden.

Und der Signalanschluß ist entweder mit einem angeflanschten Flachstecker herausgeführt, oder wie auf dem Bild Deines Sensors mit einem kürzen Stückchen Anschlußdraht, so wie auf dem Bild:

Hier mal ein Foto von meinem Sensor, das dürfte sogar exakt der selbe sein. Anbei auch noch die passenden Adapterstücke. Öldruck ist auch noch in Planung.

Ich bin mal davon ausgegangen, dass schwarz = masse ist und weiß = Signal (Widerstand). Ist das richtig?

Mein Anschluss sah folgendermaßen aus:

Da habe ich dann versucht bei Zimmertemperatur 22°C über den Seriellen Monitor, A0 auszulesen. Der hat mir immer den Wert 0 ausgespuckt.

Was mache ich denn falsch?

Sicher, dass dein Sensor Massefrei anschschliessen ist, und der zweite nicht etwa ein Zusatz-Warnkontakt ist?

Da habe ich dann versucht bei Zimmertemperatur 22°C über den Seriellen Monitor, A0 auszulesen. Der hat mir immer den Wert 0 ausgespuckt.

Was mache ich denn falsch?

  • Der Sensor ist kein NTC, sondern ein Schalter ?
  • Dein Sensor ist nicht massefrei anzuschliessen, der zweite Draht ist evtl ein Zusatz-Warnkontakt ?
  • Du hast es nicht so angeschlossen wie im Bild ?
  • Du hast einen Fehler im Sketch ?

Du hast doch sicher ein Multimeter, um dir den Sensor mal anzusehen...

In der Doku findet sich mehrfach: schwarz vom Geber an Masse(!)
Genau so:

  1. Fett
  2. Unterstrichen
  3. und mit Rufzeichen hinten dran
    Naja...
    Vielleicht hat das ja nichts zu bedeuten...

Hi Leute,

habe das ganze Schema nochmal neu aufgebaut. Diesmal ohne LCD Anzeige und einfach mit einem Arduino Nano, um Platz und Zeit zu sparen.

So sieht mein aktueller Aufbau aus. Könnt ihr da mal bitte einen Blick drauf werfen?

Sketch ist relativ einfach. Ich habe einfach einen Beispielsketch so gekürzt, dass er mir A0 ausliest und es über den Seriellen Port ausgibt.

void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
  // read the input on analog pin 0:
  int sensorValue = analogRead(A0);

  // print out the value you read:
  Serial.println(sensorValue);
}

So sieht aktuell nun mein Wert vom Seriellen Port aus:

Die Werte nehmen ab, sobald der Temperatursensor wärmer wird. Aus dem Grund gehe ich nun davon aus, dass schwarz tatsächlich masse und weiß den Widerstandswert ausgibt.

Jetzt bräuchte ich noch hilfe, wie ich diese Werte auf die Tabelle übertragen kann. Bei Zimmertemperatur habe ich einen Wert von 607. Dies entspricht laut der Tabelle ca. 58°C. Wei mache ich jetzt weiter?

Jetzt bräuchte ich noch hilfe, wie ich diese Werte auf die Tabelle übertragen kann. Bei Zimmertemperatur habe ich einen Wert von 607. Dies entspricht laut der Tabelle ca. 58°C. Wei mache ich jetzt weiter?

Aha, Du hast 607? Was ist das?

607 als ADC-Messwert am Analogeingang des Arduino-Boards mit Deiner Spannungsteilerschaltung?
Oder 607 Ohm als gemessener(oder berechneter) Widerstand des Sensors?

JA, das ist ausschlaggebend, ob Du 607 Eier in Schrank hast, oder 607 als ADC-Messwert, oder 607 Ohm als Widerstand.

Wenn Du hudelst, bekommst Du am Ende nie das zu sehen, was Du sehen möchtest.

Deinem Sketch nach zu urteilen ist das der ADC-Messwert und Du hast noch NICHTS gerechnet.
Aber welchen Widerstandswert hat der Festwert-Vorwiderstand?
Sollen wir jetzt in eine Widerstands-Farbcodetabelle gehen und das herausfinden?
Oder verrätst Du den Widerstandswert des Festwertwiderstands noch?

Jurs hatte schon mal genau gezeigt wie man NTCs auch mit einer Formel berechnen kann, da die Kurve logarithmisch ist:

Benötigt entweder die Konstante B aus dem Datenblatt oder zwei Punkte aus der Tabelle

Bei Zimmertemperatur habe ich einen Wert von 607

Du hast diesen SpannungsTeiler:

Vcc — 1k — A0 — NTC — GND

NTC / (1k +NTC) = A0 / 1024

Kann man umformen:
NTC = A0/1024 * (1k+NTC)
NTC = A0/1024 * 1k + A0/1024 * NTC
NTC * ( 1 - A0/1024 ) = A0/1024 * 1k
NTC * (1024 - A0) = A0 * 1k

NTC = A0 / (1024-A0) * 1k

A0 NTC/Ohm  °C lt. Tabelle
607  1456    33
512  1000    42
259   260    80

Die letzte Zeile habe ich aus der Tabelle und das erwartete A0 mit 1024 * (260 / 1260) ausgerechnet.
Du brauchst in jedem Fall nimmst üblicherweise eine Tabelle mit Umrechnungswerten. Wenn du mehr willst als ein paar Balken je nach Temperatur, musst du dann interpolieren.

Nachtrag: Ja, es geht auch ohne Tabelle

@jurs ich bekomme 607 im Seriellen Monitor ausgegeben. Ich gehe mal davon aus, dass der Wert nicht 607 Ohm ist.

@combie das Stichwort lookup table habe ich schon gehört. Damit wollte ich mich auseinander setzen. Meinst du mit "interne Referenz" die nachfolgende Tabelle?

Laut der Tabelle dürfte mein Wert bei Raumtemperatur von 20°C etwa bei 2630 liegen, richtig? Wäre es nicht da sogar am Besten, ich nehme einen Poti, um da genau hinzu kommen und messe im Anschluss den Widerstand vom Poti aus und ersetze den mit einem festen Widerstand?

Ich bekomme 607 im Seriellen Monitor ausgegeben. Ich gehe mal davon aus, dass der Wert nicht 607 Ohm ist.

Natürlich nicht. Das bedeutet, dass du am Widerstand eine Spannung von 607 / 1024 * 5 V (oder 607 * 4,88mV) hast. Es ist ein 10 Bit ADC. Also werden die 5V in 1024 Einheiten unterteilt.
Schau dir die Spannungsteiler Formel an. Dann siehst wie man die umstellen kann um aus der Spannung den Widerstand zu berechnen

Und schau dir den Link aus #9 an

Ich würde empfehlen, du nimmst einen Widerstand der besser zu deiner normalen Arbeitstemperatur passt
(z.B. X = 220 Ohm) und misst ihn nochmal nach. Er bleibt sicher konstanter als ein "fest" eingestelltes Poti.
Damit erweiterst du deine Tabelle °C -> NTC-Widerstand um die Spalte "AnalogMesswert".
-- Nach der Formel A0 = NTC / (X + NTC) * 1024 --

Brauchst du es genauer als 5° Schritte in der Anzeige?

So Leute, nachdem ich wieder stundenlang im Netz gelesen habe (vor allem die Beiträge von jurs zur Berechnung einer Kurve anhand von 2 Werten), habe ich folgende Erkenntnis erlangt:

  1. Die Tabelle die ich gepostet habe, ist nicht passend zu meinem Sensor. Denn ich habe bei 22°C Zimmertemperatur einen Widerstandswert von 1.375 Ohm an meinem Sensor gemessen. Laut der Tabelle oben, sollte mein Wert zwischen 2050 und 2630 liegen, was es nicht tut.

Aber welchen Widerstandswert hat der Festwert-Vorwiderstand?

Ich habe einen 1kohm Vorwiderstand genommen.

@jurs, da ich wohl im Internet keine Widerstandswerte für meinen Sensor finden werde, sollte ich versuchen bei 0°C den Widerstand und bei 80°C den Widerstand zu messen? Würde das ausreichen, um mir weiter behilflich zu sein?

Wenn du die Kennlinie ausmessen willst, empfehle ich dir an mehreren Stellen zu messen.
Und am besten einen Messpunkt im Arbeitsbereich des Sensors, also bei 120°C bis 150°C, falls dir das möglich ist. Das erhöht die Genauigkeit enorm.

Aber zielführender ist sicher, noch etwas Zeit auf die Suche nach der Kennlinie zu investieren. Hast du den Hersteller schonmal angeschrieben? wie genau ist die Bezeichnung des Sensors?

Zum Thema Look-Up Table habe ich sogar eine fertige Funktion im Fundus.
Ist zwar für Druck geschrieben worden, aber der Funktion ist egal welcher Sensor dranhängt.

/*************************************************************************************************
**  Funktion Sensorlesen()												
**************************************************************************************************
** Liest den AD-Wert an Pin "SensorPin"								
** und interpoliert aus der Tabelle den korrekten pysikalischen Wert.				
**  												
**  												
**  											   	
**  Input: nix											
**  Output: Druck in mBar									
**  genutzte Globale Variablen: SensorPin							
**************************************************************************************************/
long Sensorlesen() {
  static boolean init = true;
  const int ValidUG = 60;     // festlegen der unteren Grenze für gültige AD-Werte
  const int ValidOG = 600;  // festlegen der oberen Grenze für gültige AD-Werte
  /* Wertetabelle Sensor Werte */  
  const int Sensorpunkte = 11;
  const int SensTab[Sensorpunkte][2]={     { 84 , 0},
 					  { 163 , 1000},
 					  { 229 , 2000},
 					  { 286 , 3000},
 					  { 336 , 4000},
 					  { 379 , 5000},
 					  { 417 , 6000},
 					  { 451 , 7000},
 					  { 481 , 8000},
 					  { 509 , 9000},
 					  { 533 , 10000}};
                                    
                                    
  int SensorAD = analogRead(SensorPin);  
  
Serial.print("AD "); Serial.print(SensorAD); 
      
  // Überprüfen des AD-Signales auf Gültigkeit
  if (SensorAD < ValidUG || SensorAD > ValidOG){
    return -99;                  // Fehlercode -99 zurückgeben, wenn AD ausser Bereich.
  }
    
  int i = 0;    
  while (i < Sensorpunkte && SensorAD > SensTab[i][0]){i++;}  // passenden Eintrag in der Tabelle suchen
  // richtigen Wert interpolileren
  long Wert = (((SensTab[i][1] - SensTab[i-1][1]) * ( SensorAD - SensTab[i-1][0] ))/ (SensTab[i][0] - SensTab[i-1][0] )) + SensTab[i-1][1];

  Serial.print("  Druck: ");Serial.println(Wert);
  return Wert;
} // End of Sensorlesen

So, wie gesagt habe ich mich nun mehrere Stunden mit der Thematik befasst und versucht mal alles zu richten, wie hier im Forum, hauptsächlich durch jurs in verschiedenen Threads beschrieben ist.

Zunächst einmal habe ich mich dran gesetzt und den Widerstand Temperaturabhängig ausgelesen. Entschieden habe ich mich für 70°C und 80°C als Standardwerte für jurs Formel. Da ich euch hier auch etwas unterhalten möchte, poste ich so viele Fotos wie möglich:

Ich hatte einen Typ-K Sensor bereits mit einem MAX31855 programmiert/zusammen getragen. Ich habe den Typ-K Sensor für die Temperaturbestimmung im Wasser benutzt und den Öltemperatursensor ebenfalls ins Wasser gehalten und permanent den Widerstand gemessen. Es war schön zu beobachten, wie die Temperatur gefallen und der Widerstand gestiegen ist.

Im Anschluss habe ich mir glaube ich zum 100. mal jurs Beitrag im anderen Thread durchgelesen. Danach habe ich mir seine Excel Tabelle angeschaut.

Erste Aufgabe lautete: Formel mit meinen Daten aufstellen und berechnen:

Folgende Daten habe ich ermittelt:

70°C ≙ 270 Ω ≙ 343,15 K ≙ T1
80°C ≙ 200 Ω ≙ 353,15 K ≙ T2

B = (T1*T2)/(T2-T1)*ln(R1/R2)

B = (343,15*353,15)/(353,15-343,15)*ln(270/200)
B = 3637

Im Anschluss habe ich meine Werte in die Excel Tabelle eingetragen, die jurs zur Verfügung gestellt hat.

Weitere Schritte:

  • Ich prügel mir erneut alle jurs Beiträge hunderte Mal rein und programmiere die Öltemperatur anhand der Formel. Hier muss ich auch mal prüfen, ob ich den Sketch von jurs verwenden kann.

  • Vorwiderstand wollte ich 200 Ω verwenden, da ich bei 80°C Öltemperatur mit einer hohen Genauigkeit leben kann. Da beginnt nämlich mein Thermostat zu öffnen.

  • Sollte es mit der Formel nicht klappen, müsste ich schauen wie ich die Widerstandswerte aus Excel entsprechend zu ADC-Messwerte am Arduino matche und daraus eine Lookup Table erstellen.

  • Meinen Vorwiderstand werde ich von 1000 Ω auf 200 Ω verkleinern, da mein Sensor bei 80°C einen Widerstand von 200 Ω aufweist und ich wohl somit, am genauesten in dem Bereich liege.

Ich halte euch auf dem Laufenden, nochmal vielen Dank für eure Geduld mit mir. An jurs geht natürlich ein großes Dankeschön!

Liebe Grüße

Irfan