Adruino mit Temperatursensor

Gast #2710130
Moinzen,

hab vor ein paar Stunden gerade meinen Ardu ausgepackt, also alles sehr 
blutig.

Ich versuche gerade diesen Temperatursensor zu laufen zu bringen.
Bekomme jedoch komische Werte.
http://www.ebay.de/itm/261026313725?ssPageName=STRK:MEWNX:IT&_trksid=p3984.m1439.l2649

Könnt ihr einen Blick auf dessen Schaltplan werfen?

Es ist ein Thermistor, müssten nicht R5 und R2 einen Teiler bilden 
anstelle parallel zu sein oder irre ich mich?
Gast
ah das ist wohl vielleicht doch nicht der thermistor, sondern der ist 
nur im oberen Bild, dann wäre das doch richtig.

Irgendwie checke ich diesen Plan nicht so recht.

Wenn ich den Thermistor erwärme dann sinkt die Spannung am Analoginput 
anstatt zu steigen :-/
Gast
herb schrieb:
> Wenn ich den Thermistor erwärme dann sinkt die Spannung am Analoginput
> anstatt zu steigen :-/
Mach dir da nichts draus. Der Arduino hat einen µC, der das richten 
kann.

Der Schaltplan ist in der Tat ein Witz. Von dem LM393 sind bestimmt noch 
mehr Pins angeschlossen, als dort gezeichnet. Vermutlich besteht 
mindestens eine Gegenkopplungsverbindung zwischen INA- (2) und OUTA (1).
Gast
Das ist doch vollkommen richtig. Der LM393 ist ein Komparator, der hier
nur die LED ansteuert. Mit dem Potentiometer stellt man nur die Schalt-
schwelle ein. Der Schaltkreis ist überflüssig, wenn man nur das 
Analogsignal abgreifen will. Das holt man sich aus dem Verbindungspunkt 
von R1 und N1.

Einen Widerstand und einen Thermistor hättest Du in Deutschland auch
kaufen können und die wären billiger als 4,99 Dollar gewesen.

;-)

MfG Paul
Gast
jo der das Ganze hat einen Digi out and AO und beim Schwellwert leuchtet 
noch eine extra LED. Aber hast recht, das ist eigentlich ziemlich wayne 
:-)

Da der Aufbau ja falsch herum ist muss ich jetzt den Code ändern.

double Thermistor(int RawADC) {

long Resistance;  double Temp;
Resistance=((10240000/RawADC) - 10000);  // Assuming a 10k Thermistor. 
Calculation is actually: Resistance = (1024 * BalanceResistor/ADC) - 
BalanceResistor
Temp = log(Resistance);
Temp = 1 / (0.001129148 + (0.000234125 * Temp) + (0.0000000876741 * Temp 
 Temp  Temp));
Temp = Temp - 273.15;



Dazu

Resistance = (1024 * BalanceResistor/ADC) - BalanceResistor
R1 = (1024 * R2/ADC)- R2

Aber Resistance und Balance Resistor sind vertauscht, richtig?
Also nach R2 auflösen.

Da komme ich dann auf

R2= (R1 * ADC) / (1024 - ADC)

Ist das richtig gedacht?
Gast
sry für meine Noobness,
aber kann mir jmd als Bonus verraten warum bei

Temp = log((((1024 * 10000) / RawADC) - 10000));

was anderes rauskommt für Temp als bei

Temp = log((((10240000) / RawADC) - 10000));

für mich ist das das Gleiche :-/
Gast
Naja Lirum Larum

Ich habs eigentlich denke ich richtig gerechnet aber ich komme bei 
meinem Raum mit offenem Fenster auf 42°C was nicht sein kann.

Jetzt habe ich das nochmal anschaulich zum Nachvollziehen aufbereitet.

An meinem ADC lese ich 1,67V aus.

Das habe ich einer Sim nachgebaut: damit ich auf 1,67V komme muss der 
Thermistor gerade 5kOhm Widerstand haben, richtig?

Wäre die Thermistorschaltung normal aufgebaut (siehe zweite Schaltung) 
entspräche das dann 3,3V.

Aus einer Tabelle für 10K Thermi entnehme ich:
ADC  V                 R                 Temp             Temp2
677  3,305664063  5012,791728  41,93468981  41,5

Dh er zeigt mir gerade um die 42°C

Nach umbauen der Formeln und Spannungsteiler usw bin ich auch auf solche 
Werte gekommen.

Wie kann das denn sein? Kann mir bitte jmd weiterhelfen
Angehängte Dateien:
herb schrieb:
> aber kann mir jmd als Bonus verraten warum bei
>
> Temp = log((((1024 * 10000) / RawADC) - 10000));
>
> was anderes rauskommt für Temp als bei
>
> Temp = log((((10240000) / RawADC) - 10000));
>
> für mich ist das das Gleiche :-/

Was für Datentypen sind den die einzelnen Komponenten? Jetzt müsste man 
halt C programmieren können ...
Gast
Danke,
Ich habs nochmal anders gemacht, dann hats mit dem Rechnen geklappt.

Aber hast du eine Idee wieso da bei mir 42°C rauskommt mit der Erklärung 
die ich gegeben habe?
Gast
herb schrieb:
> Temp = log((((10240000) / RawADC) - 10000));

Probier mal
  Temp = log((((10240000L) / RawADC) - 10000));
oder
  Temp = log((((10240000.0) / RawADC) - 10000));

Insgesamt ein wildes Kuddelmuddel von impliziten Typumwandlungen ;-)
Gast
Danke, aber:
Temp = log((((10240000) / RawADC) - 10000));

so stehts ja im Beispielcode und ist wohl so korrekt.

Da 10240000 eine Zusammenfassung ist von 1024  10000 bzw 1024  
Balanceresistor und ich die Formel umstellen wollte habe ich einfach 
statt 1024 * 10000 geschrieben und habe mich gewundert das nicht mehr 
das Gleiche rauskommt.

Beschäftige mich ja erst seit gestern abend mit solchem Zeugs, dh keinen 
Plan von Datentypen.

Aber habs dann anders ja hinbekommen.

Viel wichtiger wäre mir jetzt das mit den 42°C :-/
Gast
Ist vielleicht das entscheidende das es irgendein Thermistor ist der 
sich anders verhält als andere?
Oder gibts da nicht so große Unterschiede was eine Differenz von 20°C 
zur echten Temp erklären würde?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.