Forum: Mikrocontroller und Digitale Elektronik Temperatursensor


von Daniel H (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, ich versuche gerade einen Temperatursensor mit meinem Arduino 
Board zu verbinden. Das genau Datensheet kann ich euch nicht nennen da 
in dem Kit wo der Sensor drin war nu 4K7 Thermistor steht. Auf jedenfall 
habe ich alles richtig verbunden denke ich und bekomme komische Werte 
geliefert.

Hier auch noch mein Programm:
1
#include <math.h>
2
3
void setup() {
4
 Serial.begin(9600);
5
}
6
7
double Thermister(int RawADC) {
8
  double Temp;
9
  // See http://en.wikipedia.org/wiki/Thermistor for explanation of formula
10
  Temp = log(((10240000/RawADC) - 10000));
11
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));
12
  Temp = Temp - 273.15;           // Convert Kelvin to Celcius
13
  return Temp;
14
}
15
16
void printTemp(void) {
17
18
  double temp = Thermister(analogRead(0));  // Read sensor
19
  Serial.println((double)temp);
20
21
}
22
23
void loop(void) {
24
  printTemp();
25
  delay(1000);
26
}

Ich schätze ich habe das selbe Problem wie diese Person hier: 
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1230826223

Kann es daran liegen das ich einen 10K Resistor verwende ?

Hier noch ein Bild wie meine Verkabelung aussieht : (siehe Anhang)


Vielen Dank für eure Hilfe !

von citb (Gast)


Lesenswert?

Die Verdrahtung ist unlogisch.

citb

von Daniel H (Gast)


Lesenswert?

Hm wieso ? Wie klappts denn besser ? Kannst du mir sas vllt mal aufmalen 
?

von Einhart P. (einhart)


Lesenswert?

GND anstelle der 5V nehmen ;-)

von Frank H. (huene)


Lesenswert?

Hallo,

 lass dir doch einfach mal den gemessenen AD-Wert ausgeben. Sollte 
dieser bei 1023 liegen, ist die Eingangspannung am AD-Wandler höher als 
die Referenzspannung. Falls nicht, gib doch einfach mal die 
Zwischenergebnisse aus, die kannst du dann ja auch mal von Hand 
gegenrechnen.

Gruß
 Frank

von Karl H. (kbuchegg)


Lesenswert?

>   // See http://en.wikipedia.org/wiki/Thermistor for explanation of formula
>  Temp = log(((10240000/RawADC) - 10000));
>  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741  Temp  Temp 
* Temp));
>  Temp = Temp - 273.15;           // Convert Kelvin to Celcius


Ich kan mir beim besten Willen nicht vorstellen, dass du in er 
englischen Wikipedia eine Formel findest, die genau für deinen Fall 
eines Terminstors in einem Spannungsteiler mit einem (für Wikipedia) 
unbekannten Widerstand passt.

Die Formel im Wiki geht davon aus, dass du den Widerstandswert des 
Terminstors gemessen hast
Der Wert, den du vom ADC bekommst ist aber NICHT der Widerstandswert des 
Termistors! Er hängt damit zusammen, aber er ist es nicht direkt.

von Daniel H (Gast)


Lesenswert?

Ok also AD Wert liegt bei 300-350 und wenn ich anstatt 5V GND verbinde 
dann habe ich 0.0 was doch eigentlich klar ist oder ? Ich muss doch mit 
dem 5V oder dem 3.3V verbinden oder nicht ?

Hoffe ihr könnte mir helfen, aber vielen Dank schonmal !

von citb (Gast)


Lesenswert?

Der Thermistor soll mit dem Widerstand einen Spannungsteiler bilden und 
Du willst die Spannung am Punkt zwischen den beiden messen. Das musst Du 
Dir erst einmal klar machen (aufzeichnen). Dann geht der Rest vonn 
allein.

citb

von Daniel H (Gast)


Lesenswert?

Hm das scheint mit ein wenig zu komplex zu sein. Habe die ganzen 
Bauteile heute morgen bekommen. Habe vor ein paar Stunden ein LED mit 
Button zum leuchten gebracht und habe dann den Sensor gesehen und wollte 
unbedingt was damit machen. Wie genau ich jetzt das anstelle mit dem 
Spannungsteiler will mir noch nicht ganz klar werden. Entschuldigt meine 
Unbeholfenheit... :)

von Einhart P. (einhart)


Lesenswert?

Tu mir einen Gefallen: stecke das obere rote Kabel in den GND Anschluss!

von Daniel H (Gast)


Lesenswert?

Ist es doch ..

das eine rote geht zum Analog 0, das Obere rechte zu GND, das Gelbe zu 
5V.

von Karl H. (kbuchegg)


Lesenswert?

Einhart Pape schrieb:
> Tu mir einen Gefallen: stecke das obere rote Kabel in den GND Anschluss!

Wie konfiguriert man eigentlich mit den Arduino Funktionen den ADC? Auf 
welcher Referenzspannung ist der per Default?

Ich hätt nämlich eher den orangen auf GND gelegt, damit sich ein 
Spannungsteiler

      5V --- Term -+- R ---- GND
                   |
                   v
                Eingang

ergibt. Ich weiß aber nicht, welche Referenzspannung per Default benutzt 
wird und aus dem Code kann ich es nicht ersehen.

von Daniel H (Gast)


Lesenswert?

Oh sorry mir gerade nochmal das Bild angesehen.... da hatte ich mich 
wirklich um einen Steckplatz vertan... aber jetzt habe ich es bei GND 
und 5V drin und es liefert die oben genannten Resultate.

von Einhart P. (einhart)


Lesenswert?

Ok, dann liegt`s am Foto.

von Verwirrter (Gast)


Lesenswert?

Daniel H schrieb:
> das eine rote geht zum Analog 0, das Obere rechte zu GND, das Gelbe zu
> 5V.

Wie wäre es mal mit vernünftigen Strippenfarben und einem Schaltplan?

von Yalu X. (yalu) (Moderator)


Lesenswert?

Du musst 5V und GND vertauschen, d.h. der 10kΩ-Widerstand muss an GND
und der Thermistor an 5V liegen. Nur dann stimmt diese Formel zur
Berechnung des Widerstands:
1
(10240000/RawADC) - 10000)

Wenn du wie jetzt die Widerstände andersherum anschließt, musst du die
obige Formel entsprechend ändern.

> Ok also AD Wert liegt bei 300-350

Das sieht gut aus. 4,7kΩ entsprechen bei deiner Beschaltung einem
ADC-Wert von etwa 327. Wenn du 5V und GND tauschst, sollte der ADC-Wert
etwa 697 sein, und deine Formel liefert dann etwa 4700.
1
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));

Woher hast du dieser Koeffizienten? Aus dem Wikipedia sind sie nicht und
ein Datenblatt hast du ja keins.

: Wiederhergestellt durch Moderator
von Karl H. (kbuchegg)


Lesenswert?

Daniel H schrieb:
> Hm das scheint mit ein wenig zu komplex zu sein. Habe die ganzen
> Bauteile heute morgen bekommen.

Wenn dich die Mathematik erst mal vor ein Problem stellt, solltest du 
vielleicht erst mal mit etwas anfangen, das mathematisch nicht so 
anspruchsvoll ist.

War bei deinen Bauteilen kein Poti dabei?

  Poti als Spannungsteiler anschliessen
  mit dem ADC messen
  ADC Werte ausgeben

Wenn du am Poti drehst, gibt der ADC je nach Potistellung Werte zwischen 
0 und 1023 aus. Da wird dir doch bestimmt etwas einfallen, was man damit 
machen könnte. Denk zb mal an ein paar LED, von denen je nach 
Potistellung mal mehr und mal weniger leuchten sollen

von Daniel H (Gast)


Lesenswert?

Also das Programm hatte ich hierher: 
http://www.hacktronics.com/Tutorials/arduino-thermistor-tutorial.html 
(wegen den Koeffizienten)

Klar kann ich auch erstmal diese Standard Anwendung zu Beginn bauen, 
fand so ein Thermometer halt einfach reizvoll :)

Habe GND und 5V vertauscht und bekomme jetzt als wert von analogRead(0) 
ca 660 was mit deiner Vermutung übereinstimmt. Die Verkabelung scheint 
also nun zu funktionieren.... fragt sich nur wie ich jetzt diesen Wert 
in Celsius überführe.

von Karl H. (kbuchegg)


Lesenswert?

Daniel H schrieb:

> ca 660 was mit deiner Vermutung übereinstimmt. Die Verkabelung scheint
> also nun zu funktionieren.... fragt sich nur wie ich jetzt diesen Wert
> in Celsius überführe.

Indem du darüber resümierst, was dieser Wert eigentlich aussagt und wie 
er zu Stande kommt. Danach setzt du deine mathematischen Fähigkeiten ein 
und leitest dir erst mal eine Formel her, mit der du aus diesem Wert den 
Widerstandswert des Termistors errechnen kannst. Dann bist du schon fast 
auf der Zielgeraden, denn dann brauchst du diesen Widerstandswert mit 
der bekannten Formel R->T nur noch in eine Temperatur umrechnen.

Wenn du momentan nur 'Bahnhof' verstehst, dann solltest du vielleicht 
erst mal den Termistor zur Seite legen und mit etwas anderem am ADC 
Eingang experimentieren, bis dir klar ist was genau du eigentlich mit 
dem ADC misst und was man mit dem Wert anfangen kann.

(Hast du eigentlich ein Voltmeter?)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Danach setzt du deine mathematischen Fähigkeiten ein
> und leitest dir erst mal eine Formel her, mit der du aus diesem Wert den
> Widerstandswert des Termistors errechnen kannst.

Diese Formel hat er ja schon, nachdem er jetzt die Schaltung passend zur
Formel gemacht hat:
1
(10240000/RawADC) - 10000

Die Koeffizienten der Umrechnungsformel vom Widerstand in die Temperatur
scheinen aber von einem 10kΩ-Sensor zu sein:
1
  Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp * Temp * Temp));

Damit ist die Formel hier nicht brauchbar. Man könnte allenfalls den
gemessenen Widerstandswert mit dem Faktor 10/4.7 multiplizieren, um
wenigstens eine grobe Näherung zu erhalten. Dann ist die dicke Formel
aber wie Kanonen auf Spatzen.

von Daniel H (Gast)


Lesenswert?

Ne habe kein Voltmeter.
Habe dieses Datasheet gefunden, weil ich glaube endlich den Namen des 
Sensors herausgefunden zu haben. Da steht was zur Berechnung allerdings 
für einen Laien etwas undurchsichtig.

Zu der letzten Frage. Der Wert gibt den Widerstandswert bei der 
Temperatur T an, oder nicht ?

Hier das Datasheet:
http://www.datasheetcatalog.net/de/datasheets_pdf/B/5/7/1/B57164-K472.shtml

von Karl H. (kbuchegg)


Lesenswert?

Daniel H schrieb:

> Zu der letzten Frage. Der Wert gibt den Widerstandswert bei der
> Temperatur T an, oder nicht ?

Nein.
Der Wert vom ADC gibt an, in welchem Verhältnis die Spannung am ADC 
Eingang zur Referenzspannung steht. Wobei ein Wert von 1024 für 100% 
steht.

von Daniel H (Gast)


Lesenswert?

Hm wo finde ich denn die Koeffizienten für einen 4,7K Sensor ?

von Daniel H (Gast)


Lesenswert?

Hm keiner eine Formel für mich ?
Wäre toll wenn mir hier jemand aufzeigen könnte wie ich das ganze 
rechnen kann.

von Karl H. (kbuchegg)


Lesenswert?

Yalu X. schrieb:
> Karl Heinz Buchegger schrieb:
>> Danach setzt du deine mathematischen Fähigkeiten ein
>> und leitest dir erst mal eine Formel her, mit der du aus diesem Wert den
>> Widerstandswert des Termistors errechnen kannst.
>
> Diese Formel hat er ja schon, nachdem er jetzt die Schaltung passend zur
> Formel gemacht hat:
>
>
1
> (10240000/RawADC) - 10000
2
>

Disclaimer: Ich hab die Mathe nicht gemacht.
Aber das sieht nicht richtig aus. Wenn das den Widerstandswert in einem 
Spannungsteiler mit 10k ergibt, dann geb ich ein virtuelles Bier aus.

von Daniel H (Gast)


Lesenswert?

Hm ich weiß echt nicht mehr weiter....
Habe mir jetzt die letzte Dreiviertel Stunde sämtliche Einträge 
durchgelesen die auch nur im entferntesten damit zu tun haben, aber die 
Berechnung funktioniert noch immer nicht. Hat denn wirklich keiner eine 
Idee wie mein Programm aussehen müsste ?

Viele Grüße Daniel

von MaWin (Gast)


Lesenswert?

> Hm keiner eine Formel für mich ?

Such dir eine aus:

http://www.epcos.de/web/generator/Web/Sections/ProductCatalog/Sensors/TemperatureMeasurement/Page,locale=nn.html

schliesslich weiß niemand WELCHEN NTC du hast.

Vielleicht hilft
Allgemeine Technische Informationen
Standardized R/T characteristics

oder du lässt rechnen:

http://www.epcos.de/web/generator/Web/Sections/DesignSupport/Tools/NTCThermistors/Page,locale=nn.html

von Daniel H (Gast)


Angehängte Dateien:

Lesenswert?

Habe glaube ich diesen hier:
B57164K0472+000

Hier das Datenblatt:(siehe Anhang)

von Yalu X. (yalu) (Moderator)


Lesenswert?

Wenn es sicht bei dem Thermistor tatsächlich um den B57164 mit 4,7kΩ
handelt, sollte es so gehen:
1
double Thermister(int RawADC) {
2
  double Temp;
3
  Temp = log(((1024e4 / RawADC) - 1e4));
4
  Temp = ((-0.1236 * Temp + 4.818) * Temp - 77.97) * Temp + 414.1;
5
  return Temp; // in °C
6
}

Der Ausdruck in der vierten Zeile ist das nach der Methode der kleinsten
Quadrate optimale Polynom dritten Grades und approximiert die tabellari-
schen Werte im Datenblatt (R/T-Kennlinie Nr. 4001) auf besser als 1K:
1
—————————————————————————————————    —————————————————————————————————
2
Widerstand (Ω)  Temperatur (°C)      Widerstand (Ω)  Temperatur (°C)
3
               Tabelle  berechnet                   Tabelle  berechnet
4
—————————————————————————————————    —————————————————————————————————
5
    413844      -55.0     -55.8             993       65.0      64.9
6
    289755      -50.0     -50.3             837       70.0      69.9
7
    205517      -45.0     -45.0             709       75.0      74.9
8
    147556      -40.0     -39.8             603       80.0      80.0
9
    107169      -35.0     -34.7             515       85.0      85.0
10
     78687      -30.0     -29.7             441       90.0      90.1
11
     58125      -25.0     -24.6             380       95.0      95.1
12
     43406      -20.0     -19.6             328      100.0     100.1
13
     32937      -15.0     -14.7             284      105.0     105.1
14
     25217      -10.0      -9.9             247      110.0     110.1
15
     19392       -5.0      -5.0             215      115.0     115.2
16
     15040        0.0      -0.1             188      120.0     120.2
17
     11743        5.0       4.8             164      125.0     125.3
18
      9241       10.0       9.8             144      130.0     130.4
19
      7330       15.0      14.7             127      135.0     135.3
20
      5855       20.0      19.6             113      140.0     140.2
21
      4700       25.0      24.6             100      145.0     145.2
22
      3777       30.0      29.7              89      150.0     150.2
23
      3071       35.0      34.7              79      155.0     155.1
24
      2512       40.0      39.7              71      160.0     160.0
25
      2066       45.0      44.7              63      165.0     164.8
26
      1709       50.0      49.7              57      170.0     169.6
27
      1419       55.0      54.8              51      175.0     174.4
28
      1184       60.0      59.8              46      180.0     179.1
29
—————————————————————————————————    —————————————————————————————————

von hinz (Gast)


Lesenswert?

Yalu X. schrieb:
> Der Ausdruck in der vierten Zeile ist das nach der Methode der kleinsten
> Quadrate optimale Polynom dritten Grades und approximiert die tabellari-
> schen Werte im Datenblatt (R/T-Kennlinie Nr. 4001)

Wenn die Berechnung eines Spannungsteilers schon zu viel Mathematik ist, 
wie soll das dann mit der Polynomapproximation erst sein ...
Hier im Forum ist oft zu lesen, das die ganzen Kommata in der Formel den 
µC-Code sehr groß machen. Geht das nicht mit ganzen Zahlen?

von Daniel H (Gast)


Lesenswert?

Super vielen Dank !
Bekomme jetzt einen Wert von 19.99 ausgespuckt, mein Wecker zeigt ca 
20,5 also könnte das schon passen....

Vielen Dank nochmal !

von Daniel H (Gast)


Lesenswert?

Werde mich heute Abend wenn ich heim komme mal daran machen und 
versuchen die Formel zu verstehen... wenn mir noch was unklar ist melde 
ich mich nochmal, weil ich das ganze ja auch verstehen und nicht nur 
abschreiben möchte.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.