Momentan habe ich ein kleines Projekt am laufen bei dem ich mit einem Flowsensor div Berechnungen durchführen möchte. Momentan stoße ich aber in Sachen Programmierung an meine Grenzen und hoffe das Ihr mir einen kleinen Tipp geben könnt.
Wenn Ihr euch das angehangene Bild anschaut, seht Ihr dort einen Flow der über eine Zeit x ausgegeben wird. Mein Ziel ist es per Microcontroller den Flächeninhalt in Blau dargestellt zu berechnen. Mein erster Gedanke war dies mit Integralrechnung zu lösen. Arduino kann das aber soweit ich weiß nicht.
Hat jemand schon mal etwas ähnliches erfolgreich berechnet wenn ja wie seit ihr vorgegangen ?
Der Arduino kann, was du ihm sagst. Wenn du nicht Integrieren kannst, kann das der Arduino logischerweise nicht Schon mal den hochgeheimen Wissenshort namens Wikipedia zum Thema befragt? .. Oder ... gottbewahre ... google gefragt?
Wenn dem Arduino egal ist, was für eine mathematische Kurve vorliegt, braucht er auch keine Integralformeln dazu im Bronstein nachzuschlagen, sondern kann einfach addieren (bei Bedarf noch die jeweiligen Summanden mit einem evtl. variablen dt multiplizieren). Fertig ist das Integral über die Zeit.
Du willst eigendlich die Gesamtsumme der geflosssenen Menge haben ?
Zunächst wie liegt Dein Flow Wert vor ?. Wenn es der Durchfluss / Zeiteinheit ist dann musst Du dir überlegen in welchen Zeitscheibchen du das haben willst.
Beispiel Du hast den Messwert vorliegen z.B in Ltr/s. Alle 10s bekommst Du einen neuen Messwert. Dann kannst Du die Annahme treffen das der Messwert für die letzten 10 s diesem Wert entsprach. Du addierst also zur Summe den aktuellen Messwert dazu und berücksichtigst dabei die Zeit zwischen deinen Berechnungen.
Summe(Ltr)= Summe(Ltr) + Messwert(ltr/s) *10(s)
Wenn Du es genauer haben willst kannst Du entweder die Zeitabschnitte kleiner machen oder wenn das nicht geht, zwischen zwei Messwerten linear interpolieren. Dann wird´s aber etwas aufwendiger.
Integral kannst Du nur berechen wenn Du die mathematische Formel der Kurve kennst. Ansonnsten macht du die Summe über die Zeit von diskreten werten die Du alle X-Zeit mißt. Das birgt zwar zusätzlich zum Meßfehler eine gewisse Ungenauigkeit aber die ist meiner Meinung vernachlässigbar.
Grüße Uwe
Wenn du das Integral per Hand berechnen kannst, kann das auch der Controller. Der hat eine Mathe-Bibliothek mit grundlegenden Funktionen.
Das Problem ist aber wie gesagt dass man dazu die Funktionsgleichung der Kurve bräuchte. Und die ändert sich ja mit dem Fluss.
Was µC aber wunderbar können ist Dinge in diskreten Zeitabschnitten erledigen
Darf ich hier noch mal ganz frech auf diverse Methoden der Integralberechnung mit diskreten Werten hinweisen? z.B. stückweise Approximation mit Polynom n-ten Grades (n=1,2,3) ?
zwieblum:
Darf ich hier noch mal ganz frech auf diverse Methoden der Integralberechnung mit diskreten Werten hinweisen? z.B. stückweise Approximation mit Polynom n-ten Grades (n=1,2,3) ?
Darfst Du aber wieso solltest Du das machen wenn Du alle 100/stel oder 10/tel Sekunde die Meßgröße ermitteln kannst und sie einfach aufsummieren kannst.
Andererseits gibt es Flowsensor die einen Impuls pro Volumeneinheit abgeben und dann ist es einfach die Impulse aufsummieren anstatt den Umweg auf Impulse pro Zeiteinheit und von diesen mittels Integral auf die Summe der Impulse zu rechnen.
Aber einfach aufsummieren ist sooo letztes Jahrtausend ...
Völlig falsch. FrüherTM hat man Mathematiker komplizierte Berechnungen machen lassen. In diesem Jahrtausend wird eine größere Datenbank genommen und nur noch gezählt. Nennt man dann KI.
Ob aufsummieren ok ist, oder gar schon zuviel, weil das was da aufsummiert wird, aus einer Differentialbildung ( MengeProImpuls / ZeitZwischenImpulsen ) stammt, oder ob man mit mehr oder weniger heftigen Polinom-Interpolationen einen Informationsgewinn erzielen kann, kann man nur wissen, wenn man weiß, wie die Ursprungsdaten zustande kommen.
Recht herzlichen Dank an alle die mit Ihren konstruktiven Tipps bei meinem beschriebenen Problem weitergeholfen haben! Ich denke jetzt habe ich ein paar gute Ansätze die ich verfolgen kann. Ich werde mich am Wochenende mal mit den einzelnen Methoden die Ihr beschrieben habt beschäftigen und versuchen das Ganze in entsprechenden Programmcode umzusetzen.