Bitte um ein Code-Review (Arduino Nano, Thermistor)

Hallo zusammen,

ich möchte die Raum-Temperatur mit einem Thermistor messen. Angeschlossen ist der Thermistor mit einem Vorwiderstand (100kOhm) an den Arduino Nano. Leider wird die Temperatur immer mit ca. 70°C zu viel angezeigt. Keine Ahnung wieso das so ist.

Der Aufbau ist wie auf dieser Homepage, siehe Arduino Tutorial: Der Temperatursensor - Werde zum Maker mit MyMakerStuff

Der Code ist leicht verändert und er weicht von dem, als wie auf der Homepage, leicht ab.

Code zum Review, vielen Dank im Voraus.


int sensorPin = A0;            // der analoge Pin wird als ein Sensor definiert,
// nach dem Spannungsabfall am "widerstand1" misst er die Spannung am "widerstandNTC" ab
// der analoge Pin wird als Integer deklariert
int bitwertNTC = 0;            // der Bitwert wird einer Spannung zugeordnet, der Arduino kann seine Betriebsspannung
// von 5V mit einer Auflösung von 10 Bit darstellen. Der Bitwert springt, sobald die Spannung
// 5V/1024 = 4,87mV steigt. 0V = Bitwert 0, 5V = Bitwert 1024

long vorwiderstand = 100000;                        // Vorwiderstand mit 100kOhm
double widerstandNTC = 0;                           // am "widerstandNTC" fällt die Spannung ab, die von AO gelesen wird,
// der Widerstand ist abhängig von der Raumtemparetur

double nullgradinkelvin = 273.15;
double nenntemperaturNTC = nullgradinkelvin + 25;

int bWert = 3950;                                   // B-Wert des Thermistors, Wert aus dem Datenblatt
long nennwiderstandNTC = 100000;

double tempinkelvin = 0;

double temp = 0;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
  if (Serial.available() > 0)               // wenn serielle Kommunikation vorhanden
  {
    Serial.println("Sensormessung: ");
    bitwertNTC = analogRead(sensorPin);       // lese Analogwert an A0 aus

    widerstandNTC = ( ( vorwiderstand * ( (double) bitwertNTC / 1024 ) ) / ( 1 - ( (double) bitwertNTC / 1024 ) ) );

    tempinkelvin = ( 1 / ( ( 1 / nenntemperaturNTC ) + ( (double)1 / bWert ) * log ( ( (double)widerstandNTC / nennwiderstandNTC ) ) ) );
    temp = tempinkelvin - nullgradinkelvin;

    Serial.print("Analog: ");
    Serial.println(bitwertNTC);
    Serial.print("NTC-Widerstand: ");
    Serial.println(widerstandNTC);
    Serial.print("Temperatur [K]: ");
    Serial.println(tempinkelvin);
    Serial.print("Temperatur [°C]: ");
    Serial.println(temp);

    delay(2000);
  }
}

Hallo und guten Morgen,
gibt es eine Bedingung einen NTC Temperatur Sensor zu verwenden?
Wenn nein, dann werfe mal einen Blick in dieses Tutorial.

Hallo,

danke für den Link, werde das Projekt hiernach in Angriff nehmen. Bis dahin muss ich aber das mit dem Thermistor hin bekommen. Stecke nämlich schon drin :slight_smile:

Vielen Dank

Bitte formatiere deinen Code gemäß den Forenregeln
How to get the best out of this forum
Geben Sie Ihr Schema und seine Abmessungen an.

1 Like

Hallo
Du hast den aus dem Beispiel angegeben NTC Widerstand ? Du könntest mal den NTC Widerstand bei 25Grad messen und den Widerstandswert deines Vorwiderstandes. Letztlich unterliegen beide einer Genauigkeitsklasse . Wenn beide +-10% habe kann Dein Fehler ja schon mal 20% sein. Du kannst auch mal den NTC Widerstand bei 100Grad messen, (kochendes Wasser) dann hast Du schon mal 2 Werte, und mit der Kennlinie deines Typs vergleichen.
Heinz

1 Like

Wahrscheinlich weil Du entweder einen anderen NTC oder einen anderen Widerstand verwendest als der im Beispiel / Tutorial / Video verwendet wird.

Laut dem Verlinkten Tutorial:

Die Konstante B kannst Du nicht so einfach messen, den Widerstandswert bei Raumtemperatur (ca 25°C ) schon. Nehme mal an der ist nicht 100kOhm.
Ein Spannungsteiler von 100kOhm zu 100kOhm ist zu hochohmig für den ADC Eingang. Bei Temperaturänderungen wirt nur langsam die gemessene Temperatur sich angleichen. Abhilfe ein 0,1µF Kondensator Zwischen analogen Eingang und Masse. Dieser liefert bei der Messung den nötigen Strom.

Grüße Uwe

1 Like

Hallo,

möchte das Code innerhalb der Symbole <> posten, kann ab den Beitrag nicht anpassen bzw. bearbeiten. Dafür kann ich aber den Beitrag-Titel ändern, komisch.

Kannst du helfen?

Vielen Dank

Hallo @Rentner,
Hallo @uwefed,

der Vorwiderstand liegt im Beispiel als auch bei mir bei einem Wert von 100kOhm.

Nein, ich habe nicht den gleichen NTC Widerstand verwendet. Entscheidend sind laut Formel der B-Wert, die Nenntemperatur und der Nennwiderstand bei 25°C.

Im Beispiel liegt der B-Wert bei 3950 Kelvin, die Nenntemperatur bei 25°C und der Nennwiderstand bei 100 kOhm.

Der Thermistor, den ich verwende, hat ebenfalls die gleiche Nenntemperatur bei bei 25°C und den gleichen Nennwidertand mit 100kOhm.

Ein Parameter weicht ab und das ist der B-Wert. Laut Datenblatt habe ich einen B-Wert von 4540 Kelvin abgelesen. Da ich nicht versiert in Datenblatt-Lesen bin, gehe ich davon aus das hier der Fehler liegt.

Ich habe folgenden Thermistor verwendet "TDK B57861S103F40 Heißleiter S861 1 St.", gekauft von Conrad. Unter dem Reiter "Dokumente & Downloads" kann man das Datenblatt ansehen. Ich hätte eigentlich den Link direkt zu der Seite geteilt, aber laut Forum-Guidelines und aus Sicherheitsgründen (Viren und Malware) soll man aber davon absehen.

Danke für den Hinweis, ich merke aber mir fehlt es hierbei an Grundwissen. Kannst du mir Schlagbegriffe für eine Google-Suche empfehlen?

Und noch ein Punkt was in meinem Fall und vom Beispiel abweicht ist, dass ich ein Arduino Nano verwende und kein Arduino Uno.

Ich nehme an, dass der ADC Eingang vom Arudino Uno schneller reagieren kann und dass der Spannungteiler 100 kOhm zu 100kOhm nicht zu hochohmig ist.

Vielen Dank

Da auf beiden der gleiche Prozessor ist, unterscheiden sie sich dabei nicht.

Gruß Tommy

1 Like

Öffnen Sie die Arduino-IDE mit Code. Führen Sie die folgenden Befehle aus.

  • Extras> Automatisches Formatieren (oder Strg + T) - Eng. Tools> Auto Format
  • Bearbeiten> Für Forum kopieren (oder Strg + Umschalt + C) - Eng. Edit> Copy for Forum

Öffnen Sie Ihren Beitrag mit dem Code zum Bearbeiten. Wählen Sie aus, wo der Code eingefügt werden soll (entfernen Sie den alten Code).

  • Drücken Sie Strg + V.

Es ist alles. Wenn Sie alles richtig gemacht haben, wird das Tag [code] vor dem Code und [/code] nach dem Code eingefügt.

1 Like

Aber Sie haben einen ganz anderen Thermistor. Es hat einen Widerstand von 10 kOhm und B = 3988. Setzen Sie einen weiteren Teilerwiderstand ebenfalls 10 kOhm und die Schaltung funktioniert.
NTC-S861-1
NTC-S861-2

1 Like

Jawoll !! Vielen Dank, habe die zwei Parameter (B-Wert und Nennwiderstand) angepasst und es wird 27,3°C angezeigt. Denke bei dem Wetter stimmt die angezeigte Temperatur so. Werde jetzt versuchen den LCD Display anzuschließen.

Danke nochmal an alle!!

Im Datenblatt NTC thermistors fortemperature measurement finden Sie eine Kalibriertabelle (R/T characteristics 8016) zur Überprüfung Ihrer Schaltung.
Erfolg in Ihrem Projekt