lm335 hat starke "Temperaturschwankungen"

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?

Hier noch der Code:

#include <LiquidCrystal.h>

int tempPin = 0;
int meassure;
int amount = 10;
float tempTotal;
float temp;

LiquidCrystal lcd(2, 3, 4, 5, 6, 7);

void setup(){
  analogWrite(9, 200);
  lcd.begin(20, 4);
}

void loop(){
  lcd.print(readTemp());
  lcd.print("'C ");
  lcd.setCursor(0, 0);
  delay(500);
}

float readTemp(){
  tempTotal = 0;
  for (int i = 0; i < amount;i++)
  {
    meassure = analogRead(tempPin);
    delay(100);
    tempTotal += meassure;
  }
  //temp = tempTotal/amount;
  temp = ((tempTotal / amount) * 5 * 100) / 1024 - 273.15;
  return temp;
}

Ich hoffe ihr könnt mir helfen.

hi,

woher bezieht der arduino strom ?

gruß stefan

Er ist gerade mit dem PC verbunden (also über USB).
Später über ein 9V Netzteil.

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)

hi,

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.

gruß stefan

@ 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?

Grüße Uwe

@Jurs:
int kann doch Werte bis 32767 speichern?

und zu der Klammer, das versteh ich noch nicht so ganz: temp ist doch schon ein float.

Ich programmiere noch nicht solange mit C, deshalb bin ich mit Datentypen noch nicht so ganz fit :confused:

@eisebaer:
Der Gnd pin des lm335 ist in der richtigen Schaltung mit dem Poti mit Gnd verbunden.
Stimmt, das Netzteil mit 9V kann ich mir dann sparen :smiley:

@uwefed:
Die Spannung am Netzteil bleibt konstant bei 5,03V
Ja, hat es

An alle:
danke für die schnellen Antworten

@ Jens Jurs, Heute ist Montag :wink: :wink: :wink:

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.

Grüße Uwe

hi,

@ Jens, Heute ist Montag

wer ist jens? und schon ist dienstag... :slight_smile: :slight_smile: :slight_smile:

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?

gruß stefan

Ertappt; Wer lästert sollte gut aufpassen. 8)

Ich nehme mal an, daß die Masse verbunden ist und nur der Schaltpan ist falsch.

Grüße Uwe

@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 :roll_eyes:

@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?

Gruß
Steffen

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...

gruß stefan

hi,

gleichzeitig geschrieben...

ohne verbundene GND ist es, als würden ein mann und eine frau miteinander reden. keine gemeinsame basis.

gruß stefan

Verbinde den LM335 mit Masse und schau mal wie dann die Messung funktioniert.

Es ist schwierig zu wissen was ein Fehler im Schaltbild ist und was schon in der Schaltung falsch war.
Grüße Uwe

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

600
617
640
610
627
658
608
619
640
610

----------------------------------------

615
620
621
620
624
626
625
625
626
625

hi,

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.

gruß stefan

Der Sensor soll auch unter Wasser messen, deshalb ist deiner eher 'unpraktisch' :smiley:
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 :slight_smile:

Gruß
Steffen

hi, steffen

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. :stuck_out_tongue:

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 :stuck_out_tongue_closed_eyes: , aber gerade das bringt Dich vielleicht weiter.

gruß stefan

Hallo Steffen,

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.

Gruß Gerald

Ich würde auch einen DS Sensor für sowas nehmen. Als Bonus ist die Verwendung schon mehrfach super dokumentiert worden. http://www.kriwanek.de/arduino/sensoren/165-temperatursensoren-dallas-ds18b20.html