Probleme bei analoger Spannungsmessung mit externer Spannungsversorgung

Guten Abend,

Ich spiele schon seit einiger Zeit mit dem Arduino/Genuino herum, bis jetzt hatte ich alles über USB mit Strom & Spannung versorgt. Da ich jetzt für meinen Uno ein Leben als Thermostat auserkoren hab (solange bis mir was neues einfällt) bin ich hingegangen un hab ich über 8V und 635mA versucht zu versorgen. Es hat sich allerdings schnell gezeigt, dass die Temperatur immer um 3-5 °C zu niedrig ist. Über USB sind die Werte wie gehabt exakt. Google konnte mir bei der Problemlösung nicht helfen, zwar gibt es Möglichkeiten wie die Referenzspannung für den analogen Eingang zu verändern, ich bräuchte aber dazu einen Spannungsteiler, um weiter messen zu können und dafür habe ich kein Platz mehr auf meinem Breadboard. Meine Frage ist nun, wieso sind meine Werte bei einer externen Versorgung falsch, aber bei der USB Schnittstelle korrekt? Tests mit verschieden Spannungen ergaben keine Besserung.

Mit freundlichen Grüßen

Q11

Ansteuerung_zweier_7_segment_anzeige_mit_1_1_Internen_Analog_Sp.ino (21.8 KB)

Zeig mal den Teil des Codes wo den ADC Wert umrechnest.

Was für einen Temperatursensor verwendest du?

Ich verwende einen TMP36 der bei 25°C 750mV Spannung am Messpin ausgibt. Pro Grad zusätzlich plus 10mV, bei jedem geringeren minus 10 mV.

nom = 0; val = 0; temp = 0;              // Bei jedem Durchlauf werden die Werte genullt

for (long i =-1; i < 6000; i++) {        
temp = analogRead(0); temp = map (temp,102,304,0,99);
val = temp + val; delay (10); 
   } 


nom = val /6000;
temp = nom;

Hat das einen Grund, dass du diesen Sensor einsetzt? Wenn du nicht darauf festgelegt bist, dann nimm doch den DS18B20, der ist einfach anzuschließen und es gibt fertige libraries, die dich bei der Verwendung unterstützen. Z.B. https://milesburton.com/Dallas_Temperature_Control_Library

Da können mehrere Fehler die Ursache sein.

Referenzspannung, Variablendefinition, usw.

Poste mal den ganzen Sketch. Ich hab da einen Überlauf in Verdacht.

Mit dem DS18B20 kannst du natürlich einfacher die Problematik lösen. Aber ich nehme an, du willst was lernen und DIESES Problem lösen.

Hallo,

das Problem ist, dass die Spannung deines Arduinos leicht unterschiedlich zw. USB und externer Versorgung ist. Dadurch schwankt die Referenzspannung der Messung. Angenommen du hast 50°C, der Sensor gibt genau 1V aus. Beträgt jetzt die Referenzspannung genau 5,00V, dann bekommst du den Sensorwert 1024/5*1= 205. Beträgt die Spannung nur 4,8V bekommst du 1024/4,8*1= 213. Aber der Arduino weiß nichts von der anderen Spannung. Er rechnet 1024*213/5=1,04V also 54°C. Abhilfe schafft eine von der Versorgungsspannung unabhängige Referenz. Entweder man nimmt die interne z.B. 1,1V (bis 60°C zulässig) oder eine externe. Ansonsten hilft ein anderer Temperatursensor.

Das kann man eben nicht 100%ig sagen, ohne den Sketch gesehen zu haben. Wenn er mit 8V reingeht, sollten die 5V einigermaßen stabil sein. Problem könnte eher die USB Versorgung sein. Weil wir sprechen hier ja nur von wenigen mV.

Ist das ein Uno oder Mega?

P.S. Zulässig sind auch mehr als 60°, nur eingelesen werden nicht mehr, da bei 1,1V bereits 1023 ausgegeben werden. Kaputt geht nichts, solange man unter Betriebsspannung bleibt.

Ich habe einen UNO und mit dem steuere ich zwei Speicherregister und damit zwei 7 Segment Anzeigen. Dementsprechend ist der Sketch sehr groß geworden. Ich poste ihn gerne allerdings seperat (Ich schreib gerade über das Tablet). Die Möglichkeit hab ich mir auch schon überlegt, allerdings hab ich gehofft dass ich es umgehen kann, vllt. hab ich ja was falsch gemacht. Muss ich das Verhältniss der Auflösung nicht anpassen? Schließlich sind 4,9 mV die kleinste Auflösungsstufe.

Die 4,88mV kommen von 5V / 1024. Wenn du eine andere Referenzspannung hast musst du das ändern

Hallo,

meine Erfahrung mit dem Sensor ist, dass es extrem auf eine saubere Referenzspannung ankommt. Nimmt man die 1,1V bekommt man auch eine fast 5x feinere Auflösung, so dass man recht genau mit dem Sensor Temperaturen messen kann. Mit Versorgungsspannung als Referenz konnte man den Sensor als grobes Schätzeisen mit deutlichen Schwankungen nutzen. Eine überlegenswerte Alternative für ein Raumthermostat kann neben dem DS18B20 der DHT22 sein. Er misst Temperatur und Luftfeuchtigkeit.

Bei fast allen Analogmessungen kommt es extrem auf die Referenzspannung an. Aber ob 1,1 oder 5V sollte eigentlich keinen Unterschied (klar, Messbereich und somit Auflösung) machen, solange der Arduino über Vin bzw. die Buchse mit mind. 7V versorgt wird und ansonsten keine Verbraucher dranhängen.

Also ich hab es umprogrammiert. Mit 1,1 Volt bekomme ich sogar im USB Betrieb genauere Werte heraus. Am besten währe wahrscheinlich, wenn ich eine externe Referenzspannung anlege, die ich von meinem Analogpin abzweige. Allerdings müsste ich es dann wieder entsprechend den Spannungen umrechnen. Dementsprechend ist wahrscheinlich eure Lösung mit 1,1 Volt besser. im Anhang findet sich ein Fritzing mit Schaltung und Code. Dieser ist leider nicht auskommentiert (schließlich ist er ja nur für mich gedacht), sollte sich aber doch jemand die Mühe machen den Code zu lesen, so bin ich offen für Verbesserungen. Nochmals danke für eure Hilfe. :) :) :)