Temperatur messen - Darf's auch genauer sein ?!

TERWI's Hexenküche hat wieder was ausgebrutzelt .... :astonished:
Neben meinem LiPo-Monitor zur Spannungsmessung der einzelnen Zellen war es letztendlich die Konsequenz, auch deren Temperatur zu erfasssen.
Muss nicht, aber "Nice to have!"

Ich stell euch das hier mal solo vor, denn es gibt sicherlich etliche unter euch, welche Temperaturen entweder so über den Daumen oder sogar relativ genau erfassen wollen / möchten / müssen.
Ein entsprechendes PDF der Schaltung ist angehängt.

Wie ihr seht, eine relativ simple Schaltung mit nur wenigen Bauteilen, die dennoch recht / sehr genau ist: Immerhin 1/8 Grad Auflösung am Analog-Eingang eines Arduino. Wenn man für alle Bauteile samt einer kleinen Vero-Board-Platte 10 € ausgibt, war's schon teuer ....
Messbereich: Weit unter 0°C bis knapp über 100°C - das sollte für viele Fälle reichen. In 0,125 V Schritten.

Schaltungsbeschreibung:
Alle Bauteile sind gängig und sowohl in bedrahteter Form wie auch in SMD erhältlich.
Die Widerstände entsprechen der E12 Reihe.
R1 und R3 bzw. R2 und R4 sollten schon 1% Toleranz haben oder besser für max. Genauigkeit auf gleiche Werte ausgemessen sein.
R4 und R5 sind unkritisch, der min. Strom durch die Referenzen sollte > 1mA sein.
P1 und P2 sollten Mehrgang-Cermet-Trimmer für akkurate Einstellung sein. (Kann man auch weglassen, s. u.)
D3 und D4 sind irgendwelche Standard-Kleinleistungsdioden. Dito.
Auch der OP ist unkritisch. Kann ein einfacher 741 sein oder auch ein Doppel-OP - zum drinnen und draussen messen ?!

Der LM335 ist von Haus aus ein hochpräziser, kalibrierbarer Temperatur-Sensor mit einer Spannngsdifferenz von 10mV/K.
Bei einem Strom von min. 1mA wird damit bei 25°C eine Spannung von 2,982V stabil erzeugt. (Einstellbar, wie hier gezeigt)
Der LM 336 ist von Haus aus eine hochstabile Zener-Referenz-Diode mit einer Spannung von 2,490V bei 25°C. Dito einstellbar.

Wer es nicht so genau braucht, kann auch P1, P2 und D3, D4 weglassen. Die "Einstell-Beinchen" vom LM 335/6 bleiben dann frei/offen.

Wer selber rechnen möchte bei anderen Betriebs- und Ausgangsspannungen / erforderlicher Auflösung:

R5, R6 = (Ub - Uzener) / > 1mA

R1 = R3, R2 = R4
Vout = R2 / R1 x (V2 - V1)

Der Arduino sampelt an seinen Analog-Eingängen mit 10-Bit - also eine Auflösung bei max. 5V / 1024 = 0,0078125 V / Schritt. Theorethisch....
Wer nun mit anderer Einstellung und / oder Verstärkung auf andere Ausgangsspannungen kommt, rechnet einfach:

Sample-Wert = Vout / 5V x 1024

Ich hoffe, vielen von euch damit geholfen zu haben.
Korrekturen und Anmerkungen willkommen.

Fast vergessen:
Den eigentlichen Temperatur-Sensor D1 kann man natürlich auch über ein längeres Kabel irgendwo anders hin verlegen.
Die Leitung sollte dann so etwas wie ein geschirmtes, 2-poliges Audio-Kabel sein, um Störungen auf langen Leitungen zu vermeiden.
Als Stecker kommen z.B. 2,5mm "Stereo"-Klinken in Betracht.

Und wie liest man das ganze am / mit dem Arduino aus ?
Hier ein Beispiel:
(Kommentare sind in Englisch - hab ich mir so angewöhnt ...)

#include <Streaming.h>

// var's for collecting average analog-value
#define MINANALOGREADSEQUENCE 25  // !!! this is a similiar delay time in ms for repeated use of analogRead
                                  // a value of 25 results in max. 40 samples/second
                                  // increase (up to 100 ?) will decrease cpu load in the loop !!
int  time2sample     = 0;   // 0 (or <= 333, see bleow) = off, no reading
byte analogReadPin   = 0;   // the desired pin
byte nvalreaded      = 0;   // normally only internal use
long analogval       = 0;   // the the average value at least
long millis_lastval  = 0;   // normally only internal use

 
void setup() 
{
  Serial.begin(9600); 
// ...  
}

// used for checking valid keypress and
// for collecting average analog-value
long millis_act;

void loop() 
{
  // ... evaluate Serial for commands / values
  // ... do something else in the loop ...

  millis_act = millis();
  
  // collect an average analog-value for a defined time
  // set "time2sample" to 0 (or < 333) stops reading values
  if (time2sample > 333)                // 333 only to keep the monitor away from to much running
  { if (nvalreaded == 0) millis_lastval = millis_act;         // remind time
    if ((millis_lastval + nvalreaded * MINANALOGREADSEQUENCE) <= millis_act)
    { analogval = analogval + analogRead(analogReadPin);      // add to value
      nvalreaded++;                                           // remind number of addings
    }
    if ((nvalreaded * MINANALOGREADSEQUENCE) >= time2sample)  // Time to evaluate ?
    { analogval = analogval / nvalreaded + 0.5;               // calc average value (0.5 for round up)
      // ---> here we have the average result !
      Serial << "Analog-value on Pin " << analogReadPin << " - Average value: " << analogval << " for " << millis_act - millis_lastval << " ms from " << nvalreaded << " values" << endl;
      // ---> use "analogval" for your intended purpose
      nvalreaded = 0;             // reset the counter .... we start again
      analogval  = 0;             // do not forget to delete the value ! It will fudge ther new result !
    }    
  }

  // ... do something else in the loop

}

Anwendung:
Je nach dem, wer was wie macht,

  • analogReadPin übergeben (oder fest setzen)
  • time2sample dito (0 oder <= 333 macht keine Prüfung)
    -> analogval auslesen.

Das funktioniert hier bei mir ganz ausgezeichnet und bringt stabile (Mittel-) Werte ohne "Gezappel" !
Die vorgegebene Sample-Zeit ist dann auch die für Rückgabezyklen.
Oder nur einmal lesen und dann time2sample wieder auf 0 setzen.

Da blockiert kein Delay und es bleibt Zeit genug für anderes in der Loop.
Ist auch nicht Zeitkritisch.

TempMessung.pdf (97.3 KB)

Hallo Terwi,

du hast einen entscheidenden Denkfehler gemacht. Die referenz des AD-Wandlers im Arduino ist die +Ub 5V - die aber in den seltensten Fällen auch 5,0V entsprechen. Bei einem Steckernetzteil ist das noch wahrscheinlicher, als an einem USB Anschluß. Ich habe nur einen LM35 und weil mir dessen Messwerte etwas "spanisch" vorkamen, habe ich spaßenshalber mal Ub gemessen. Bei mir 4,86V. Kann man in der Formel wieder rausrechnen lassen :slight_smile:
Ist aber nicht Sinn der Sache, wenn man dann per Software zu calibrieren anfängt.
Laß doch den OPV weg und lege die Referenzspannung an einen weiteren Analogeingang des Arduino 8)
Außerdem kann ein 1µF Folienkondensator zwischen Vss OP und dem "Mittelbein" nicht schaden. Sonst messe ich auf einer 2m Leitung alles Mögliche, nur keine stabile Temperatur.
Deswegen bin ich auf einen DS18B20 ausgewichen. Der kostet ca. 2€, ist genauso präzise und liefert mir ein digitales Signal. Außerdem kann ich auf einen Pin mehrere Sensoren parallel auslesen lassen, da jeder eine eigne ID hat :smiley:

Gruß Gerald

@Gerald
.... irgendwie empfinde ich es als schade, weil mein gut gemeinter Vorschlag irgendgendwie "mies" gemacht wird.
Ein klein wenig Schulterklopfen ala "gut gemacht, da kann man was mit anfangen/draus ableiten" hatte ich eher erwartet.

Prinzipiell habe ich sicherlich keinen Denkfehler gemacht - nur habe ich LEIDER NICHT EXPLIZIT darauf hingewiesen, das natürlich Messergebnisse vom Arduino nicht 100% genau sind und auch Abweichungen durch Spannungsschwankungen möglich sind.
Die hier vorgestellte Schaltung stellt KEINE Hochpräzisionsmesseinrichtung dar !

Ausserdem habe ich dazu auch darauf hingewiesen, was die Schaltung in Kombination mit einem Arduino oder anderen ADC-Eingang mit einer Auflösung von 1024 Bit KANN !
Muss eben halt nicht.
Der Zusatz im Titel lautet auch "Darf's auch genauer sein ?" ....

Wenn du das besser kannst - nur zu. Wir warten auf deinen Fred zu dem Thema.

Was passiert denn, wenn man so wie du empfiehlst, den Messeingang und die Referenz an 2 ( ! ) verschiedene Eingänge eines Arduinos packt ?
Die bei mir mögliche Auflösung von ca. 800 Schritten / 0,125mV bekommst du so mir Sicherheit nicht.
Deine Art von Auslese-Routine wäre dazu auch sehr interessant ...

Beweise mit deiner Applikation das Gegenteil, dass es preiswerter und einfacher ist ... oder einfach Klappe halten.

Bitte wähle Deine Worte mit mehr Bedacht sonst bist Du es der still ist. ]:smiley: ]:smiley:

Bei einem Titel "Darf's auch genauer sein" erwarte ich schon etwas genaueres als es mit einer 0-8-15 Beschaltung eines Arduinos mit einem Temperatursensor möglich ist.

Bereits ein LM35 mit der ATmega internen 1,1V Referenz mißt im Range 0° bis 110°C genauer und hat eine größere Auflösung als Deine vorgestellte Schaltung/Sketch.

Zu einem weiteren von Dir gemachten Denk-Fehler: ein 1% Widerstand ist nur 1% genau, unabhängig ob Du unter 100 Stück 2 mit dem gleichen Widerstand ausgesucht hast. Das gleiche gilt für den LM335. Einige Fehlerquellen können durch Kniffe eliminiert oder kompensiert werden aber andere Fehlerquellen nicht.

Grüße Uwe

uwefed:
Bitte wähle Deine Worte mit mehr Bedacht sonst bist Du es der still ist. ]:smiley: ]:smiley:

Ich wähle meine Worte eigentlich schon mit Bedacht.
War meine Antwort "sehr" daneben ? Ich denke nicht.

Gegenfrage bitte an den Antworter mit der Sensibilität seiner Aussagen ....

Bei einem Titel "Darf's auch genauer sein" erwarte ich schon etwas genaueres als es mit einer 0-8-15 Beschaltung eines Arduinos mit einem Temperatursensor möglich ist.

Ich bitte vielmalst um tausendfache Endschuldigung, wenn mein geistiger Erguss hier schon ebensooft gepostet wurde und eine Wiederholung absolut nicht von Belang ist, weil ja ganz offensichtlich jeder hier über eben diese Thematik genauestens "Bescheid" weiß und niemand definitiv keinerlei Hilfe benötigt.

Bereits ein LM35 mit der ATmega internen 1,1V Referenz mißt im Range 0° bis 110°C genauer und hat eine größere Auflösung als Deine vorgestellte Schaltung/Sketch.

Sorry, kenne ich nicht und habe ich hier auch nach intensievem Suchen in der Art nicht gefunden.
Bin ich ja wohl ein Voll-Depp, oder ?

Das gleiche gilt für den LM335. Einige Fehlerquellen können durch Kniffe eliminiert oder kompensiert werden aber andere Fehlerquellen nicht.

Hallo ? Ob es nun 5-, 2- ode 1-%tige Widerstände sind, spielt doch absolut keine Rolle, wenn ich die ausmesse - oder ?
Wenn ich R's auf gleichen Wert ausmesse, dann haben die auch den gleichen Wert ! Und dann ist auch die Verstärkung des Differenz-OPs so wie sie soll - inkl. differierendem Offset.

Das gleiche gilt für den LM335. Einige Fehlerquellen können durch Kniffe eliminiert oder kompensiert werden aber andere Fehlerquellen nicht.

Warum habe ich (vorsichtshalber) 2 Trimmer spendiert ?
Damit Fehlerquellen eben so weit wie es geht manuell korrigiert werden können !
Muss aber nicht ....
Welche weiteren "Kniffe" hättest du noch im Angebvot ?

Sorry - aber ich will doch nur helfen / vorschlagen und ggf. Ratsuchenden eine Idee geben.
Ist das hier nicht gewünscht ?

Wenn Du 10% Widerstände auf 1% genau ausmisst hast Du immer noch 10% Widerstände. D.h. sobald sich die Temperatur ändert driften die stärker weg / auseinander als 1% Widerstände. Ich sehe das so wie Uwe, wenn Du trommelst und dann nur eine Anfängerlösung präsentierst, dann mußt Du mit den Kommentaren fertig werden. Wenn's genauer sein soll würde ich IMMER einen fertigen Chip nehmen, außer ich habe spezielle Anfordernungen. Grund: man kann sehr viel mehr falsch machen als man glaubt. Deine Lösung ist ein schönes Beispiel für eine Lösung die gut gemeint aber nicht gut gemacht ist.

Hallo Terwi,

ich kenne dich nicht und wollte dir auch nicht zu nahe treten. Warum reagiert du dann gleich so "angepisst"?
Was das programmieren angeht, bin ich blutiger Anfänger, aber verstehen, was eine Schaltung tut, das konnte ich schon vor der µProzz. Ära :wink:
Man sollte sich nicht von 2 Nachkommastellen blenden lassen, die da auf einem Display rumzappeln, sondern immer auch hinterfragen, ob die Genauigkeit auch tatsächlich gegeben ist. Und darauf habe ich hingewiesen. Nicht mehr und nicht weniger.
Der LM 335 ist auf die nur auf die Temperatur abgeglichen. Der Einfluss der Spannung ist da eine ganz andere Baustelle. Der von mir angesprochene DS18B20 gibt in 12 Bit Genauigkeit digital aus - der kümmert sich um das Thema Referenzspannung so ganz nebenbei.
Als ich anfing zu basteln, mußte man ein digitales Thermometer noch per 2-Punkt Cali mit Eiswürfeln und kochendem Wasser calibrieren. Damals war quasi das Nonplusultra ein B511 (ein Äquivalent zum AD590, AD592) Als AD-Wandler nahm man einen C520 (CA3161/CA3162) - und wenn dessen Genauigkeit nicht ausreichte, dann wurde daraus ganz schnell ein A5 großes "OPV u. Zählergrab" :smiley:

Hallo TERWI

TERWI:
Sorry - aber ich will doch nur helfen / vorschlagen und ggf. Ratsuchenden eine Idee geben.
Ist das hier nicht gewünscht ?

von mir ein ausdrückliches Lob für Deine Lösung eines Problemes.

Lösungen gibt es hier viel zu wenig.
Das meiste sind Fragen, die man mit Hilfe der Suchfunktion oder Google in kurzer Zeit hätte beantworten können.

Daher nochmals
DANKE
und bitte mehr davon.

Gruss
Kurti

uwefed:
Bereits ein LM35 ...

TERWI:
Sorry, kenne ich nicht und habe ich hier auch nach intensievem Suchen in der Art nicht gefunden.

Uwe

@Udo Klein & andere
Wenn ich Widerstände exakt auf deren Wert vermesse, dann haben die auch den Wert !
Natürlich ist dieser Wert dann aller Wahrscheinlichkeit bei ca. 20-25°C gemessen.
Auch wenn sich die Umgebungstemperatur so wohl für alle beteiligten Bauteile (R, C, D, OP, ...) ggf. nennenswert aus dem vorgesehenen Meßbereich von hier - bitte ausdrücklichst zu beachten ! - ausserhalb Ub mit +5V im Mittel allgemein nicht nennenswert abweicht und der ADC-Wandler auch keine "Spirenzchen" macht ....
... dann ist do alles im, grünen Breich und ich verstehe das "Gesabbel" absolut und total nicht !

Anfängerlösung ?
Das ist ein Zusammenbau aus Applikationen des Herstellers. Der hat auch keine Ahnung ?

Wenn's genauer sein soll würde ich IMMER einen fertigen Chip nehmen, außer ich habe spezielle Anfordernungen. Grund: man kann sehr viel mehr falsch machen als man glaubt. Deine Lösung ist ein schönes Beispiel für eine Lösung die gut gemeint aber nicht gut gemacht ist.

Hallooooo.... so genau soll es doch farn nicht sein.
Spezielle Anforderungen wurden hier auch gar nicht gestellt.
Wer nicht aus Applikationen der Hersteller lernt und weiter Erfahrungen daraus anbleitet. hat eh verloren !
Hast du noch nie gemacht oder bist du "besser" und weisst mehr als der Produzent ?

Na klar kann man mit diesem "Design" auch was falsch machen ..... du machst alles von vorn herein gleich richtig ?

Gleiches gilt für nix_mehr_frei.

@kurti
Danke für die Blumem !
Da kommt noch was betreff Strom-Messung hinterher ....
.... wenn mich hier keiner aus der Communtiy rauskicken will, weil ich nur dummes Zeugs daherschwafele ....

@nix_mehr_frei

Der LM 335 ist auf die nur auf die Temperatur abgeglichen. Der Einfluss der Spannung ist da eine ganz andere Baustelle

Du weisst, das du damit reichlich dummes Zeug verbreitest ?
Schaltung mal studiert und die Applikation dazu auch ?

@Udo Klein
Die Toleranzangabe von Widerständen richtet sich nach den E-Klassen - E12, E24. ....
Natürlich haben Widerstämde der verschiedensten Bauarten auch verschiedene Toleranzen, was deren Teperaturanhämgigkeit betrifft.
Wenn man wie hier angegeben entsprechende R's passend "vermisst", dann passt das auch mit der Verstärkung und Offset des Diff-Verstärkers.

Deine Lösung ist ein schönes Beispiel für eine Lösung die gut gemeint aber nicht gut gemacht ist.

... wenn du meinst und das so stehen lassen kannst ...
Die Jungs & Mädels von z.B. TEXAS mach das mit deren Applikationen auch nur so aus Jux, um die Leute zu veräppeln ?

uwefed:
Bitte wähle Deine Worte mit mehr Bedacht sonst bist Du es der still ist. ]:smiley: ]:smiley:

Wie darf ich das hier bitte auffassen ?
"Andere" dürfen draufhauen und dummes Zeugs absondern ?
Bin ich hier unerwünscht ?

ej, leutels, bitte ein bißchen runterkommen, und ich meine ALLE.
kanns an der hitze liegen? ich kenne alle von Euch aus etlichen threads, aber heute gibt's zores? kühlt Euch ab, schlaft Euch aus, und morgen ist alles wieder gut.

seltsamer abend.

gruß stefan

@TERWI: ich wage zu bezweifeln, daß irgendein Elektroingineur der was auf sich hält eine Schaltung designed bei der die Toleranz der Widerstände wichtig ist und dann auf die Idee kommt die durch Selektion zu ermitteln. Das wird schon in den Anfängerbüchern als "bad practice" ausgedeutet. Damit wir uns richtig verstehen: Horowitz Hill ist ein Anfängerbuch für E-Ingineure.

R1 und R3 bzw. R2 und R4 sollten schon 1% Toleranz haben oder besser für max. Genauigkeit auf gleiche Werte ausgemessen sein.

Wenn ich Widerstände exakt auf deren Wert vermesse, dann haben die auch den Wert !

Wow. Dann hast Du vermutlich auch exakt kalibrierte Messgeräte? Ich habe das nicht weil ich solche engen Toleranzen normalerweise vermeide. 1% mit einem einfachen Multimeter ist häufig nur Einbildung. Aber erklär uns ruhig wie man das "richtig" macht.

Hallo Udo,

einen Widerstandswert genau zu messen ist eine Sache.
Zwei Widerstände auf Gleichheit zu kontrollieren eine viel einfachere.

Da der Messgerätfehler sich nicht in wenigen Augenblicken stark verändert, ist ein Ausmessen auf einen (fast) gleichen Wert machbar.

Ob dass Sinn macht, ist eine ganz andere Frage.

Gruss
Kurti

Den generellen Sinn der Schaltung mal außen vor, kann man - wie in dem anderen Thread gesagt - das Problem die Widerstände abzustimmen mit einem Instrumentenverstärker eliminieren. Dann braucht man nur noch einen externen Widerstand (was aber für solche Krummen Verstärkungen wohl ein Poti sein müsste). Die sind zwar generell teuer, aber den AD623 gibts bei Reichelt für 2,75€.

Kurti: sowas macht man Wheatstonebrücken und nicht mit einfachen Multimetern. Ich wollte primär aber darauf abheben, daß es wenig sinnvoll ist 10% Widerstände auf 1% zu selektieren. Vor allem dann nicht wenn man Therometer baut, also mit Temperaturänderungen rechnen muß. Mit einem Multimeter mit 2% Genauigkeit ist sowas jedenfalls nicht "einfach" machbar, außer mit der oben genannten Schaltung. Da er aber den Wert ermitteln will (und Du vermutlich auch) wird sowas nicht so "einfach" sein.

Sorry, aber hier muß ich Kurti recht geben.
in der benannten Schaltung (über deren generelle Sinnhaftigkeit ich mich nicht auslassen möchte) kommt es weniger auf die absoluten Werte der Widerstände an, sondern auf das Verhältnis.

Und das kann ich auch mit einem billigen Multimeter ausreichend genau ermitteln, weil sich der Fehler des Multimeters in der Fehlerrechnung rauskürzt.
Voraussetzung: die Messungen müssen direkt nacheinander und im gleichen Messbereich des Multimeters stattfinden.

Aber dann kann ich das Verhältnis der Widerstände sehr genau bestimmen.

Zum Thema Temperaturdrift gebe ich dir recht: Ein 10%er hat meist auch vom Material eine schlechtere Drift.
Was aber bei einem indoor betriebenen Messgerät kein Problem sein sollte, man muß es halt wissen, dass man z.B. das Gerät nicht in die Sonne stellen darf.

guntherb:
...kommt es weniger auf die absoluten Werte der Widerstände an, sondern auf das Verhältnis....

guntherb:
...Ein 10%er hat meist auch vom Material eine schlechtere Drift....

Da alle Widerstände einen nahezu ähnlichen Drift aufweisen dürften, ändert das aber auch wiederrum nichts wesentliches am Verhältnis. Oder? :blush:

Realizer:
Da alle Widerstände einen nahezu ähnlichen Drift aufweisen dürften, ändert das aber auch wiederrum nichts wesentliches am Verhältnis. Oder? :blush:

Wenn beide vom gleiche Hersteller kommen und die gleiche Widerstandspaste haben, dann ja. Aber wer weis das schon?