Guten Abend,
ich habe den Temperatursensor TMP36, allerdings kann ich damit nicht die
richtige Temperatur ermitteln. Ebenfalls benutze ich einen Arduino UNO.
Oftmals bekomme ich die richtige Temperatur raus, aber manchmal kommt es
auch vor, dass plötzlich extrem hohe Temperaturen ( ca.50 °C) angezeigt
werden.
Hier noch der Aufbau (zusätzlich habe ich noch einen 0,1µF Kondensator
zw. 5V und GND):
https://learn.adafruit.com/system/assets/assets/000/000/476/medium800/temperature_tmp36fritz.gif?1447975816
extern schrieb:> Oftmals bekomme ich die richtige Temperatur raus, aber manchmal kommt es> auch vor, dass plötzlich extrem hohe Temperaturen ( ca.50 °C) angezeigt> werden.
Glaskugel sagt Softwarefehler.
Es kann sein dass er auf seinem Steckboard oder bei den Leitungen einen
Wackelkontakt hat.
Es ist aber auch möglich dass er beim ADC etwas falsch macht und die
ADC-Werte subtrahiert und der Wert dann doppelt so hoch ist.
@ extern (Gast)
Lass dir mal die reinen ADC-Werte ausgeben und schau dann mal wie hoch
der höhere Wert ist, vermutlich ist er einfach doppelt so hoch, dann
liegt dein Fehler in der Art wie du deine ADC-Werte sammelst/abfragst.
Ich glaube nicht, dass der Fehler an der Software liegt und es auch
keine Probleme beim analogen einlesen gibt, da die falschen Temperaturen
immer zufällig auftreten. Könnte vielleicht wirklich am Aufbau mit dem
Steckbrett liegen.
Ich weiß jetzt zumindest wo der Fehler liegt.
Mit dem Multimeter messe ich an dem mittleren Pin eine konstante
Spannung, die Sinn machen würde. Allerdings zeigt mir mein Programm eine
falsche Spannung an.
Wie hoch ist denn die Spannung die gemessen wird?
Kommst du bei der Berechnung auf den richtigen analogen Wert?
Hast du den ADC kalibriert?
Dein ADC muss kein 2.56V haben, es können auch 2.4V oder 2.7V sein.
Der Wert der internen Aref ist extrem konstant, aber nicht sehr genau.
Miss bitte die Spannung am Aref-Pin wenn der Controller läuft.
Mike J. schrieb:> Wie hoch ist denn die Spannung die gemessen wird?> Kommst du bei der Berechnung auf den richtigen analogen Wert?
Mit dem Multimeter messe ich ziemlich genau 0.7V. Mein Arduino
"berechnet" allerdings fast jedes Mal wenn ich ihn anschließe eine neue
Spannung, gerade 1.18 V.
Dementsprechend wird auch nicht der richtige analoge Wert eingelesen.
Edit: Nach ungefähr 5 Minuten Betriebszeit kommt er auf eine Spannung
von 0.72 V.
Mike J. schrieb:> Hast du den ADC kalibriert?> Dein ADC muss kein 2.56V haben, es können auch 2.4V oder 2.7V sein.> Der Wert der internen Aref ist extrem konstant, aber nicht sehr genau.
Nein habe ihn nicht kalibriert, was meinst du damit genau
beziehungsweise wie geht das?
Mike J. schrieb:> Miss bitte die Spannung am Aref-Pin wenn der Controller läuft.
Habe im Moment leider kein Multimeter zur Hand. Was müsste der Aref-Pin
denn anzeigen?
extern schrieb:> Nein habe ihn nicht kalibriert, was meinst du damit genau> beziehungsweise wie geht das?
Also den ADC an sich kann man nicht kalibrieren, aber man kann die reale
ADC-Spannung ermitteln und dann einfach den Messwert mit der echten
Referenz-Spannung berechnen.
Der Wert von 2,56V (ATmega8) ist nur ein Wert der angestrebt wird, aber
oft liegt der Wert etwas daneben.
Ich hatte bei einem Chip 2,701V am Aref-Pin gemessen.
> Was müsste der Aref-Pin denn anzeigen?
Bei deinem ADC (ATmega328P) liegt die Referenzspannung aber zwischen
1.0V und 1.2V, typischer Weise bei 1.1V, aber dieser Wert ist konstant
und schwankt nicht.
Wenn dein Wert schwankt, dann liegt das an etwas anderes.
Hast du eigentlich die interne Referenz bei deinem Arduino eingestellt
oder wird der ADC des Arduino immer mit der internen Referenz
initialisiert?
(ich kenne mich da nicht so aus)
Zum testen kannst du den Pin A0 auch einfach an eine feste Spannung oder
einem 10kOhm Poti hängen.
extern schrieb:> Mit dem Multimeter messe ich ziemlich genau 0.7V
Das sind dann also 20°C.
> Habe im Moment leider kein Multimeter zur Hand.
Aha ...
holla die waldfee schrieb:> wie bekommt der Arduino Strom? Batterien, Netztteil?
über USB vom PC
Mike J. schrieb:> Bei deinem ADC (ATmega328P) liegt die Referenzspannung aber zwischen> 1.0V und 1.2V, typischer Weise bei 1.1V, aber dieser Wert ist konstant> und schwankt nicht.>> Wenn dein Wert schwankt, dann liegt das an etwas anderes.
Ich habe nun nachgemessen. Zwischen Aref und GND messe ich konstant
5.032 V.
Mike J. schrieb:> Hast du eigentlich die interne Referenz bei deinem Arduino eingestellt> oder wird der ADC des Arduino immer mit der internen Referenz> initialisiert?
Ich habe nicht eigestellt. Ich verstehe aber auch nicht was es mit der
Referenzspannung überhaupt auf sich hat und weshalb das Problem dadurch
auftreten soll.
extern schrieb:> Ich habe nicht eigestellt. Ich verstehe aber auch nicht was es mit der> Referenzspannung überhaupt auf sich hat und weshalb das Problem dadurch> auftreten soll.
Ja, wie gesagt und ich habe keine Ahnung von dem Arduino-Zeugs, also
taste ich mich langsam ran.
Also scheinbar wurde die Versorgungsspannung von 5V als Referenz
gewählt.
Ich denke mal nicht dass das Problem dadurch auftritt da du ja fertige
Codeteile nutzt von denen man davon ausgehen kann dass sie
funktionieren.
Vielleicht gibt es einen kleinen Wackelkontakt zwischen deiner TMP36
Platine und dem Arduino-Board.
Vielleicht einfach mal die Kabel tauschen, möglicher Weise hat eins
einen Wackelkontakt.
Ich würde 100nF zwischen Vcc und GND vom TMP36 schalten und vielleicht
noch 100nF an den Ausgang.
es scheint nun so, als würden die krassen Schwankungen nicht mehr
auftreten. Aber nun ist der gemessene Wert mit dem Arduino ungefähr
0.02V niedriger als mir das Multimeter anzeigt. Muss ich mich mit dieser
Genauigkeit zufrieden geben?
extern schrieb:> Muss ich mich mit dieser Genauigkeit zufrieden geben?
Nein, das kann man per Software kompensieren indem du den analogen Wert
korrigierst.
Ich bin aber echt nicht zufrieden damit :D
Die Werte liegen jetzt 0.04V auseinander und das macht sich bei der
angezeigten Temperatur natürlich bemerkbar.
1
analog_wert=analogRead(A0);
2
Serial.println(analog_wert);
3
spannung=analog_wert*(5/1023.0);
4
Serial.println(spannung);
hier nochmal der Code zum einlesen, ich habe den noch etwas verändert.
Bei der Berechnung der Spannung muss durch 1023 geteilt werden, da dies
der maximale Wert ist.
Das habe ich mir auch schon überlegt, allerdings sind die Werte nicht
immer diesselben. Die Referenzspannung liegt jetzt bei 5.013V und und
auch die Spannung am analogenInput stimmt manchmal mit dem "richtigen"
Wert überein und manchmal liegt sie sogar 0.04V darunter
extern schrieb:> allerdings sind die Werte nicht immer die selben.
Ja, so ist das wenn man die Versorgungsspannung als Referenz nimmt.
Kannst ja die interne Referenz einschalten, dann hast du einen sehr
stabilen Wert als Referenz.
analogReference(INTERNAL1V1);
Du musst einen Kondensator so nahe wie möglich mit dem Ref_Pin
verbinden, also am besten direkt auf dem Arduino-Board und nicht extern
auf einem Steckbrett.
Dann einfach mit einem Multimeter den Wert messen und eintragen.