Hallo zusammen,
ich versuche gerade den Code von Jurs aus diesem Thread (Öl Temperatur messen, welcher Öltemperaturgeber? (KFZ) - #12 by jurs) auf ein ESP32-S3 Board zu übertragen.
Genau genommen ist es dieses Board: https://www.waveshare.com/wiki/ESP32-S3-LCD-1.28
Leider zeigt er keine brauchbaren Messergebnisse an.
Liegt es daran, dass ich nur mit 3,3V arbeite?
Ist der Code überhaupt auf ein ESP32 übertragbar?
Kann man nur bestimmte Pins für Analoge Messungen nehmen?
Ich stehe auf dem Schlauch...
Hi,
danke schon mal.
Die Punkte habe ich aber schon berücksichtigt.
Demnach muss ja mit meiner Schaltung oder mit dem NTC etwas nicht stimmen.
Hier der aktuelle Code:
// NTC temperature calculation by "jurs" for German Arduino forum
#define ABSZERO 273.15
#define MAXANALOGREAD 4095.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(115200);
}
#define ANALOGPIN 35
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);
}
Wenn ich es nun mit 100 Ohm Vorwiderstand aufbaue, habe ich bei Zimmertemperatur einen Wert von -273.15 C. Egal ob ich den NTC, einen Poti oder einen 100 Ohm Widerstand messe.
An einem ADC2 Pin (z.B. 4) bekomme ich einen Wert von ca. 22 C bei 100 Ohm.
Ich hoffe mit den Informationen könnt ihr mir helfen.
Danke
Matthias
Du hast einen ESP32-S3, da ist GPIO35 kein anloger Pin, sorry. Bitte nutze einen der ADCn_x Pins, möglichst ADC11). Mußt mal sehen, welcher bei Deiner Platine zugänglich ist.
Anm.:
Bei meinen ESP32 funktioniert nur ADC1 zusammen mit WiFi. Ob das auch für den ESP32-S3 gilt, weiß ich nicht. Ohne WiFi kannst Du aber auch ADC2 nutzen.
Damit bekomme ich mit einem 100 Ohm Widerstand anstelle des NTC einen Wert von 88 C.
Das entspricht ja in etwa dem Wert, den @jurs in der Excel Tabelle berechnet hat.
Mit dem VDO NTC bei Zimmertemperatur -273.15 C.
Das lässt mich ja fast vermuten, dass der VDO Sensor falsche Werte liefert.
Ich werde gleich mal den Widerstand des Sensors bei Zimmertemperatur messen.
Seh ich auch so. Das ist eine Seite für Autoersatzteile, das sagt das mehr oder weniger "passt für alle"
Dann nach Möglichkeit auch noch bei ein paar höheren Temperaturen (die Angaben auf der Seite müssen nicht stimmen) damit Du die Formel zur Temperatur anpassen kannst. Die Teile sind nicht linear.
Zitat von der Liferantenseite:
60°C = 237,5 Ohm ± 20 Ohm
90°C = 89,0 Ohm ± 6 Ohm
120°C = 38,4 Ohm ± 2 Ohm
Das wird in dem Bereich der eigentlich interessant ist eine ungenaue Geschichte...
Das analogRead Ergebnis würde ich auch aus mindestens 50 Wiederholungen mitteln, - der ADC des ESP32 gilt nicht als einer der Präzisen.