Pt100 Temperaturmessung mit HX711 - funktioniert

Manchmal hat man dumme Gedanken im Kopf und manchmal kommt dann doch was sinnvolles dabei heraus.
Siehe: Arduino als Webserver, Frage zu HTML-Code.

Angeregt durch: Pt100 Temperatur Auslesen kam mir jetzt wieder so ein (dummer?) Gedanke.

Was wäre denn wenn man einem HX711 einen PT100 oder PT1000 unterjubelt? Für den HX gibt es schließlich fertige Arduino Librarys.
Man muss dem HX711 ja nicht sagen dass man einen PT100 angeschlossen hat und kan den im Glauben lassen dass ein DMS dran hängt. :grin:

Kann man den Gedanken weiter spinnen oder gibt es ein absolutes k.o. Kriterium?

Gruß Peter

In irgendeinem Fred in den letzten 2 Wochen hatte ich die selbe bekloppte Idee :smiley:
Versuchs einfach, kaputtgehen kann dabei nichts. eventuell mußt du den Multiplikator für die Verstärkung anpassen. Wahrscheinlich ist der Temperaturverlauf nicht linear zur Ausgangsspannung. Ein DMS ist so konstruiert, das er sehr linear arbeitet. Die Kennlinie vom PT Sensor ist nicht so ideal. Kann man aber per Lookuptable im Speicher "geradebiegen". Der Instrumentenverstärker im HX ist für sowas eigentlich ideal, da er kaum Bias und Drift hat, ganz im Gegensatz zu einfachen OV's, die in einfachen Schaltungen gerne verwendet werden. Der HX kostet 2€, der PT100 auch so ca.
Einen Versuch isses auf alle Fälle wert. Berichte mal :wink:

Zwei Dumme ein Gedanke :grinning:

Es ist nicht so dass ich eine PT100 Messung brauche. Mir reichen die DS18B20.
Bedenken wegen der HX internen Verstärkung hatte ich auch.

Aber im Grunde bastel ich manchmal gerne. Nur unnötig Zeit verschwenden will ich auch nicht.
Die Frage war deshalb ob jemand einen Grund dafür kennt dass der Versuch nicht gelingen kann, und mir deshalb ein absolutes k.o. Kriterium nennt sofern es eines gibt.

Ansonsten teile ich deine Gedanken voll und ganz.

Was willst Du genau machen?

Mit dem Differenzverstärker die Spannung am PT100 verstärken?

Grüße Uwe

uwefed:
Was willst Du genau machen?

Mit dem Differenzverstärker die Spannung am PT100 verstärken?

Grüße Uwe

Was ich genau machen will, weiß ich eigentlich noch nicht. :sunglasses:

Ich habe schon längere Zeit einige dieser HX711 Platinchen hier rum fliegen. Wiegezellen dazu habe ich keine.
Deshalb kam mir der Gedanke einen PT100 daran anzuschließen. Einfach just for fun und mal sehen was sich da heraus holen lässt.
Der HX711 hat einen Differenzverstärker mit variablem Gain eingebaut und einen hoch auflösenden A/D-Wandler. Außerdem ist auf der Platine eine Konstantstromquelle. Also ist alles vorhanden um eine Widerstandsmessung zu machen. Mit dem Differenzverstärker den Spannungsabfall am PT100 verstärken gehört auch dazu.

Zudem kann ich das Teil und sein Verhalten beim Spielen kennen lernen.
Und vielleicht kommt doch etwas brauchbares dabei heraus.

Kennst du einen Grund warum das nicht funktionieren könnte?

Gruß Peter

Hallo,
hier ein kleiner Zwischenstand aus den ersten Versuchen.

Ich habe erst mal einen Meßbereich von -50°C bis +550°C für das Experiment definiert.
Für den Meßbereichsanfang hatte ich einen 82Ω Widerstand verwendet was etwa -54,5°C entspricht.
Für das Meßbereichsende hatte ich einen 300Ω Widerstand verwendet was etwa 558,0°C entspricht.

Zwischenwerte für die Temperatur lagen alle im Bereich von ±10°C zum Sollwert den ein Widerstand aus der E-Reihe liefern sollte.

±10°C hören sich jetzt erst mal viel an. Wenn man aber bedenkt, dass mir nur Widerstände mit ±1% Toleranz zur Verfügung standen kann man das relativieren.
Ein 270Ω Widerstand sollte ca. 468°C liefern. Ein 270Ω Widerstand mit ±1% Toleranz hat 270Ω ±2,7Ω.
Diese ±2,7Ω liefern auf der Temperaturseite ca. ±8°C Fehler.
Eine Kennlinienlinearisierung habe ich auch noch keine eingebaut sonder rechne den Rohmesswert bisher linear zwischen -50°C und +550°C um.

Ich gehe davon aus, dass sich mit 0,1%igen Widerständen eine Reduzierung des Fehlers ergeben wird.
Diese muss ich erst mal besorgen und kann dann weiter spielen. Es bleibt spannend.

Gruß Peter

1 Like

Cool! Poste doch mal deinen Code.
Welchen Gainfaktor hast du verwendet? Wenn man 0-100°C nimmt, kann man mit einem DS18B20 vergleichen, ob die gemessenen Werte passen.

nix_mehr_frei:
Cool! Poste doch mal deinen Code.
Welchen Gainfaktor hast du verwendet? Wenn man 0-100°C nimmt, kann man mit einem DS18B20 vergleichen, ob die gemessenen Werte passen.

Nene, der Code ist "noch" nicht jugendfrei.
Der kommt aber zu gegebener Zeit. Ich muss da noch etwas aufräumen und entrümpeln. So wie das jetzt aussieht versteht das niemand. :blush:

Das Datenblatt des HX 711 gibt eine Eingangsspannung von ±20mV Verstärkung von 128 an. Bei einer Verstärkung von 64 gehen ±40mV und bei Gain = 32 verträgt der Eingangsverstärker ±80mV. Ich habe die Tests am Eingang B gemacht weil nur der ±80mV zulässt.
Dabei kann ich aber derzeit schaltungsbedingt nur den positive Teil, also 0-80mV nutzen. Mal sehen ob mir noch was einfällt um -80 bis +80mV nutzen zu können.

Für 0-100°C würde das Gesamtergebnis evtl. besser aussehen weil da die Kennlinienkrümmung nicht so stark eingreift. 0-100°C wollte (konnte) ich aber aber erst mal nicht nehmen weil ich dann zum Testen zu viele Widerstände zusammen basteln müsste um auf brauchbare Werte zu kommen.
Die E-Reihe bietet 100Ω für 0°C, 120Ω für 51.57°C und dann 150Ω für 130.47°C.

Außerdem liefern 5 verschieden 100Ω ±1% Widerstände 5 verschiedene Temperaturen. Das gleiche Bild bei 5 verschieden 120Ω ±1% Widerständen.
Ohne ±0.1% Widerstände ist das erst mal ein stochern im Nebel.

Ich bleibe da aber dran weil die ersten Versuche vielversprechend sind. ±0.1% Widerstände liegen schon in einem Warenkorb.

Gruß Peter

scheint zur Zeit ja ein akutes Thema zu sein, aber fertige Meßumformer gibt es schon für wenige Euro in der Bucht. Die liefern ein normiertes Ausgangssignal für den entsprechenden Meßbereich.

Grüße

fckw:
scheint zur Zeit ja ein akutes Thema zu sein, aber fertige Meßumformer gibt es schon für wenige Euro in der Bucht. Die liefern ein normiertes Ausgangssignal für den entsprechenden Meßbereich.

Grüße

Hast du Beispiele zu fertige Meßumformer für wenige Euro?

LG Peter

Hallo,
ich habe das Programm etwas aufgeräumt und entrümpelt.

Gleichzeitig habe ich mich dazu entschlossen erst mal nur einen Widerstandswert zwischen 60Ω und 400Ω damit messen zu wollen.

Wer will kann das testen und dann Rückmeldungen/Vorschläge liefern.

/*
Widerstandmessung mit HX711

Anschluss HX711:
VCC an Arduino 5V, GND an Arduino GND
SCK an Arduino A0, DT an Arduino A1

Widerstand 15k Ohm zwischen E+ und B+ des HX711 anschließen
Widerstand 15k Ohm zwischen E- und B- des HX711 anschließen
Messwiderstand (60 ... 400 Ohm)zwischen B+ und B- des HX711 anschließen

Bevor eine Widerstandsmessung durchgeführt werden kann, muss die Messschaltung erst abgeglichen werden.
Hierzu werden Abgleichwiderstände benötigt deren Tolerenz möglichst besser als 1% ist.

Zuerst wird die untere Messbereichsgrenze abgeglichen. (Widerstand z.B 62 Ohm)
Dazu wird ein Widerstand, dessen Wert nahe an der unteren Messbereichsgrenze
liegt, an den HX711 als Messwiderstand angeschlossen und das Programm gestartet. 
Das Programm liefert einen Messert der per Copy&Paste der Variablen Uu zugeordnet wird.
Der Widerstandswert des verwendeten Messwiderstandes wird der Variablen Ru zugeordnet.
Dann das Programm neu auf den Arduino übertragen.

Dann wird die obere Messbereichsgrenze abgeglichen. (Widerstand z.B 4x 100 Ohm in Reihenschaltung)
Dazu wird ein Widerstand, dessen Wert nahe an der oberen Messbereichsgrenze
liegt, an den HX711 als Messwiderstand angeschlossen und das Programm erneut gestartet. 
Das Programm liefert einen Messert der per Copy&Paste der Variablen Uo zugeordnet wird.
Der Widerstandswert des verwendeten Messwiderstandes wird der Variablen Ro zugeordnet.
Dann das Programm neu auf den Arduino übertragen.

Damit ist der Abgleich abgeschlossen und man kann sich die Messergebnisse mit anderen Widerständen
deren Wert zwischen den Messbereichsgrenzen liegt anschauen.

Die beiden 15k Ohm Widerstände, das HX711 Modul und die Werte der Variablen Uu, Uo, Ru, Ro gehören jetzt zusammen.
Wird ein Teil ausgetauscht, ist ein neuer Ableich erforderlich.
Um einen neuen Ableich zu ermöglichen sind die Werte der Variablen Uu, Uo, Ru, Ro auf 0 zu setzen
und das Programm neu hochzuladen.

Messbereichsgrenze unten 60Ω - Ru
Messbereichsgrenze oben 400Ω - Ro
*/

#include "HX711.h"    //https://github.com/bogde/HX711

#define UMIN  900000
#define UMAX 8000000
#define RMIN    60.0
#define RMAX   400.0

const long  Uu = 0;    // Messwert unteres Ende
const long  Uo = 0;    // Messwert oberes Ende
const float Ru = 0.0;  // Widerstandswert unteres Ende
const float Ro = 0.0;  // Widerstandswert oberes Ende

long Umess;
float Rx;

HX711 get_U;

void setup() {
  int i;
  long buf = 0;
  long U = 0;

  Serial.begin(115200);
  Serial.println(F("HX711 R-Messung"));
  get_U.begin(A1, A0);
  get_U.set_gain(32);

  // Abgleich Messbereichsgrenze unten
  if (Uu <= UMIN || Ru == RMIN) {
    Serial.println(F("Widerstand fuer untere Messbereichsgrenze eingesetzt ??"));
    Serial.println(F("Messung fuer Messbereichsgrenze unten laeuft - bitte warten ..."));
    for (i = 0; i < 5; i++) {
      U = get_U.read_average(40);
      buf = buf + U;
      Serial.print(U); Serial.print(" ");
    }
    if (buf / 5 < UMIN || buf / 5 > UMAX) {
      Serial.println(); Serial.println();
      Serial.println(F("Messfehler, bitte Schaltung ueberpruefen"));
      while (1);
    }
    else {
      Serial.println(); Serial.println();
      Serial.print(F( "Bitte "));
      Serial.print(buf / 5);
      Serial.println(F( " bei Variable 'Uu' und den Wert des eingesetzten Widerstandes in Ohm bei Variable 'Ru' eintragen "));
      Serial.println(F("Dann das Programm neu hochladen"));
      Serial.println();
      while (1);
    }
  }

  // Abgleich Messbereichsgrenze oben
  if (Uo <= UMIN || Ro == RMIN) {
    Serial.println(F("Widerstand fuer obere Messbereichsgrenze eingesetzt ??"));
    Serial.println(F("Messung fuer Messbereichsgrenze oben laeuft - bitte warten ..."));
    for (i = 0; i < 5; i++) {
      U = get_U.read_average(40);
      buf = buf + U;
      Serial.print(U); Serial.print(" ");
    }
    if (buf / 5 < UMIN || buf / 5 > UMAX) {
      Serial.println(); Serial.println();
      Serial.println(F("Messfehler, bitte Schaltung ueberpruefen"));
      while (1);
    }
    else {
      Serial.println(); Serial.println();
      Serial.print(F( "Bitte "));
      Serial.print(buf / 5);
      Serial.println(F( " bei Variable 'Uo' und den Wert des eingesetzten Widerstandes in Ohm  bei Variable 'Ro' eintragen "));
      Serial.println(F("Dann das Programm neu hochladen"));
      Serial.println();
      while (1);
    }
  }

  // Prüfung der Abgleichwerte
  if ( Uu < UMIN || Uu > UMAX || Uo < UMIN || Uo > UMAX || Ru < RMIN || Ru > RMAX || Ro < RMIN || Ro > RMAX ||
       Uu > Uo || Uo < Uu || Ru > Ro || Ro < Ru) {
    Serial.println(F( "Abgleichfehler - Bitte Abgleich wiederholen"));
    Serial.println();
    while (1);
  }
  else {
    Serial.println(F( "Abgleich o.k."));
    Serial.println();
  }
}

void loop() {
  
  Umess = get_U.read();
  if (Umess >= UMIN && Umess <= UMAX) {
    Rx = ((((Ro - Ru) / (Uo - Uu)) * (Umess - Uu)) + Ru );
    //Serial.print("Umess = "); Serial.print(Umess); Serial.print("  ");
    Serial.print("R = ");     Serial.print(Rx, 3);   Serial.println(" Ohm");
  }
  else {
    Serial.println("Messfehler");
  }

  delay(1000);

}

Wem die ganze Ableichprozedur im Setup zu viel Programmspeicher raubt, kann diese komplett entfernen (auskommentieren) wenn die Abgleichparameter einmal ermittelt wurden.

Der nächste Schritt ist jetzt die Umrechnung des mit einem Pt100 gemessenen Widerstandes in einen Temperaturwert.
Ich bleibe dran.

Gruß
Peter

1 Like

peter_de:
Hast du Beispiele zu fertige Meßumformer für wenige Euro?

LG Peter

Natürlich, ich habe einfach mit den Schlagwörtern "PT100 und "Messumformer" die Suchmaske gefüllt. Dann wirst du mit diversen Modellen förmlich erschlagen.

fckw:
Natürlich, ich habe einfach mit den Schlagwörtern "PT100 und "Messumformer" die Suchmaske gefüllt. Dann wirst du mit diversen Modellen förmlich erschlagen.

Die Ergebnisse die dabei gefunden werden kannte ich schon.
Der Vorteil all dieser Messumformer ist, dass man die nicht abgleichen muss.

Der Messbereich ist aber auch nicht frei wählbar. -30°C ... +40°C hatte ich jetzt keinen gefunden.
Messumformer deren Messbereich sich programmieren lässt gibt es in der günstigen Preisklasse nicht.
Du brauchst für den Betrieb dieser Geräte zusätzlich ein 24V (18...36V) Netzteil.
...

Gruß Peter

natürlich, aber das wichtigste ist ja auch immer der entsprechende Anwendungsfall. Sensoren sollte man immer ihrem entsprechenden Arbeitsbereich auswählen. PT100 werden nach meiner Erfahrung sinnvoll bis 400°C eingesetzt darüber hinaus kommst du mit Thermoelementen weiter. Da wird es aber noch komplizierter weil du Vergleichstemperaturen benötigst, wenn du es genau haben willst.
Wenn es eine Widerstandsmessung werden soll, wäre doch ein Heißleiter (NTC) für deinen Temperaturbereich geeigneter.

Jetzt habe ich auch die Umrechnung des gemessenen Widerstand in eine Temperatur eingebaut.
Was ich mit einem angeschlossenen Pt100 an Messergebnissen erhalte sieht vielversprechend aus.

Das Programm für den Arduino:

/*
Pt100 Temperaturmessung mit HX711 in Vierleiterschaltung
Datenblatt: https://cdn.sparkfun.com/datasheets/Sensors/ForceFlex/hx711_english.pdf

Es wird Kanal B des HX711 mit einer Eingangsverstärkung von 32 verwendet.

Anschluss HX711:
VCC an Arduino 5V, GND an Arduino GND
SCK an Arduino A0, DT an Arduino A1

Widerstand 15kΩ zwischen E+ und B+ des HX711 anschließen
Widerstand 15kΩ zwischen E- und B- des HX711 anschließen
Messwiderstand (60 ... 400Ω)zwischen B+ und B- des HX711 anschließen

Bevor eine Temperaturmessung durchgeführt werden kann, muss die Messschaltung erst abgeglichen werden.
Hierzu werden Abgleichwiderstände benötigt deren Tolerenz möglichst besser als 1% ist.

Zuerst wird die untere Messbereichsgrenze abgeglichen. (Widerstand z.B 62Ω)
Dazu wird ein Widerstand, dessen Wert nahe an der unteren Messbereichsgrenze
liegt, an den HX711 als Messwiderstand angeschlossen und das Programm gestartet.
Das Programm liefert einen Messert der per Copy&Paste der Variablen 'Uu' zugeordnet wird.
Der Widerstandswert des verwendeten Messwiderstandes wird der Variablen 'Ru' zugeordnet.
Dann das Programm neu auf den Arduino übertragen.

Dann wird die obere Messbereichsgrenze abgeglichen. (Widerstand z.B 4x 100Ω in Reihenschaltung)
Dazu wird ein Widerstand, dessen Wert nahe an der oberen Messbereichsgrenze
liegt, an den HX711 als Messwiderstand angeschlossen und das Programm erneut gestartet.
Das Programm liefert einen Messert der per Copy&Paste der Variablen 'Uo' zugeordnet wird.
Der Widerstandswert des verwendeten Messwiderstandes wird der Variablen 'Ro' zugeordnet.
Dann das Programm neu auf den Arduino übertragen.

Damit ist der Abgleich abgeschlossen und man kann sich die Messergebnisse mit anderen (bekannten) Widerständen,
deren Wert zwischen den Messbereichsgrenzen liegt, anschauen oder gleich einen Pt100 Thermometer anschließen.

Die beiden 15kΩ Widerstände, das HX711 Modul und die Werte der Variablen Uu, Uo, Ru, Ro gehören jetzt zusammen.
Wird ein Teil ausgetauscht, ist ein neuer Ableich erforderlich.
Um einen neuen Ableich zu ermöglichen sind die Werte der Variablen Uu, Uo, Ru, Ro auf 0 zu setzen
und das Programm neu hochzuladen.

Messbereichsgrenze unten 60Ω - Ru
Messbereichsgrenze oben 400Ω - Ro

Quelle der Formeln zur Umrechnung von Widerstand nach Temperatur
http://www.abmh.de/pt100/index.html#pt100_Werte

Die Messgenauigkeit ist stark von der Genauigkeit der verwendeten Widerstände beim Abgleich abhängig.
Werden dabei Widerstände mit einer Toleranz von ±1% eingesetzt ergibt das rechnerisch bei der Temperatur
einen Fehler von ±1.48°C an der unteren Messbereichsgrenze und ±13.92°C am oberen Ende.
Es lohnt also Widerstände mit einer Toleranz von ±0.1% zu beschaffen um damit den Abgleich durchzuführen.
Der mögliche Fehler bei der Temperatur wird dann auf 1/10 reduziert.

Rechenbeispiel mit einem 400Ω  Widerstand und einer Toleranz von ±1%.
Der Widerstandwert liegt zwischen 396Ω und 404Ω.
396Ω -> 869.72°C
400Ω -> 883.55°C
404Ω -> 897.47°C

Version 0.0 vom 04.11.2016
*/

#include "HX711.h"    //https://github.com/bogde/HX711

#define UMIN  900000
#define UMAX 8000000
#define RMIN    60.0
#define RMAX   400.0

const long  Uu = 0;    // Rohmesswert unteres Ende
const long  Uo = 0;    // Rohmesswert oberes Ende
const float Ru = 0.0;  // Widerstandswert unteres Ende
const float Ro = 0.0;  // Widerstandswert oberes Ende

long Umess;
float Rx, T;

HX711 get_U;

void setup() {
  int i;
  long buf = 0;
  long U = 0;

  Serial.begin(115200);
  Serial.println(F("HX711 Temperaturmessung mit Pt100 Widerstandsthermometer"));
  get_U.begin(A1, A0, 32);

  // Abgleich Messbereichsgrenze unten
  if (Uu <= UMIN || Ru == RMIN) {
    Serial.println(F("Widerstand fuer untere Messbereichsgrenze eingesetzt ??"));
    Serial.println(F("Messung fuer Messbereichsgrenze unten laeuft - bitte warten ..."));
    for (i = 0; i < 5; i++) {
      U = get_U.read_average(40);
      buf = buf + U;
      Serial.print(U); Serial.print(" ");
    }
    if (buf / 5 < UMIN || buf / 5 > UMAX) {
      Serial.println(); Serial.println();
      Serial.println(F("Messfehler, bitte Schaltung ueberpruefen"));
      while (1);
    }
    else {
      Serial.println(); Serial.println();
      Serial.print(F( "Bitte "));
      Serial.print(buf / 5);
      Serial.println(F( " bei Variable 'Uu' und den Wert des eingesetzten Widerstandes in Ohm bei Variable 'Ru' eintragen "));
      Serial.println(F("Dann das Programm neu hochladen"));
      Serial.println();
      while (1);
    }
  }

  // Abgleich Messbereichsgrenze oben
  if (Uo <= UMIN || Ro == RMIN) {
    Serial.println(F("Widerstand fuer obere Messbereichsgrenze eingesetzt ??"));
    Serial.println(F("Messung fuer Messbereichsgrenze oben laeuft - bitte warten ..."));
    for (i = 0; i < 5; i++) {
      U = get_U.read_average(40);
      buf = buf + U;
      Serial.print(U); Serial.print(" ");
    }
    if (buf / 5 < UMIN || buf / 5 > UMAX) {
      Serial.println(); Serial.println();
      Serial.println(F("Messfehler, bitte Schaltung ueberpruefen"));
      while (1);
    }
    else {
      Serial.println(); Serial.println();
      Serial.print(F( "Bitte "));
      Serial.print(buf / 5);
      Serial.println(F( " bei Variable 'Uo' und den Wert des eingesetzten Widerstandes in Ohm  bei Variable 'Ro' eintragen "));
      Serial.println(F("Dann das Programm neu hochladen"));
      Serial.println();
      while (1);
    }
  }

  // Prüfung der Abgleichwerte
  if ( Uu < UMIN || Uu > UMAX || Uo < UMIN || Uo > UMAX || Ru < RMIN || Ru > RMAX || Ro < RMIN || Ro > RMAX ||
       Uu > Uo || Uo < Uu || Ru > Ro || Ro < Ru) {
    Serial.println(F( "Abgleichfehler - Bitte Abgleich wiederholen"));
    Serial.println();
    while (1);
  }
  else {
    Serial.println(F( "Abgleich plausiebel"));
    Serial.println();
  }
}

void loop() {

  float k1, k2, k3, k4, k5, k6, k7, k8, k9;
  
  // Messwert für die Spannung an Rx einlesen
  Umess = get_U.read();

  // Aus der gemessenen Spannung den Widerstand Rx ausrechnen
  if (Umess >= UMIN && Umess <= UMAX) {
    Rx = ((((Ro - Ru) / (Uo - Uu)) * (Umess - Uu)) + Ru );
    //Serial.print("Umess = "); Serial.print(Umess); Serial.print("  ");
    Serial.print("R = ");     Serial.print(Rx, 3);   Serial.print(" Ohm   ->   ");

    // Temperatur für Rx >= 100 Ohm berechnen
    if (Rx >= 100.0) {
      k1 = 3.90802 * pow(10, -1);
      k2 = 2 * 5.802 * pow(10, -5);
      k3 = pow(3.90802 * pow(10, -1), 2);
      k4 = 4.0 * (pow(5.802 * pow(10, -5), 2));
      k5 = Rx - 100.0;
      k6 = 5.802 * pow(10, -5);

      k7 = k1 / k2;
      k8 = (k3 / k4) - (k5 / k6);
      k9 = sqrt(k8);

      T = k7 - k9;
    }
    // Temperatur für Rx < 100 Ohm berechnen
    else {
      k1 = pow (Rx, 5) * 1.597 * pow(10, -10);
      k2 = pow (Rx, 4) * 2.951 * pow(10, -8);
      k3 = pow (Rx, 3) * 4.784 * pow(10, -6);
      k4 = pow (Rx, 2) * 2.613 * pow(10, -3);
      k5 = 2.219 * Rx - 241.9;

      T = k1 - k2 - k3 + k4 + k5;
    }
    Serial.print("T = ");     Serial.print(T, 3);   Serial.println(" GrdC");
  }
  else {
    Serial.println("Messfehler");
  }
  delay(1000);
}

Es gibt im Code sicherlich noch viel Potential für Optimierungen. Besonders bei der Berechnung der Temperatur. Aber dort habe ich versucht den Code gemäß den Formeln aus der verlinkten Webseite nachvollziehbar zu gestalten. Vieles was jetzt noch gerechnet wird könnte man als Konstante hinterlegen.

Der Anschlussplan:

Mein Testmodul mit dem HX711 sieht aus wie in diesem Angebot.
Es gibt auch andere Module mit evtl. anderer Schaltung. Davon habe ich aber keine und konnte deshalb auch nicht testen.

Gruß Peter

1 Like

Hallo,
ich suche nach einer Möglichkeit einen PT100 3-Leiter sinnvoll an den HX711 mit Arduino anzuschliessen, ähnlich wie in der hier disskutierten Schaltung. Wen man das Schaltbild "Dreileitermessung mit Differenzbildung" von Vierleitermessung – Wikipedia betrachtet ist das anscheinend nicht möglich, da der zweite R5 am OP Ausgang am HX711 nicht angeschlossen werden kann. Hat jemand eine bessere Idee?

Schalte B- an das andere Ende des 15kOhm Widerstandes, der an E- angeschlossen ist und auch den einzelnen Leiter des 3-Leiter PT100.
Grüße Uwe

1 Like

Hallo Uwe,
danke für den Tip. Schaltplan mit 3-Leiter anbei, denke so war es gemeint.
Grüße,
Joachim

1 Like


Ja, so hab ich es gemeint.

Dazu wollte ich noch sagen daß es spezielle ICs für die Temperaturmessung mit PT100 gibt:
https://datasheets.maximintegrated.com/en/ds/MAX31865.pdf

Mehr dazu:

Grüße Uwe