Denkanstoß Verwendung Array oder was anderes?

Hallo,

arbeite gerade an einer hydraulischen Waage (Frontlader), dabei habe ich jetzt ein Problem wo ich evtl. mal einen Denkanstoß benötige….
Problem: da sich die Hebelverhältnisse ändern, ändert sich der Hydraulikdruck im System (bei gleichbleibendem Gewicht). Damit wird das Messergebnis verfälscht, die Verfälschung ist leider nicht linear.
Eine einfache Lösung wäre jetzt, eine feste Wiegeposition festzulegen. Ich/wir möchte jedoch über den gesamten Hubbereich das richtige Gewicht angezeigt bekommen.
Am Frontlader habe ich nun noch einen Winkelgeber angebracht.

Die Hubhöhe beträgt max 4,5m.

Nun mein Denkansatz(auf die Zahlensysteme int / float wurde unten nicht geachtete!!!)…..

Um den Frontlader und das Hydrauliksystem zu eichen, habe ich bereits ein Programm welches in einer bestimmten Höhe (0,5m) mit einem bekannten Belastungsgewicht (100kg) das System eicht. Dieser Wert wird im EEProm gespeichert.

Nun erstelle ich ein weiteres Programm, welches mir die Gewichtsabweichung in 20 Positionen (4,5m /20 = Auflösung 0,225m) berechnet. Bei einer „Lernfahrt“ mit dem bekannten Eichgewicht fahre ich also die 20 Positionen an und speichere den berechneten Wert im EEProm (Adr. 1 bis 20) ab.

Danach erstelle ich ein Array

int KWert [20]; //Array Korrekturfaktoren

und fülle das Array mittels

for (int a = 0; a <20; a++)
{
KWert [a] == EEPROM.read(a +1); //schreibt im Array 0-19 den Wert des EEProms Ard. 1-20
delay(50); //kurze Verzögerung
}
obiges soll bei jedem Bootvorgang einmal durchlaufen werden.

Bei der Gewichtsberechnung lasse ich dann den Korrekturwert wie folgt mit einfließen:

int KFaktor = KWert [(aktuelle Höhe / (4,5 /20))-1];
obige Formel soll durch integer-division an die richtige Position im Array springen.

Beispiel:
aktuelle Hubhöhe = 1m (sollte dann der 4te Wert im Array sein, also Speicherplatz 3 im Array)

Ergebnis lt. Formel sollte dann 3,44444 sein, was dann als intzahl 3 ist und somit auf die 4te Zahl ( Adr. 3)im Array zugreift.

Haut das so hin, oder gibt es einen wesentlich einfacheren Ansatz zur Lösung und ich denk nur wieder zu kompliziert..?

Darf für den Zugriff auf das Array der Wert in den []Klammern berechnet werden, oder muss die Adresse zuvor in einer extra Zeile berechnet werden?

Vielen Dank für eure Mühen und den evtl. Denkanstoß

KWert [a] == EEPROM.read(a +1);

Du meinst wohl:

KWert [a] = EEPROM.read(a +1);

(inverser IF Fehler) :wink: :wink: :wink: :wink:

Grüße Uwe

Hallo, ja sorry vertippt..

Starkes Projekt! Wenn man eien feste Geometrie hat, sollten sich dann nicht sämtliche Abhängigkeiten über die Winkelstellung und Längen der Hebel/Arme errechnen lassen?

Also wenn du alle 50ms misst ist dein Array voll bevor du am Joystick gezogen hast.
Nimm doch dafür deinen Winkelgeber und messe nach einer bestimmten Anzahl an Inkrementen, dann kannst du auch genau auf deine 0,225m kommen.

Gruß

sth77: .. starkes Projekt! = in diesem Fall eine nicht zu unterschätzende Aufgabe. Die Auflösung der Waage
sollte später etwa 5kg betragen!!.... für eine Berechnung über Winkelstellung / Hebelarme und so
bin ich zu wenig Mathegenie...

Scherheinz:

der Code oben soll nur nach dem einschalten des Gerätes das Array mit den Werten die im EEProm geseichert sind füllen. hier wird nicht dauernd gemessen, obiges läuft nur einmal im Setup() nach dem Einschalten ab.

Die Werte die im EEProm zuvor gespeichert wurden werden in einem "ServiceMenü" etwa so erzeugt.

Bekanntes Gewicht auflegen,

Gesamthubhöhe / 20 Messpunkte (4,5m / 20 = 0,225)

dann wird jede Meßhöhe manuell angefaren, also

0,225m , etwas warten bis Messwert stabil ist, dann Abweichungen berechnen, im EEProm Adr.1 speichern

nächste Meßhöhe:
0,45m anfahren, etwas warten bis Messwert stabil ist, Abweichungen berechnen, im EEProm Adr.2 speichern

usw. bis zu max. Höhe 4,5m welcher dann im EEProm Adr.20 gespeichert wird.

Als Winkelgeber verwende ich einen berührungslosen Magnet-Winkel-Sensor von Cherry 0-180°, 0,5-4,5V Ausgang.

Achso, ich dachte du willst die Referenzfahrt automatisch machen lassen. Heißt du schaltest ein und fährst den Lader einmal mit Referenzgewicht aus und der Arduino nimmt sich in bestimmten Abständen die Messwerte und speichert sie ab.
Aber hast ja recht, der Messwert muss sich auch erstmal beruhigen.