Druck in Abhängigkeit von Düsen in Ausstoß umrechnen

Hallo

Ich würde gerne eine kleine Steuerung für unser Pflanzenschutzgerät bauen. Dafür habe ich ein GPS-Modul um die tatsächlich gefahrene Geschwindigkeit zu ermitteln, einen Drucksensor und verschiedene Düsen.

Je nach Zeitpunkt im Jahr benötige ich eine unterschiedliche Anzahl an verschiedenen Düsentypen/farben - z.B. am Anfang zwei Mal gelb, später 4xGelb und 2XRot. Die verschiedenen Farben haben bei gleichem Druck einen unterschiedlichen Brüheausstoß pro Minute.

Ich gebe am Anfang an, wie viele Düsen der jeweiligen Art ich benutze und wie viel Brühe ich je Hektar ausbringen will. Jetzt soll anhand der gefahrenen Geschwindigkeit errechnet werden, welchen Druck ich benötige, um die gewünschte Menge auszubringen. (Fahre ich schneller, muss der Druck größer werden, damit pro Minute mehr aus den Düsen ausgestoßen wird.)

Für die verschiedenen Düsen gibt es Tabellen, bei welchem Druck wie viel pro Minute ausgestoßen wird, daraus habe ich von Google eine Näherungsformel erstellen lassen, welche in Abhängigkeit vom gewünschten Ausstoß den Druck ausgibt: Düsentabelle - Google Sheets

Die eigentliche Programmierung des Ganzen ist nicht das Problem, ich weiß nur nicht, wie ich die Berechnung programmieren kann... Der Arduino sollte mir einen Druck ausgeben, der abhängig von der Anzahl verschiedener Düsen, dem Brüheaufwand pro Hektar und der gefahrenen Geschwindigkeit ist.

Als Bild habe ich noch die Standartformeln für die Berechnung angehängt.

Ich hoffe ich konnte mein Problem halbwegs verständlich erklären?! Wenn nicht bitte ich um Nachfragen. Und wenn sich jemand findet, der mir helfen kann, würde ich mich sehr sehr freuen!

Gruß
PrinzeFlo

Bildschirmfoto von »2017-10-02 18-01-10«.png

PrinzeFlo:
Die eigentliche Programmierung des Ganzen ist nicht das Problem, ich weiß nur nicht, wie ich die Berechnung programmieren kann...

Äh ... die Programmierung, die kein Problem ist, ist das Problem?!

Hä?

Gruß

Gregor

ich weiß nur nicht, wie ich die Berechnung programmieren kann

Für Multiplikationen nimmt man * , für Divisionen / .
Mit runden Klammern ( ) kann man bei Bedarf die Reihenfolge vorgeben. SCNR :wink:

Wenn du nicht weisst, wie man die erste Formel umstellt, damit du aus den vorgegebenen Daten
Geschwindigkeit * Arbeitsbreite * gewünschte Menge = Gesamtdurchflussrate rauskommt, hast du ein anderes Problem. Tip: das wars schon.

Ausserdem musst du deine Tabellen entsprechend deiner gewählten Düsenkombination zusammenfassen zu einer Tabelle Gesamt-Durchflussrate je nach Druck, und dort aus der gewünschten Durchflussrate den Druck durch lineare Interpolation auslesen.

gregorss:
Äh ... die Programmierung, die kein Problem ist, ist das Problem?!

Hä?

Gruß

Gregor

Damit meinte ich, die Programmierung des "Restes" ist kein Problem, nur halt diese Berechnung.

michael_x:
Für Multiplikationen nimmt man * , für Divisionen / .
Mit runden Klammern ( ) kann man bei Bedarf die Reihenfolge vorgeben. SCNR :wink:

Wenn du nicht weisst, wie man die erste Formel umstellt, damit du aus den vorgegebenen Daten
Geschwindigkeit * Arbeitsbreite * gewünschte Menge = Gesamtdurchflussrate rauskommt, hast du ein anderes Problem. Tip: das wars schon.

Ausserdem musst du deine Tabellen entsprechend deiner gewählten Düsenkombination zusammenfassen zu einer Tabelle Gesamt-Durchflussrate je nach Druck, und dort aus der gewünschten Durchflussrate den Druck durch lineare Interpolation auslesen.

Wenn es das schon wäre, hätte ich nicht nachfragen müssen :confused: Das Problem ist, dass ich ja mit verschiedenen Düsen arbeite und dann je Düsenart noch verschiedene Funktionen für die Druck/Durchfluss-Relation habe - also quasi bei jeder Pflanzenschutzapplikation eine andere Düsenzusammensetzung. Mein Problem ist eher, diese verschiedenen Typen unter Einen Hut zu bringen.

Der Hut heißt Feld (array) und Struktur (struct). Mögliche Tabellen rufen nach genügend Speicher, ein Mega2560 könnte den haben.

agmue:
... Mögliche Tabellen rufen nach genügend Speicher, ein Mega2560 könnte den haben.

Ich glaube, was er da von Gugl hat machen lassen, passt auch in einen hohlen Zahn:

Gruß

Gregor

agmue:
Der Hut heißt Feld (array) und Struktur (struct). Mögliche Tabellen rufen nach genügend Speicher, ein Mega2560 könnte den haben.

Die Tabelle benötige ich ja eigentlich nicht mehr, habe ja jetzt die Funktionen zu den einzelnen Düsentypen - oder kann ich mit array/struct auch mein Funktionen-Problem lösen?

PrinzeFlo:
... oder kann ich mit array/struct auch mein Funktionen-Problem lösen?

Ich denke mal, ja. Anregungen:

gelb = 0,753 - 1,78x + 1050
rot = 0,278 - 0,899x + 311
orange = -0,131 - 0,387x +556

allgemein: A/1000 - (B/1000)*x + C

uint16_t duesentypen[3][3] = {
// A     B     C
{753, 1780, 1050}, // gelb
{278,  899,  311},  // rot
{131,  387,  556}}; // orange

enum {A, B, C};
enum {GELB, ROT, ORANGE};

duesentyp = GELB;
float wert = (duesentypen[duesentyp][A] - duesentypen[duesentyp][B] * x) / 1000.0 + duesentypen[duesentyp][C] * 1.0;

Das Ganze sauber in eine C-Funktion gebracht.

Für eine Struktur sehe ich noch keine Anwendung, den Vorschlag ziehe ich vorläufig zurück :slight_smile: