Hallo,
ich habe ein (kleines) Problem mit dem LM335-Temperatursensor:
Es gibt sehr starke Schwankungen bei der Messung, mal sind es 68°C dann wieder 107°C ...
Hier aber erstmal die Hardware:
Das Merkwürdige an der Sache ist, wenn ich den Sensor mit den Powerpins meines Arduino Uno's versorge und ihn mit dem Poti kalibriert habe funktioniert es.
Aber er ist an ein Netzteil mit 5,03V und max 500mA angeschlossen (soll so sein, da es im Dauerbetrieb laufen soll).
Mite dem Messgerät messe ich zwischen + und Gnd einen konstanten Wert (gerade 2,997V).
Also muss der Fehler doch im Code sein, oder?
stevie1002:
Also muss der Fehler doch im Code sein, oder?
Du hast vermutlich deftige Integer-Überläufe drin:
~~ for (int i = 0; i < amount;i++)~~
~~ {~~
~~ meassure = analogRead(tempPin); // meassure zwischen 0 und 1023~~
~~ delay(100);~~
~~ tempTotal += meassure; // 10 mal addieren ergibt Werte zwischen 0 und 10230~~
~~ }~~
~~ // Und jetzt wird es haarig: dividieren ergibt wieder Werte zwischen 0 und 1023,~~
~~ // in der Klammer multipliziert mit 500 sind das Werte zwischen 0 und 511500~~
~~ temp = ((tempTotal / amount) * 5 * 100) / 1024 - 273.15;~~
~~ Integer geht aber nur bis maximal 32767 und nicht mal ansatzweise bis 511500~~
~~ Wenn sowieso Datentyp float herauskommen soll, rechnest Du beim überlaufgefährdeten Ausdruck in den Klammern am besten in float:~~
~~ temp = ((tempTotal / amount) * (float)5 * 100) / 1024 - 273.15;~~
Edit: Gestrichen (siehe Uwes Beitrag zwei weiter unten)
dann hast Du laut plan die massen nicht verbunden, oder?
so funktioniert die messung nicht.
entweder einfach verbinden, oder gleich den arduino mit den 5V des netzteils mitversorgen. das 9V-netzteil ist überflüssig. vorsicht, nicht verpolen, beim versorgen des arduino direkt am 5V-pin hast Du keine sicherung.
@ Jurs
da tempTotal ein float ist müßte dann das Ergebnis von (tempTotal / amount) * 5 * 100) nicht auch ein Float sein?
@stevie1002
Ein Problem kann die Referenzspannung des A/D-Wandlers sein. Die 5V-Versorgungsspannung ist nicht so konstant wie Du denkst. Kontrolliere mal die 5V Versorgung. Hat das LCD-Modul eine 5V Hintergrundbeleuchtung?
Nachgerechnet:
68°C sind 699 ADC und 107°C sind 778 ADC. Eigentlich ein Rießenunterschied in der Messung. aber nur 10% obwohl die Temperatur fast ca 40% Unterschied ist.
@stevie1002
Miß mal bitte die Versorgungsspannug im Wechselspannungsbereich deines Meßgerätes. Mißt Du etwas unter 50mV oder um die 0,5V?
Was passiert wenn Du die Hintergrundbeleuchtung konstant einschaltest anstatt mittels PWM zu dimmen?
Hast Du versucht alle gelesenen Werte auf die Serielle Schnittstelle auszugeben? (jede der 10 Messungen)
Der Transistor im Schaltbild ist verkehrt angeschlossen. Der Emitter ( Pin mit dem Pfeil) muß mit Masse verbunden werden. Dürfte aber nicht der Grund des Problems sein.
ich sehe immer noch nicht, wo GND des lm335 mit GND des arduino verbunden ist. ok, bin ja kein elektroniker, aber kann man so einen analogen wert messen?
@Uwe:
im Wechselspannungbereich kann ich überhaupt nichts messen (oder mach ich was falsch? + an + und - an - ?)
Wenn die Hintergrundbeleuchtung dauer an ist, springt er nur noch zwischen 129 und 132°C herum.
Alle 10 Messungen einzeln werd ich morgen mal testen
und der Transistor ist in der Realität richtig herum angeschlossen, den Schaltplan habe ich nur schnell gezeichnet um den Aufbau zeigen zu können
@stefan:
Ja, da hast du recht, er ist überhaupt nicht mit Gnd vom Arduino verbunden, kann man nur so die Spannung exakt messen mit dem Arduino?
Das Merkwürdige an der Sache ist, wenn ich den Sensor mit den Powerpins meines Arduino Uno's versorge und ihn mit dem Poti kalibriert habe funktioniert es.
deswegen glaub' ich, daß sie nicht verbunden sind...
Das nenn ich mal eine gute Erklärung XD
Ja jetzt ist es schon besser, aber es schwankt immer noch zwischen 32 und 35°.
Der adj. Pin des lm335 ist mit einem 10K Poti verbunden,
V+ ist an A0 des Arduinos und danach kommen 5V über das Netzteil mit einem Vorwiderstand von 2,2k Ohm (genau so wie es im Schaltbild auch ist),
V- ist jetzt mit dem Gnd vom Arduino verbunden.
Hier die einzelnen Werte der 10 Messungen:
es gibt teilweise sogar Differenzen von ca. 100
wir hatten das thema genauigkeit bei temperaturmessungen in den letzten tagen einige male. da dürfte es sehr viele einflüsse geben, auch vom arduino (ADC, spannungsschwankungen, zb durch dein LCD, usw). ich hab' mir vor kurzem drei von diesen dingern gekauft, soll für einen kollegen was aufbauen:
die wandeln selbst in ein digitales signal, das Du mit dem arduino abgreifen kannst. ergebnis:
Status Humidity (%) Temperature (C) (F)
OK 44.8 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
OK 44.6 27.5 81.5
OK 44.7 27.5 81.5
OK 44.6 27.5 81.5
OK 44.6 27.5 81.5
OK 44.6 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
OK 44.6 27.5 81.5
OK 44.7 27.5 81.5
OK 44.6 27.5 81.5
OK 44.6 27.5 81.5
OK 44.6 27.5 81.5
OK 44.7 27.5 81.5
OK 44.7 27.5 81.5
luftfeuchtigkeit bekommst Du als goodie mitgeliefert.
aber ich verstehe natürlich jeden, der das lösen der aufgabe als ziel sieht.
Der Sensor soll auch unter Wasser messen, deshalb ist deiner eher 'unpraktisch'
Aber da ich die jetzt eh schon gekauft habe, möchte ich sie auch gern verwenden.
Dann bedanke ich mich bei allen die hier geposted haben und les mir mal die anderen Beiträge durch
Der Sensor soll auch unter Wasser messen, deshalb ist deiner eher 'unpraktisch'
andererseits kannst Du mit dem hygrometer gleich messen, ob überhaupt wasser da ist.
schon klar, versteh' ich. vor kurzem hat TERWI ein projekt zu diesem thema vorgestellt (LM335 und genauigkeit) http://forum.arduino.cc/index.php?topic=181573.0
es kam zwar zu ziemlichen kontroversen , aber gerade das bringt Dich vielleicht weiter.
wenn du auch unter Wasser messen willst, dann suche bei Ebay mal nach dem DS18B20. Dort wirst du ein paar Angebote finden, wo der Sensor in einer Metallhülse vergossen ist und 2m Zuleitung hat. Für den DS18B20 gibt es ne Lib. Außerdem liefert der Sensor ein digitales Signal und ist calibriert. So schließt du von vorn herein schon mal etliche Fehlerquellen aus. Bei deinem Sensor würde ich mal an den Analogeingang, wo der Sensor dran hängt, einen 1µF Folienkondensator zwischen A0 und Masse legen. Der glättet das Signal, so das "Störnebel" und Einkopplungen den Messwert nicht so zappeln lassen. Es darf aber kein Elko sein! Wenn die Zuleitung zum Sensor länger als 20-30 cm ist, dann nimm geschirmtes Kabel. Mikrofonkabel, Netzwerkkabel oder ein USB-Kabel eignen sich dafür recht gut. Den Schirm lege einseitig auf Masse.