Hallo ich möchte ein Fotometer zur Bestimmung des Fettgehalt von Milch bauen. Mit Hilfe eines LDR wird die Spannung gemessen. Die Idee ist es eine Kalibrierkurve zu erstellen mit den Wertepaaren aus Fettgehalt und gemessener Spannung. Ich würde das ganze gerne so programmieren, dass der Arduino aus direkt den Fettgehalt anzeigt. Wie kann ich die benötigte Kalibrierkurve hinterlegen. Muss ich dafür eine Datenbank anlegen und auf diese verweisen und welche eignen sich dafür? Kann ich die Datenbank direkt durch Messungen füllen oder muss ich erst die Messungen der Widerstandswerte durchführen, um dann diese in die Datenbank einzufügen? Vielen Dank für alle Ratschläge.
Eine Kalibrierkurve enthält üblicherweise eine Tabelle mit gerade einmal zwei Spalten. Eine Datenbank wäre wohl übertrieben. Ein oder zwei Arrays sollten ausreichen.
Schau einmal wie ich es mit meinem drucksensor gemacht habe. Da hatte ich auch quasi eine Tabelle, welche bestimmten Spannungen die jeweiligen drücke zuordnete. Die spline-Interpolation spuckt mir dann zum beliebigen spannungswert den entsprechenden Druck, bei dir halt dann der Fettgehalt, aus... https://stoppi-homemade-physics.de/pirani-manometer-arduino/
Schau mal unter Spline-Interpolation oder Polinom-Interpolation. Das ist nicht wirklich schwer. Aus deinen Stützstellen (x/y) wird eine Funktion. Diese Funktion in deiner SW hinterlegt kannst du dann wieder aus deiner Spannung das passende Ergebnis ermitteln. Deine Kalibrierkurve ist dann in der Funktion zu finden.
Wolf W. schrieb: > Arduino Kenne ich! Deine Milchprobleme nicht. Datenbank? Eher nicht. Nicht auf einem der üblichen Arduinos. Eher schon eine LUT im EEPROM
Wolf W. schrieb: > Mit Hilfe eines LDR wird die Spannung gemessen. Schon Klar was du meinst aber dennoch verarbeitete Milch. Das wird insgesammt nur bei homogenisierter Milch funktionieren. Erstelle dir eine Tabelle mit den ADC Werten die du mißt. Dann am besten direkt den ADC Wert mit den zugehörigen Fettwerten ins eeprom oder den Programmspeicher. Je nach Ziel der Messung und Anzahl der Tabellenwerte reicht wahrscheinlich eine lineare Interpolation.
Vielen Dank für die schnellen Antworten, das werde ich gleich mal ausprobieren. @EAF mein Interesse gilt dem Fotometer, die Bestimmung des Fettgehaltes von Milch ist ein schönes Einstiegsbeispiel mit Lebensmittelchemikalien.
Unelegant, zwei Arrays. Einen mit der Spannung, eines mit deinem Fettgehalt. Mit der Spannung von ADC suchst du nach der Position im Spannungsarray. Mit der gefundenen Position liest du dann den Fettgehalt. Elegant. Formel via Excel oder ähnliches herleiten und in uC einbauen. Dann bekommt man für den ADC Wert direkt eine Umrechnung in Fettgehalt.
Jan schrieb: > Unelegant, zwei Arrays. Einen mit der Spannung, eines mit deinem > Fettgehalt. Mit der Spannung von ADC suchst du nach der Position im > Spannungsarray. Mit der gefundenen Position liest du dann den > Fettgehalt. > > Elegant. Formel via Excel oder ähnliches herleiten und in uC einbauen. > Dann bekommt man für den ADC Wert direkt eine Umrechnung in Fettgehalt. Er sagt elegant und kommt dann mit Excel. Ich kann nicht mehr 🤡
Wohl nur weil du einen Clown gefrühstückt hast. https://statologie.de/polynomregression-excel/ Wenn sich die Linearisierung durch ein Polynom beschreiben lässt, dann ist es doch einfach.
:
Bearbeitet durch User
Walter Tarpan schrieb: > Eine Kalibrierkurve enthält üblicherweise eine Tabelle mit gerade einmal > zwei Spalten. Eine Datenbank wäre wohl übertrieben. Ein oder zwei Arrays > sollten ausreichen. Aber nur dann, wenn die Grundfunktion als Formel bereits hinterlegt ist, oder aber die Kennlinie eh schon linear nahezu ist.
J. S. schrieb: > https://statologie.de/polynomregression-excel/ > Wenn sich die Linearisierung durch ein Polynom beschreiben lässt, dann > ist es doch einfach. Für eine Linearisierung sollte es wohl maximal ein Polynom 1. Ordnung sein.
W.A. schrieb: > J. S. schrieb: >> https://statologie.de/polynomregression-excel/ >> Wenn sich die Linearisierung durch ein Polynom beschreiben lässt, dann >> ist es doch einfach. > > Für eine Linearisierung sollte es wohl maximal ein Polynom 1. Ordnung > sein. Na, erklär mir doch mal bitte, warum das so sein soll. Bin schon gespannt!
Ove M. schrieb: > Walter Tarpan schrieb: >> Eine Kalibrierkurve enthält üblicherweise eine Tabelle mit gerade einmal >> zwei Spalten. Eine Datenbank wäre wohl übertrieben. Ein oder zwei Arrays >> sollten ausreichen. > > Aber nur dann, wenn die Grundfunktion als Formel bereits hinterlegt ist, > oder aber die Kennlinie eh schon linear nahezu ist. Meines Wissens ist die Grundfunktion immer als Formel bereits hinterlegt und die Kalibrierwerte sind die Parameter für diese hinterlegte Funktion. Bei einem Polynom ist es dann eben ein Array, bei stückweise linearen Lagrange-Polynomen zwei (x und y).
Eine Kalibrierkurve ist jetzt aber sowas von Trivial. Das ist die Umsetzung von ADC Wert zu Ausgabewert. Im einfachsten Fall ein Array fuer ein paar Punkte. Im komplizierteren Fall fuer viele Punkte. Allenfalls kann man sich mit Polynomen mit verschiedenen Eigenschaften vertun. Man kann dann rumspielen, - mit welche Genauigkeit brauche ich - welche Genauigkeit hat der Sensor - welche Reproduzierbarkeit hat der Sensor - wie viele Punkte brauche ich - wie wenige Punkte brauche ich - mit welcher Aufloesung rechne ich
Trivial wenn man sowas schon gemacht hat. Das ist aber auch ein Projekt für die 9. Klasse, da quält man sich noch durch die nötige Mathematik.
Zunächst einmal herzlichen Dank für die ganzen Antworten. Leider komme ich schon beim nächsten Problem nicht weiter: ich würde gerne zur Bestimmung unbekannter Proben den Wert, den der Arduino vom LDR empfängt mit den Einträgen im Array vergleichen und die Position im Array anzeigenb lassen. Leider kann ich den dazu passenden Befehl nicht finden. Ich habe u.a. den Befehl indexOf versucht, erhalte dann jedoch immer eine Fehlermeldung. Da ich im Array Dezimalzahlen verwende habe ich versucht das ganze mit float.indexOf zu programmieren, das scheint aber nicht zu gehen. Ich habe auch schon versucht das ganze als string zu definieren und die WErte in Anführungszeichen zu setzen, jedoch funktioniert auch das nicht. Im Internet habe ich leider bisher auch keinen anderen passenden Befehlö gefunden, der mir den Index ausspuckt. Kann mir da jemand Nachhilfe geben, was ich machen muss?
:
Bearbeitet durch User
Bärenberg schrieb: >> Für eine Linearisierung sollte es wohl maximal ein Polynom 1. Ordnung >> sein. > > Na, erklär mir doch mal bitte, warum das so sein soll. > Bin schon gespannt! Nur ein Polynom 1. Ordnung beschreibt einen linearen Zusammenhang. Jedes Polynom höherer Ordnung ist nichtlinear. Das war einfach 😉
Wolfgang schrieb: > Bärenberg schrieb: >>> Für eine Linearisierung sollte es wohl maximal ein Polynom 1. Ordnung >>> sein. >> >> Na, erklär mir doch mal bitte, warum das so sein soll. >> Bin schon gespannt! > > Nur ein Polynom 1. Ordnung beschreibt einen linearen Zusammenhang. > > Jedes Polynom höherer Ordnung ist nichtlinear. > > Das war einfach 😉 Oslo hat angerufen, Sie möchten bitte ihren Preis für ihre Forschungsarbeit bezüglich der Linearisierung von Geraden abholen
Wolf W. schrieb: > was ich machen muss? Im Grunde ist es wirklich einfach: mal selber anfangen zu denken. Und dann natürlich nicht nach irgendwelchen ominösen Befehlen suchen, sondern erst mal verstehen, was ein Array ist und was man damit machen kann und welche Hilfe z.B. ein for-Schleife dabei sein könnte... > Da ich im Array Dezimalzahlen verwende habe ich versucht das ganze mit > float.indexOf zu programmieren, das scheint aber nicht zu gehen. Finde heraus, warum. Der Text der völlig unbekannten Fehlermeldung zum absolut geheimen Code gibt da oft brauchbare Hinweise. > den Einträgen im Array Zeig doch mal dieses Array und sag, was du daraus ableiten willst. Oder hänge am Besten gleich den gesamten Code an. > den Wert, den der Arduino vom LDR empfängt Ich bin mir nicht völlig sicher, ob du die Abhängigkeiten da richtig verstehst. Ein LDR ist ein tumber Widerstand, der mit der Lichteinstrahlung variiert. Der "sendet" gar nichts irgendwo hin. Sondern er ist vermutlich in einem Spannungsteiler an einen ADC deines µC angschlossen und du bekommst einen AD-Wert zwischen 0 und 1023. Falls das wider Erwarten nicht so ist, solltest du deinen Schaltplan auch noch posten.
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.