analogRead() liefert unterschiedliche Werte

Hallo,

ich möchte über analogRead(A0) die Spannung eines Feuchtigkeitssensor auslesen.
Hier bekomme ich aber je nachdem welche Spannungsquelle ich nutze unterschiedliche Ausgaben.

Die Ausgabe findet per LCD und per Serial Ausgabe statt.
Wenn ich den Arduino (Clone) per Power Modul über die PINs Vin und GND versorge,
bekomme ich beim analogRead(A0) den Wert 770 angezeigt.
Die Spannung beträgt aber 2,74V, laut analogRead(A0) mit dem Wert 770 müssten dort aber
770 * (4,85V / 1024) = 3,62V anliegen. :-/
analogReference() verwende ich nicht, ist also Standard auf DEFAULT
Die Ausgabespannung vom verwendeten power Modul liegt bei 4,85V, lege ich A0 an + vom power Modul an, gibt mir das LCD Display 1023 aus, dies entspricht ja den 4,85V
Wenn ich den Arduino (Clone) jetzt über die USB Buchse betreibe, gibt mir das LCD Display per analogRead(A0) 550 aus, das entspricht 550 * (4,70V / 1024) = 2,52V.
Laut Multimeter gibt der Sensor aber immer noch 2,74V aus. :-/
Wie kann es zu so unterschiedlichen Werten kommen?

Vielen Dank im Voraus.




Ich hab das ganze jetzt vereinfacht aufgebaut, um nicht Verwirrung durch die anderen Bauteile entstehen zu lassen, daher bitte mein Post weiter oben nicht mehr so beachten.

Ich nutze ein „Capacitive soil moisture sensor" aus Fernost, dieser misst die Feuchtigkeit und gibt diese fertig aufbereitet als Spannung zwischen 0VDC und 3VDC aus.
Betrieben wird der Sensor mit 3.3 - 5.5 VDC.
Wenn der Sensor in der Luft (trocken) ist, beträgt die Ausgabe Spannung bei dem Verwendeten Sensor 2,69V und in Wasser 1,30V, weicht bei meinen 5 Sensoren um +- 0,05V schwankt aber das wäre ein anderes Thema.

Jetzt möchte ich die Spannung mit dem Arduino (Clone) auslesen über den A0 Eingang.
Das ist ja eigentlich ganz simple und funktioniert auch super, wenn ich den Arduino am PC angeschlossen habe und er entsprechend darüber läuft.

Jetzt Mein Problem, sobald ich den Arduino über ein power-module mit Spannung über Vin und entsprechend GND links daneben versorge, bekomme ich ganz andere Werte vom Arduino angezeigt, die Ausgabespannung vom Sensor bleibt aber identisch, wie beim PC Versuch.

Jetzt suche ich eine Lösung warum der Arduino, die Ausgabespannung von 2,69V mit dem power-module anders misst als beim PC Versuch?
Der Sensor wird jetzt direkt vom power-module mit Strom versorgt aber die Ausgabespannung bleibt dieselbe.

Anmerkung: analogReference() habe ich nicht benutzt, da die Abweichung der Betriebsspannung nur
0,21V beträgt aber die gemessene Abweichung vom Arduino deutlich hör ausfällt, die interne Reference sollte ja genau genug für mein Aufbau sein bzw. mein Problem ist ja keine Abweichung von +- 5%?

Hier noch Bilder zum Aufbau

PC Aufbau, Spannung am 5V Ausgang vom Arduino beträgt 4,77V und der Sensor gibt 2,69V aus.
Darüber wird der Sensor auch betrieben.

Serial Ausgabe vom PC Aufbau
Der Arduino gibt 576 aus, das entspricht 4,77/1024*576= 2,69V mit dem Multimeter gemessen, gibt der Sensor auch 2,69V aus, alles passt.

Aufbau mit dem power-module, Serial lese ich mit einem TTL converter aus
Spannung am 5V Ausgang vom power-module beträgt 4,98V und der Sensor gibt 2,69V aus.
Darüber wird der Sensor und der Arduino betrieben.

Serial Ausgabe über TTL converter, die Spannungsumrechnung nicht beachten, ich habe die Formel nicht geändert.
Der Arduino gibt 720 aus, das entspricht 4,98/1024*720= 3,50V mit dem Multimeter gemessen, gibt der Sensor aber immer noch 2,69V aus.

Du solltest analogReference verwenden und den Sensor über einen Spannungsteiler anschließen. Mit entsprechenden Widerständen, die wenig Toleranz und Temperaturdrift haben

Hi

Auch befürchte ich, daß Deine angegebenen Spannungen alles andere als stabil sind.
Ich reime mir zusammen, daß die 4,7V die Versorgungsspannung sind, wenn Du per USB versorgst.

Wenn Dir die Spannung wegbricht, könnte schon ein simpler kleiner Elko an den Versorgungspins reichen.

MfG

Hi,

Du brauchst wie schon oben erwähnt eine verlässliche Referenzspannung, auf die bezieht sich ja Deine Messung.
Was ich aber außerdem noch vermute: Miss mal ob Dein GND tatsächlich überall GND ist, also 0,000V - ansonsten addiert sich da auch etwas auf!
Im Hinterkopf behalten, daß so ein Steckbrett nur zum testen ist, wo schon mal ein Übergangswiderstand von 10 Ohm vorkommen kann ...

Gruß André

Hast Du die Spannungen schon mal im Wechselspannungsbereich des Multimeters gemessen? Da müßtest Du Werte unter 20mV messen.

Grüße Uwe

Vielen Dank für die schnellen Antworten.

uwefed:
Hast Du die Spannungen schon mal im Wechselspannungsbereich des Multimeters gemessen? Da müßtest Du Werte unter 20mV messen.

Grüße Uwe

Das Multimeter springt zwischen 0,001 und 0,000 hin und her, gemessen am power-module + und -
Dann noch mal gemessen am analog Ausgang vom Sensor.

ElEspanol:
Du solltest analogReference verwenden und den Sensor über einen Spannungsteiler anschließen. Mit entsprechenden Widerständen, die wenig Toleranz und Temperaturdrift haben

Der Sensor gibt ein Analog Signal zwischen 0-3V aus, entsprechend des Zustandes, je Trockner desto höher die Spannung, also eigentlich ist schon alles im Sensor vorhanden, meiner Meinung nach oder liege ich da falsch?
Es handelt sich um ein "Capacitive soil moisture sensor" aus Fernost, oben im Bild zu sehen, steckt etwas unter dem Arduino aber nur fürs Bild, ansonsten liegt er neben der Halterung frei.

postmaster-ino:
Hi

Auch befürchte ich, daß Deine angegebenen Spannungen alles andere als stabil sind.
Ich reime mir zusammen, daß die 4,7V die Versorgungsspannung sind, wenn Du per USB versorgst.

Wenn Dir die Spannung wegbricht, könnte schon ein simpler kleiner Elko an den Versorgungspins reichen.

MfG

Ich lasse das mit dem USB erst mal und arbeite nur mit dem power-module, hier habe ich mit dem Multimeter + und - überwacht, und dabei kann ich eine Schwankungen der Spannung von 0,01V feststellen, beim drücken der Reset-taste steigt die Spannung um 0,01 und fällt dann wieder um 0,01V.

SpaghettiCode:
Hi,

Du brauchst wie schon oben erwähnt eine verlässliche Referenzspannung, auf die bezieht sich ja Deine Messung.
Was ich aber außerdem noch vermute: Miss mal ob Dein GND tatsächlich überall GND ist, also 0,000V - ansonsten addiert sich da auch etwas auf!
Im Hinterkopf behalten, daß so ein Steckbrett nur zum testen ist, wo schon mal ein Übergangswiderstand von 10 Ohm vorkommen kann ...

Gruß André

Wie genau mach ich das?

Hi

Du kannst eine vom Chip selber generierte Referenz benutzen - Die ist weitestgehend unabhängig von der Versorgungsspannung.
analogReference()

Die verschiedenen Ω auf den Steckbrett muß man 'nur kennen' - wenn was nicht so funktioniert, wie's eigentlich müsste, kann man versuchen, den Widerstand zu reduzieren, indem man die Bauteile erneut einsteckt - quasi die Kontakte 'freikratzt'.

MfG

Ich hab das ganze jetzt vereinfacht aufgebaut, um nicht Verwirrung durch die anderen Bauteile entstehen zu lassen, daher bitte mein Post weiter oben nicht mehr so beachten.

Ich nutze ein „Capacitive soil moisture sensor" aus Fernost, dieser misst die Feuchtigkeit und gibt diese fertig aufbereitet als Spannung zwischen 0VDC und 3VDC aus.
Betrieben wird der Sensor mit 3.3 - 5.5 VDC.
Wenn der Sensor in der Luft (trocken) ist, beträgt die Ausgabe Spannung bei dem Verwendeten Sensor 2,69V und in Wasser 1,30V, weicht bei meinen 5 Sensoren um +- 0,05V schwankt aber das wäre ein anderes Thema.

Jetzt möchte ich die Spannung mit dem Arduino (Clone) auslesen über den A0 Eingang.
Das ist ja eigentlich ganz simple und funktioniert auch super, wenn ich den Arduino am PC angeschlossen habe und er entsprechend darüber läuft.

Jetzt Mein Problem, sobald ich den Arduino über ein power-module mit Spannung über Vin und entsprechend GND links daneben versorge, bekomme ich ganz andere Werte vom Arduino angezeigt, die Ausgabespannung vom Sensor bleibt aber identisch, wie beim PC Versuch.

Jetzt suche ich eine Lösung warum der Arduino, die Ausgabespannung von 2,69V mit dem power-module anders misst als beim PC Versuch?
Der Sensor wird jetzt direkt vom power-module mit Strom versorgt aber die Ausgabespannung bleibt dieselbe.

Anmerkung: analogReference() habe ich nicht benutzt, da die Abweichung der Betriebsspannung nur
0,21V beträgt aber die gemessene Abweichung vom Arduino deutlich hör ausfällt, die interne Reference sollte ja genau genug für mein Aufbau sein bzw. mein Problem ist ja keine Abweichung von +- 5%?

Hier noch Bilder zum Aufbau

PC Aufbau, Spannung am 5V Ausgang vom Arduino beträgt 4,77V und der Sensor gibt 2,69V aus.
Darüber wird der Sensor auch betrieben.

Serial Ausgabe vom PC Aufbau
Der Arduino gibt 576 aus, das entspricht 4,77/1024*576= 2,69V mit dem Multimeter gemessen, gibt der Sensor auch 2,69V aus, alles passt.

Aufbau mit dem power-module, Serial lese ich mit einem TTL converter aus
Spannung am 5V Ausgang vom power-module beträgt 4,98V und der Sensor gibt 2,69V aus.
Darüber wird der Sensor und der Arduino betrieben.

Serial Ausgabe über TTL converter, die Spannungsumrechnung nicht beachten, ich habe die Formel nicht geändert.
Der Arduino gibt 720 aus, das entspricht 4,98/1024*720= 3,50V mit dem Multimeter gemessen, gibt der Sensor aber immer noch 2,69V aus.

Hi

Das ergibt keinen Sinn - hatte schon die Hoffnung, daß Dein Power-Modul auf 3,3V steht - aber auch Da passen die Werte vorne und hinten nicht.

Womit bestromst Du das Power-Modul?
Wenn's ein Steckernetzteil ist - dreh Mal den Stecker ... ich erhoffe mir davon aber eigentlich keine Änderung.

MfG

postmaster-ino:
Hi

Das ergibt keinen Sinn - hatte schon die Hoffnung, daß Dein Power-Modul auf 3,3V steht - aber auch Da passen die Werte vorne und hinten nicht.

ja :sob: :sob: :sob: :sob: :sob:

postmaster-ino:
Womit bestromst Du das Power-Modul?
Wenn's ein Steckernetzteil ist - dreh Mal den Stecker ... ich erhoffe mir davon aber eigentlich keine Änderung.

MfG

Hi postmaster-ino,
hier das Netzteil war beim Elegoo Starter-Kit mit bei

Hi

9V 1A klingt eigentlich ganz gut. Ich sehe nicht, wo Da was falsch ist.
Kannst Du Dir die Messwerte 'anders' anzeigen lassen?
Kleines LCD dran - dann die Verbindung zum TTL-Adapter weg - das ist die einzige Verbindung, Die akut 'irgendwas' sein kann.
Klar: Keine Lösung, aber ein WorkAround um den Übeltäter einzukreisen (wobei viel ist hier nicht, was sich einkreisen lässt)

MfG

Hi,

ich nochmal. Miss mal, ob GND am Powermodul, also am Lötpunkt der zum Steckbrett (-) geht, und am UNO, direkt an der Buchse den Kontakt, der zu dir zeigt, also auch GND ist, ob da 0,000V raus kommt, dann da gleiche Zwischen UNO GND, und Sensor GND, ob da 0,000V rauskommt.
Wenn es da Potentialverschiebungen bei GND gibt, die sollten sich dann im Messergebnis wiederfinden.

Gruß André

Was ich tun würde, wenn ich diesen Sensor nutzen müsste:

Der Sensor liefert 0 bis 3V

Also kann man als Referenz den 3,3V Regler des UNOs nutzen.

Brücke(Schutzwiderstand) von 3,3V zu Aref und in setup()
AnalogReference(EXTERNAL);
So kann man den Messbereich weit ausnutzen.

Kalibrieren, auf Trocken und Nass, wie hier beschrieben.
Die absoluten Werte, sind Wurscht. (sind was für Zahlenfetischisten)
Wichtig ist die Kalibrierung.

postmaster-ino:
Hi

9V 1A klingt eigentlich ganz gut. Ich sehe nicht, wo Da was falsch ist.
Kannst Du Dir die Messwerte 'anders' anzeigen lassen?
Kleines LCD dran - dann die Verbindung zum TTL-Adapter weg - das ist die einzige Verbindung, Die akut 'irgendwas' sein kann.
Klar: Keine Lösung, aber ein WorkAround um den Übeltäter einzukreisen (wobei viel ist hier nicht, was sich einkreisen lässt)

MfG

Das mit dem LCD hatte ich schon aufgebaut, durch das LCD bin ich darauf gestoßen. :-/
Vorher hatte ich nur das Programm laufen lassen und wusste nicht was, die Ergebnisse sind.
Den converter hatte ich jetzt zur besseren Kontrolle genommen.
Trotzdem Danke, ich bin dankbar für jede Idee :slight_smile:

SpaghettiCode:
Hi,

ich nochmal. Miss mal, ob GND am Powermodul, also am Lötpunkt der zum Steckbrett (-) geht, und am UNO, direkt an der Buchse den Kontakt, der zu dir zeigt, also auch GND ist, ob da 0,000V raus kommt, dann da gleiche Zwischen UNO GND, und Sensor GND, ob da 0,000V rauskommt.
Wenn es da Potentialverschiebungen bei GND gibt, die sollten sich dann im Messergebnis wiederfinden.

Gruß André

Nur zur Sicherheit, da ich mich mit der Messtechnik nicht ganz so auskenne und GND -> GND noch nie gemessen hab.

  • vom Multimeter an das GND vom UNO und - vom Multimeter an GND am power-module?
    Bei dem GND vom Sensor hab ich keine große möglichkeit als über das Steckbrett zu messen und dann an GND Uno?
    Ich hab auch schon ein anderes power-module von elegoo verwendet, hier kommt es zum selben Problem, sogar ein anderen Arduino hab ich schon verwendet. :-/

Danke für die Hilfe.

combie:
Was ich tun würde, wenn ich diesen Sensor nutzen müsste:

Der Sensor liefert 0 bis 3V

Also kann man als Referenz den 3,3V Regler des UNOs nutzen.

Brücke(Schutzwiderstand) von 3,3V zu Aref und in setup()
AnalogReference(EXTERNAL);
So kann man den Messbereich weit ausnutzen.

Kalibrieren, auf Trocken und Nass, wie hier beschrieben.
Die absoluten Werte, sind Wurscht. (sind was für Zahlenfetischisten)
Wichtig ist die Kalibrierung.

Hi combie,
danke für deine Antwort, allerdings hab ich mit der Kalibrierung weniger Probleme, sondern das der Arduino (Clone) bei unterschiedlicher Bestromung, unterschiedliche Messungen über Analog ausgibt.
Und ich nicht ganz verstehen warum.

lister3003:
Nur zur Sicherheit, da ich mich mit der Messtechnik nicht ganz so auskenne und GND -> GND noch nie gemessen hab.

  • vom Multimeter an das GND vom UNO und - vom Multimeter an GND am power-module?
    Bei dem GND vom Sensor hab ich keine große möglichkeit als über das Steckbrett zu messen und dann an GND Uno?
    Ich hab auch schon ein anderes power-module von elegoo verwendet, hier kommt es zum selben Problem, sogar ein anderen Arduino hab ich schon verwendet. :-/

Ja, von GND zu GND, zu GND. Da sollte immer 0,000V rauskommen. Wo Du Deine rote Strippe vom Multimeter dran hängst ist eigentlich egal, erwartet wird 0V.
Es geht darum, ob evtl. im Betrieb, also wenn Strom fließen kann, sich irgendwo zwischen den Modulen eine kleine Spannung aufbaut, weil die Verbindungen nicht gut sind. Und da hier Deine Messungen sich alle auf GND beziehen, würden die sich, wenn sie an der richtigen Stelle (ungünstigstenfalls) auftreten auch zu Deinem Messergebnis (Sensor) dazu addieren!
Am Sensor kannst Du doch direkt am Stecker am Lötpunkt des schwarzen Kabels messen.
Ich weiß nicht, ob Du aus dem Audiobereich sowas wie eine Masseschleife kennst, da brummt es kräftig, weil dort etwas ähnliches passiert.

Gruß André

sondern das der Arduino (Clone) bei unterschiedlicher Bestromung, unterschiedliche Messungen über Analog ausgibt.
Und ich nicht ganz verstehen warum.

Natürlich darfst du dich fragen, warum du bei unterschiedlichen Referenzspannungen, unterschiedliche Werte bekommst.
Die Frage ist aber recht Sinn befreit.
Da nichts anderes erwartbar wäre.
Der Chip verhält sich, wie im Datenblatt beschrieben.
Da gibt es nichts, worüber man sich wundern sollte.

Die richtige Frage lautet:
Wie bekomme ich stabile Werte?

Die meisten Möglichkeiten wurden schon genannt!

Hier nochmal klar:
Du kannst die interne Referenz verwenden, brauchst dann aber einen Spannungsteiler.
Du verwendest eine externe Referenz, z.B. die 3,3V des UNO
Du verwendest Vcc als Referenz, musst dann aber Vcc Messen und den Wert anhand dessen korrigieren.

Suche es dir aus.

Hi

Um Vcc messen zu können, muß Er aber wieder eine der Referenzen benutzen, um auf die Versorgungsspannung ruckschließen zu können - oder fest im Programm vorgeben.
Bei den hier bereits genannten Unterschieden der verschiedenen 5V-Versorgungen sehe ich in dieser Richtung aber nicht die Lösung.

Trotz Alledem sind die Messwerte, Die vom Arduino kommen, so nicht mit der Referenz - hier die Versorgungsspannung, in Einklang zu bringen.
Es passt einfach Nicht.

Irgendwo ist in dem Aufbau ein fetter Haken drin - ich sehe Ihn aber nicht.

Was passiert, wenn Du die 3,3V auf ARef setzt und die externe Referenz benutzt? Bleiben dann Deine 2,69V in dem Bereich, wo Sie eigentlich sein müssten?

MfG

Um Vcc messen zu können, muß Er aber wieder eine der Referenzen benutzen, um auf die Versorgungsspannung ruckschließen zu können - oder fest im Programm vorgeben.

Richtig!
Die interne Referenz.
Und den nötigen Kallibrierwert, kann man ins EEProm packen.

SpaghettiCode:
Ja, von GND zu GND, zu GND. Da sollte immer 0,000V rauskommen. Wo Du Deine rote Strippe vom Multimeter dran hängst ist eigentlich egal, erwartet wird 0V.
Es geht darum, ob evtl. im Betrieb, also wenn Strom fließen kann, sich irgendwo zwischen den Modulen eine kleine Spannung aufbaut, weil die Verbindungen nicht gut sind. Und da hier Deine Messungen sich alle auf GND beziehen, würden die sich, wenn sie an der richtigen Stelle (ungünstigstenfalls) auftreten auch zu Deinem Messergebnis (Sensor) dazu addieren!
Am Sensor kannst Du doch direkt am Stecker am Lötpunkt des schwarzen Kabels messen.
Ich weiß nicht, ob Du aus dem Audiobereich sowas wie eine Masseschleife kennst, da brummt es kräftig, weil dort etwas ähnliches passiert.

Gruß André

Hab die Messung wie folgt vorgenommen aber 0 ist nirgends raus gekommen.

Hier die Messungen
sensor GND zu GND power-module = 0,007V
arduino GND zu GND sensor = 0,011V
arduino GND zu GND power-module = 0,020V

Und hier die Messpunkte, die ich benutzt habe



postmaster-ino:
Was passiert, wenn Du die 3,3V auf ARef setzt und die externe Referenz benutzt? Bleiben dann Deine 2,69V in dem Bereich, wo Sie eigentlich sein müssten?

MfG

Aufgebaut und probiert auf das Bild des Aufbaues verzichte ich jetzt mal, hab dann zur Sicherheit und der Vollständigkeit auch mal die 5V ( sind ja nur 4,98V die raus kommen ) als aref verwendet, das sind die 2. Messung von 1-5 und die ersten Messung von 2-6 sind mit der 3,3V aref.

Das mit den 5V aref versteh ich nicht ganz

Update:
Was ich jetzt versucht habe, das power-module hat ein USB Ausgang, damit habe ich den Arduino jetzt versorgt, statt über die Vin und GND Pin.
Siehe da, es funktioniert einwandfrei aber wenn ich wieder auf Vin und GND geh passt es nicht mehr. :-/

lister3003:
..., statt über die Vin und GND Pin.

Ich denke hier war/ist der Fehler.
Die 5V dürfen nicht auf Vin, sondern müssen an die 5V des Arduino!
Bei Vin ist noch ein Spannungsregler dazwischen, der eigentlich dafür sorgen soll, daß größere Spannungen (7-12V) auf 5V geregelt werden.
Das war im Foto nicht so gut erkennbar ...

Gruß André