Go Down

Topic: Öl Temperatur messen, welcher Öltemperaturgeber? (KFZ) (Read 40380 times) previous topic - next topic

y4y0

Welcher USB-Hub liefert 3,86 V?

Gruß Tommy
Ein recht simples ohne dediziertes Netzteil, es hängen dort auch zu viele Verbrauche dran. Diese zwei Werte (6V+3,68V) sollten nur für Vergleichszwecke dienen.

Tommy56

Das wird für 5V-Schaltungen aber schon ganz schön eng. Da brauchst Du Dich über Fehler nicht zu wundern.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

y4y0

Genau aus diesem Grund, habe ich mithilfe des Spannungsreglers 6V "organisiert" um eine Unterversorgung auszuschließen.

DENNOCH habe ich das Problem, dass bei keiner der beiden angelegten Spannungen ein realistisches Ergebnis geliefert wird.

Dann schließen wir das Ergebnis bei 3,86V einfach aus und betrachten dieses nicht mehr. Wieso ist dann bei 6V die Temperatur falsch ?

DerLehmi

Was mir direkt auffällt:
im Code steht:
"// VA_VB        : Spannungsverhältnis "Spannung am NTC zu Betriebsspannung""
-->Der Autor dieses Codes hat dafür "aValue / MAXANALOGREAD" nehmen können, weil der Spannungswandler direkt mit dem 5V-Pin des Arduinos versorgt wurde, und der Arduino auch mit diesen 5V vergleicht. Bei dir geht das so nicht, Du nutzt 6V und nicht die Spannung der Boardlogik... (MAXANALOGREAD ist hier 1023 und bezieht sich auf 5V Boardlogik, die maximal am Analogeingang anliegen dürfen)
Also hast Du einmal den Wert der gemessenen Spannung, bezogen auf 5V (oder was für einen Controller nutzt Du?), und einmal die Versorgungsspannung, welche bei Dir aber nicht der Boardlogik entspricht.

y4y0

@DerLehmi

Ich danke dir ! das ist wohl mein Fehler.

Jetzt muss ich nur mal schauen, wie ich das ganze mit 6 oder mehr Volt betreiben kann.


DerLehmi

Quote
Jetzt muss ich nur mal schauen, wie ich das ganze mit 6 oder mehr Volt betreiben kann.
-->Na ganz einfach: indem Du ihm VA_VB gibst, also das Verhältnis der Spannungen.
Dazu die Betriebsspannung vorher festlegen, im Programm dann die Spannung am Analogpin berechnen und darauf die Temperaturberechnung durchführen (statt "aValue / MAXANALOGREAD" übergibst Du dann sowas wie berechneteSpannung / Betriebsspannung)

y4y0

Dann müsste ich aber doch vorher den Spannungsteiler dahingehend anpassen, dass bei z.B 12V Betriebsspannung nur maximal 5V am AnalogPin anliegen dürfen, oder?

DerLehmi

Quote
Dann müsste ich aber doch vorher den Spannungsteiler dahingehend anpassen, dass bei z.B 12V Betriebsspannung nur maximal 5V am AnalogPin anliegen dürfen, oder?
-->Sowieso, IMMER! Sonst kann es Dir den Controller zerschießen...

y4y0

Könnte der Spannungsteiler dann so aussehen ?

12V  -- R2300 --+-- Geber(R1612 bei 20°C) == GND
                             |
                             |------Z-Diode------ == GND
           Analog-Eingang (A2)

Die Z-Diode würde dabei als Spannungsbegrenzung für den Analog-Eingang dienen.

DerLehmi

Quote
Könnte der Spannungsteiler dann so aussehen ?
--> Gute Frage, ich kenn ja nicht dessen Kurve und das Anwendungsgebiet.
Um das zu prüfen, müsstest schauen, was denn die kälteste Temperatur wäre, was für einen Widerstand der NTC dabei aufweist, und was für eine Spannung dann am Pin anliegt. Wie gesagt: nicht höher als 5V (wenn Dein Controller mit 5V arbeitet)

SoeKoe

Hey,

ich grabe den Tread nochmal aus:

Ich habe ebenfalls vor, einen VDO Öltemperatur-Sensor mit meinem Arduino auszulesen und über ein IC2 LCD auszugeben.

Ich habe den gleichen wie der den Jurs in seinem Sketch angenommen hat.

Ich hab den gleichen Sketch verwendet den Jurs hier gepostet hat.

Leider zeigt mir mein Display immer ca- 9Grad Minus an, obwohl ich Raumtemperatur habe.

Ich bin leider ziemlicher Anfänger was Elektronik betrifft, und weiß nicht wo mein Fehler ist.

Hier der Sketch:
Code: [Select]
#include <Wire.h>
#include<LiquidCrystal_I2C.h>                                                       // richte die library fuer das LCD ein

LiquidCrystal_I2C lcd(0x3f, 16, 2);

// 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()
{
  lcd.begin();                                                              
 
}

#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=1000; // Vorwiderstand in Ohm
  float temp;  
  int aValue=analogRead(ANALOGPIN);
 

  // Berechnen bei bekannter Materialkonstante B=3933;
  lcd.setCursor(0, 1);
  temp=temperature_NTCB(T0, R0, 3933, Vorwiderstand, aValue/MAXANALOGREAD);
  lcd.print("Oiltemp: ");
  lcd.print(temp);
  lcd.println(" C");
  lcd.setCursor(2,0);
  lcd.print("BMW E30 318IS");
  delay(1000);
}


Und hier die Schaltung:
">

DerLehmi

Quote
Ich hab den gleichen Sketch verwendet den Jurs hier gepostet hat.
-->Und Du hast wirklich genau den Gleichen NTC? Und Vorwiderstand? Zumindest sind die Koeffizienten ebenfalls die gleichen wie im Beispielsketch von Jurs...

SoeKoe

Hallo,

sorry dass ich mich jetzt erst melde.

Ich habe den Fehler gefunden.
habe mich beim Widerstand vertan, und nun läuft das ganze wie gewollt.

vielen Dank

postmaster-ino

Hi

Besser spät, als nie - Danke für die Rückmeldung :)

MfG

Go Up