Hallo Leute, ich habe an einen ArduinoUNO den Drucksensor MPX5010 angebunden. Der Druckbereich des Sensors geht von 0-100mbar. Die ausgegebene Spannung liegt typ. bei 0.2-4.7V. Diese habe ich mit einem Druckkalibrator in Zehnerschritten angefahren und die passenden ADC-Werte notiert. Die Kurve ist zwischen 0 und 100mbar schön linear. Jetzt fehlt ir nur noch der Ansatz, wie man den ADC-Wert in den passenden Druckwert umrechnet. Druck [mbar] ADC-Wert -10 12 0 38 10 129 20 221 30 313 40 414 50 506 60 599 70 692 80 785 90 878 100 970 110 1016 wenn ich als Faktor berechne: 100mbar/970adc, berücksichte ich den Offset ja nicht. Wie kann ich dieses Problem umgehen? Danke und Grüße, Johnny
Johnny E. schrieb: > Die Kurve ist zwischen 0 und 100mbar schön linear. Aus einer Geraden kann man Anstieg (m) und Nullstelle (b) sogar grafisch bestimmen...
Um die Genauigkeit, soweit es die Umstände an sich erlauben, zu erhöhen, kannst Du eine lineare Regression verwenden. Excel z.B. kann das; aber auch andere Programme. Dabei werden die X- und Y-Werte eingegeben und daraus eine Geradengleichung (gemäß der Antwort von Mathe) berechnet.
okay, Excel gibt als Formel für eine Lineare Trendline y = 9,3555x + 36,318 an. Wie kann ich diese nun verwenden, um auf einem angeschlossenen Arduino LCD den Wert in mbar auszugeben? Es geht also nicht um den Code für das LCD, sondern nur um die Umrechnung ADC-Wert=>mbar mit dieser Formel.
Anders rum. Die ADC-Werte liegen auf der X-Achse. Es gibt auch die Funktionen Steigung und Achsenabschnitt. Da kannst du das richtig berechnen. Steigung: 0,106884288 Achsenabschnitt: -3,879398009
Dirk B. schrieb: > Steigung: 0,106884288 > Achsenabschnitt: -3,879398009 Da sind der erste und letzte Punkt nicht mit drin.
Johnny E. schrieb: > okay, Excel gibt als Formel für eine Lineare Trendline y = 9,3555x + > 36,318 an. > > Wie kann ich diese nun verwenden, um auf einem angeschlossenen Arduino > LCD den Wert in mbar auszugeben? > > Es geht also nicht um den Code für das LCD, sondern nur um die > Umrechnung ADC-Wert=>mbar mit dieser Formel. Das muss man zuerst mal im Zusammenhang mit Genauigkeit und Auflösung des Sensors sehen. Du siehst ja, das da bei der Regression reichlich Stellen nach dem Komma herauskommen. Es besteht die Möglichkeit (ich möchte fast sagen: die Wahrscheinlichkeit) das es mehr Stellen sind als Dein Sensor an sich auflöst. Weiter müsste man auch berücksichtigen, wieviele Stellen Du überhaupt auf dem LCD anzeigen willst. Aber sieht man mal davon ab, dann geht das so: Was ist zunächst x und y in Deiner Formel? Beinahe offensichtlich ist y der ADC-Wert und x der Druck. Die Formel erlaubt es Dir also den Druck in einen ADC-Wert umzurechnen. Du hast aber den ADC-Wert und willst den Druck. Gebrauchen wir dafür unsere liebe gute alte Algebra und stellen die Formel so um, das wir aus dem ADC-Wert den Druck berechnen können. Das ergibt: (y - 36,318) / 9,3555 = x Obwohl insgesamt nichts dagegen spricht, Fliesskommarechnungen zu verwenden, was hier nötig ist, nimmt man die Formel so wie sie dasteht, ist es häufig auch wertvoll sich mal zu überlegen, ob man die Rechnung nicht auch in ganzen Zahlen erledigen kann, weil das Codegrösse spart. Ausserdem empfinden manche die Anzeige auf dem LCD danach als einfacher. Wie macht man das? Man skaliert die Zahlen so, dass keine Fliesskommazahlen mehr vorliegen. Im vorliegenden Fall multipliziert man also den Summanden und den Faktor mit 10000 und erhält: (10000y - 363180) / 93555 = x Setzt man z.B. den ADC-Wert 970 für y ein erhält man: (10000 * 970 - 363180) / 93555 = x (9700000 - 363180) / 93555 = x 9336820 / 93555 = x 99,8 = x
Man kann einen weiteren Faktor wie 10 oder einen anderen verwenden, mit dem man nun aber die gesamte Gleichung multipliziert um auch als Ergebnis ein Integer zu erhalten. (Ich habe da leider die Erklärung ein wenig verbaselt). Aber das ist Dir vielleicht schon klar.
Johnny E. schrieb: > Druck [mbar] ADC-Wert > -10 12 > 0 38 > 10 129 > 20 221 > 30 313 > 40 414 > 50 506 > 60 599 > 70 692 > 80 785 > 90 878 > 100 970 > 110 1016 > > wenn ich als Faktor berechne: 100mbar/970adc, berücksichte ich den > Offset ja nicht. > Wie kann ich dieses Problem umgehen? Na hier in desem Fall ist das ja nun wirklich supereinfach, weil der Nullpunkt der Zielskala schon direkt in der Wertetabelle ablesbar ist, 0mbar entsprechen ganz offensichtlich einem ADC-Wert von 38. Also ist der Offset für die ADC-Werte logischerweise -38. Und das korrekte Verhältnis ist nicht 100mbar/970, sondern (100-0mbar)/(970-38) Die korrekte Formel wäre also:
1 | |
2 | 100 |
3 | [mbar] = --- * (adc - 38) |
4 | 932 |
Durchgespielt für z.B. 785 adc:
1 | 100 74700 |
2 | --- * (785 - 38) = ----- = 80.15 |
3 | 932 932 |
Paßt ziemlich gut und das tut es im ganzen Bereich von 38..970. Außerhalb dieses Bereiches kommt aber sehr schnell nur noch Mist raus. Hier ist die Kennlinie des Wandlers also offensichtlich nicht mehr linear.
Bitteschön. Nochmal die Anmerkung: Es kann sich lohnen, einmal Auflösung und Genauigkeit des Sensors anzuschauen. Evtl. brauchst Du dann nicht mit so großen Zahlen rechnen. Man kann das zwar erstmal ignorieren, aber es ist doch lehrreich für den Fall, dass es in einem anderen Projekt einmal ernsthaft darauf ankommt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.