Ruderweg Messung mit Arduino

Eckehard

User
Hallo,

Jeroens Code enthält auch eine Glättung:
Code:
...
//filtering by Kalles Research
  adxl.readAccel(&x, &y, &z); // read the accelerometer values and store them in variables
  x1=x;
  y1=y;
  z1=z;
  adxl.readAccel(&x, &y, &z); // read the accelerometer values and store them in variables
  x2=x;
  y2=y;
  z2=z;
  adxl.readAccel(&x, &y, &z); // read the accelerometer values and store them in variables
  x3=x;
  y3=y;
  z3=z;
  x=(x3*0.50)+(x2*0.3)+(x1*0.2);
  y=(y3*0.50)+(y2*0.3)+(y1*0.2);
  z=(z3*0.50)+(z2*0.3)+(z1*0.2);
...

Kalles Code mit Glättung:
Code:
...
tiltfiltered = tilt * 0.5 + value01 * 0.3 + value02 * 0.2;  // see [URL]http://forum.arduino.cc/index.php?topic=184067.0[/URL]

  value02 = value01;

  value01 = tiltfiltered;
...

Und:
Ja Eckehard, ich weiss, wir haben da eine unterschiedliche Meinung zu ...
wink.gif
Ja, meine Meinung dazu in einem Satz zusammengefasst: "Wer hat denn das gemacht?" :(

An welchem Problem wird denn eigentlich gearbeitet?

Grüße
Eckehard
 

kalle123

User
An welchem Problem wird denn eigentlich gearbeitet?

:D

Wohl an Jeroens ....

Also Programmieren kann er ja auch, nur antworten auf Fragen, das scheint wohl bei Jeroens ein kleines Problemchen zu sein ;)

Ich warte jetzt erst mal bis ich hier zu was höre
Wieviele ADXL 345, alle aus einer Quelle. Alle mit dem Verhalten. Wie sieht die Verkabelung aus. Störeinflüsse etc .....

Er ist jetzt erst mal mit dem LM7805 beschäftigt :D

Gruß KH

PS. Ich glaube, ich mach mal nen neuen thread zu einer BL Motor RPM Anzeige auf. Bin gerade dabei, verschiedenen BLs mit unterschiedlichen Props zu vermessen. Mit der optischen Drehzahlmessung ist mir das auf Dauer zu blöd. Arduino mit LCD 1602 und Taster für die Eingabe der Polzahl. RPM 10 .... 99999 U/min. Vielleicht hat ja jemand Interesse.
 

Source

User
Ich hab mich die letzten Tage auch versucht in das Thema Filterung im Arduino einzulesen. Ich habe auf meinem neuen Blog einen Artikel dazu geschrieben.
Wen es interessiert: HIER
Falls ich etwas grundlegendes falsch geschrieben habe, dürfen sich die Experten hier gerne melden.

Gruß Max
 

WalterH

Fördermitglied
average

average

Wer Lust hat kann mal versuchen ob ein Mittelwert über eine größere Zahl von Werten für ihn sinnvoll ist.
Der geltende Mittelwert ist schön aber im Beispiel hier ist die Basis von Werten größer (geht natürlich auch mit gleitendem Mittelwert).
Ich rechne mit float.

Beispiel:


//.................... average ......................
samplenumber=50; // number of samples to average ....................
Xaverage=0.0;
Yaverage=0.0;
Zaverage=0.0;
average_n=1; // BASE 1 !!! index of read values to average
delta_x_average=0;
delta_y_average=0;


for(average_n=1; average_n<=samplenumber; average_n=average_n+1)
{
// accumulate data .............................................
adxl1.getAcceleration(&x1, &y1, &z1); // read values
delay (20); // Delay 20 = 50 Hz optimal limit to stayat low noise
// using average of 50 samples →refreshrate = ca. 1/s
Xaverage=Xaverage+float(x1);
Yaverage=Yaverage+float(y1);
Zaverage=Zaverage+float(z1);
}; // ..............End of loop accumulate data................


//............... compute averages ..............


Xaverage=(Xaverage/samplenumber);
Yaverage=(Yaverage/samplenumber);
Zaverage=(Zaverage/samplenumber);

x1f=Xaverage; // keep in float
y1f=Yaverage; // use these instead of x1, y1, z1
z1f=Zaverage; // aus den Beispielen


OO - copy & paste macht es etwas unübersichtlich :-)

Viel Spaß
Walter
 

kalle123

User
Hallo Max und Walter.

Schön, das ihr hier mit denkt ;)

Habt ihr vielleicht auch Vorschläge und vielleicht sogar mal einen kleinen sketch für ADXL345 und Arduino,
um eine (bessere) Ruderwegmessung als Alternative zu dem bisher hier geposteten Zeugs probieren zu können?

Würde mich wirklich freuen!

Grüße KH

PS. Eine Idee, die mir da z.B. im Kopf rum schwebt.

Das hier ist ja der Programmbereich, wo die 3 Achsen ausgewertet werden

calc = xg / sqrt ((sq(yg) + sq(zg)));

Quelle: Application Note AN-1057

Idee ist, bei Winkeländerungen > 45° gleitend die Achsen in der Formel wechseln
nach beispielsweise ...

calc = zg / sqrt ((sq(yg) + sq(xg)));
 

Source

User
Ich hab grade leider nicht viel Zeit aber bei mir funktioniert die Rechnung momentan so:
Code:
deg_SensorA = (atan2(g_value_AY, (sqrt(g_value_AX * g_value_AX + g_value_AZ * g_value_AZ))) * 180.0) / PI;

Ich hab mich dabei HIER entlanggehangelt.

Habt ihr vielleicht auch Vorschläge und vielleicht sogar mal einen kleinen sketch für ADXL345 und Arduino,
um eine (bessere) Ruderwegmessung als Alternative zu dem bisher hier geposteten Zeugs probieren zu können?

Würde mich wirklich freuen!
 

kalle123

User
Hallo Max.

Hab gerade mal auf deinem Blog zu Filtern geschaut. Erst mal +1!

Hast dir da ja richtig Arbeit gemacht!

Hab da wohl fast einen "Exponentiell geglätteter Mittelwert" reingesetzt.

tiltfiltered = tilt * 0.5 + value01 * 0.3 + value02 * 0.2;
:)

Nur, noch schöner wäre das, wenn du nicht nur die Schnipsel, sondern auch kleine Beispielsketches rein setzen würdest. **

>break<

Ich hab mich da "entlanggehangelt" -> Anhang anzeigen AN-1057.pdf

Formel im sketch ist wie bei dir auch

calc = xg / sqrt ((sq(yg) + sq(zg)));
tilt = atan(calc) * 57.296;

Mein Gedanke ist nur. Du hast den Sensor an der Klappe horizontal. Formel wie oben. Nun fährst du die Klappe (Flugmodell) hoch und irgendwann "greift" der Sensor mit der "x-Achse" nicht mehr. Zähler (x-Achse ---> 0) in oben aufgeführter Formel .... Ich weiß nicht, wie ich da die Analog Devices application guide vom ADXL 345 zu interpretieren hab :confused:

Grüße KH

PS **. Aber ich seh gerade, hier gibt es "examples" :)

https://github.com/asheeshr/Microsmooth
 

WalterH

Fördermitglied
Hallo Max und Walter.

Schön, das ihr hier mit denkt ;)

Habt ihr vielleicht auch Vorschläge und vielleicht sogar mal einen kleinen sketch für ADXL345 und Arduino,
um eine (bessere) Ruderwegmessung als Alternative zu dem bisher hier geposteten Zeugs probieren zu können?

....

Momentan noch nicht.
Jetzt steht als nächstes die Anwendung im Vordergrund.
Ich muss das jetzt mal als fertiges Gerät haben, um in der Praxis zu sehen ob das was taugt.
Da gibt es genügend Baustellen. Zum Beispiel die Kabellänge und die Verkabelung. Das Endstück des Kabels muss sehr flexibel sein damit es nicht an der Klappe zieht und damit die Messung stört.
Aber auch die Gehäuse und die Klemmung des Sensors an die Klappe muss vernünftig werden. :cool:

Erst nach einer Runde Praxistest kommen dann die Verbesserungen der Software.
In der Tat benötigt man für Wölbklappen eine gute Präzision bis in fast 90° (Butterfly). Da kommt Dein Vorschlag dann eventuell ins Spiel.
Für Querruderausschläge und sonstige unter 45° (z.B. Snap-Flap) hoffe ich jetzt bereits auf gutes Gelingen. :D
Bei meiner Anwendung liegt ein Schwerpunkt im Gleichlauf der Ruder.
Durch die extrem geringen Dicken und Wölbungen der aktuellen Profile bei F3X Modellen ist die genaue Messung der Ruderausschläge und des Gleichlaufs eine Herausforderung.
So ist der Unterschied zwischen minimalem Sinken und bestem Gleiten an der Hinterkante der Querruder und Flaps sehr gering.
20 mal mit Schieblehre um das Modell herumzulaufen ist zwar nervig aber nur wenn das Arduino Gerät mindestens die gleiche Genauigkeit bietet wird das was.
Sonst bleib ich trotz gesamten Aufwand beim Messschieber.
:rolleyes:
 

WalterH

Fördermitglied
Und mehr Fragen

Und mehr Fragen

Wofür haben wir denn hier die Experten? :D

1)
Bei den bisherigen Beispielen sehe ich nicht in welchem Modus der Empfindlichkeit der Sensor betrieben wird.
Ich sehe auch nicht wie ich ihn mit der ADXL345.h Lib einstellen oder auslesen kann.
Wie geht das und bringt es etwas den 2G Modus zu wählen? Ist der bereits gewählt?

2)
Das Datenformat der eingelesenen Werte ist wohl ein signed int16.
Bei den eingelesenen Werten komme ich auf Werte die gerade etwas größer sind als "maxint von 8bit oder -maxint von 8bit".
Also z.B. für X -283 und +265 für meinen Sensor, ein Bereich von 548. Da sind wir bei ca. 0,3° Auflösung über den Bereich von 180°.
Das Datenformat ist wohl ein signed int16
Liege ich hier falsch?
Wenn ich 50 Werte mittle hab ich eine stabile Anzeige bei +- 0,1° mit wenigen Ausreissern von +-0,2°
Hat das jemand besser?

3)
Einen Mittelwert von vielen Einzelwerten halte ich für besser als einen laufenden Mittelwert über wenige Werte.
In meiner Anwendung messe ich praktisch statisch, das heisst ich messe einen eingestellten Ruderausschlag und benötige zum Ablesen einige Sekunden.
Wenn ich den Ausschlag korrigiere brauche ich wieder einige Sekunden zum lesen.
In einer Sekunde kann ich einen Mittelwert von 50 Messungen bilden.

Das Thema ist für mich neu und ich lasse mich gerne korrigieren.
Nur so komme ich weiter.
 

kalle123

User
Durch die extrem geringen Dicken und Wölbungen der aktuellen Profile bei F3X Modellen ist die genaue Messung der Ruderausschläge und des Gleichlaufs eine Herausforderung.

Ja, Walter, dann warte mal auf die Experten :D

Glaube, ich hab schon einige Male geschrieben, aber ich wiederhole mich da gerne, dass das, was ich da jetzt habe, mir persönlich reicht.
Ich habe keine F3X Modelle und brauche keine 1/10° und 1/10 mm. Ich brauche die Ruder nicht mit der Schieblehre einzustellen.

Ich lass mich da mal überraschen, was da noch kommt.

Zum Kabel: Ich hab mir da auch Gedanken zu gemacht. Bei Plattenspieler gab es mal dünnes, hochflexibles geschirmtes Kabel am Tonabnehmer. Irgendwo hab ich das mal gesehen.

Zu weiteren Fragen - die technischen Manuals von Analog Devices hab ich ja hier gelinkt. Damit läßt sich ja wohl ein Teil deiner Fragen beantworten.

In der Tat benötigt man für Wölbklappen eine gute Präzision bis in fast 90° (Butterfly). Da kommt Dein Vorschlag dann eventuell ins Spiel.

Ja, geht mir im Kopf rum, nur was sagt da die application guide zum ADXL345??

cu KH
 

kalle123

User

Source

User
Wofür haben wir denn hier die Experten? :D

1)
Bei den bisherigen Beispielen sehe ich nicht in welchem Modus der Empfindlichkeit der Sensor betrieben wird.
Ich sehe auch nicht wie ich ihn mit der ADXL345.h Lib einstellen oder auslesen kann.
Wie geht das und bringt es etwas den 2G Modus zu wählen? Ist der bereits gewählt?

In der ADXL345 Library gibt es Set und Get Methoden. Sprich: Funktionen die das Range-Register setzen bzw. auslesen.
Der Kommentar in der ADXL345.cpp sagt dazu:

Code:
/** Set data range setting.
 * @param range Range value (0x0 - 0x3 for 2g/4g/8g/16g)
 * @see getRange()
 * @see ADXL345_RA_DATA_FORMAT
 * @see ADXL345_FORMAT_RANGE_BIT
 * @see ADXL345_FORMAT_RANGE_LENGTH
 */

Zum Beispiel kannst du im Setup schreiben:
Code:
//setze das Range Register auf 2g
adxl345.setRange(0x0);    //ACHTUNG DAS SENSOROBJEKT KANN ANDERS HEISSEN

Und zum schauen ob das Register richtig gesetzt wurde:

Code:
Serial.print("Range:\t");Serial.println(adxl345.getRange());

2)
Das Datenformat der eingelesenen Werte ist wohl ein signed int16.
Bei den eingelesenen Werten komme ich auf Werte die gerade etwas größer sind als "maxint von 8bit oder -maxint von 8bit".
Also z.B. für X -283 und +265 für meinen Sensor, ein Bereich von 548. Da sind wir bei ca. 0,3° Auflösung über den Bereich von 180°.
Das Datenformat ist wohl ein signed int16
Liege ich hier falsch?
Wenn ich 50 Werte mittle hab ich eine stabile Anzeige bei +- 0,1° mit wenigen Ausreissern von +-0,2°
Hat das jemand besser?

Nein

3)
Einen Mittelwert von vielen Einzelwerten halte ich für besser als einen laufenden Mittelwert über wenige Werte.
In meiner Anwendung messe ich praktisch statisch, das heisst ich messe einen eingestellten Ruderausschlag und benötige zum Ablesen einige Sekunden.
Wenn ich den Ausschlag korrigiere brauche ich wieder einige Sekunden zum lesen.
In einer Sekunde kann ich einen Mittelwert von 50 Messungen bilden.

Das Thema ist für mich neu und ich lasse mich gerne korrigieren.
Nur so komme ich weiter.

Kann man bei einer staischen Messungen so machen. Bedeutet nur, das im Fall einer Lageänderung, die "alten" Werte 1 Sekunde lang deine Messung verfälschen.
Also theoretisch, erst warten, dann ablesen. In der Praxis wohl ziemlich egal.
Aber das Display nur jede Sekunde zu aktualisieren, wäre mir zu langsam.

Gruß Max
 

WalterH

Fördermitglied
...
Also theoretisch, erst warten, dann ablesen. In der Praxis wohl ziemlich egal.
Aber das Display nur jede Sekunde zu aktualisieren, wäre mir zu langsam.

Gruß Max

Danke Max für die Info.
Ich lese mich gerade doch noch in die Library ein. Wollte ich eigentlich vermeiden. Der Aufwand wird allmählich größer als die Messungen zu Fuß mit Schieblehre :D.
Ich brauche da etwas länger da ich laaaaange nicht mehr programmiert habe.
Aber man wird klüger - ist ja auch ein Gewinn. ;)

Du bist jung und dynamisch - da rasen die Sekunden dahin. Ich habe locker jeweils eine Sekunde Zeit :cool:
Ich muss ja auch immer noch am Sender Einstellungen verändern. Das dauert, besonders wenn man den Gleichlauf der Klappenservos per Kurve anpassen will.
Aber jeder soll nach seinen Sekunden leben wie er möchte. :)
 
Zitat von Kalle : also Programmieren kann er ja auch, nur antworten auf Fragen, das scheint wohl bei Jeroens ein kleines Problemchen zu sein
Wenn du glaubst das ein bischen copy/past schon programmieren ist, dann kann ich programmieren ;-)

Zitat von Kalle Er ist jetzt erst mal mit dem LM7805 beschäftigt ;-)
Das war das idee von Whity um ein unabhangige stromversorgung zu haben.

Wieviele ADXL 345, alle aus einer Quelle. Alle mit dem Verhalten. Wie sieht die Verkabelung aus. Störeinflüsse etc ....
Die ADXL 345 kommen von.
https://nl.aliexpress.com/item/GY-291-ADXL345-3-Axis-Digital-Gravity-Sensor-Acceleration-Module-IIC-SPI-transmission/32719111836.html?spm=a2g0s.9042311.0.0.hrKy1m

Ob die Verkabelung stimmt schau bitte auf meine Bilder.
Storeinflusse, keine Ahnung wo nach ich schauen sollte.


Die 4 Sensoren mit Bekabelung.
s1 (Medium).jpg


Die Komponenten mit LM7805 und Batterie
Ich habe Kalles Aufbau genommen mit eeprom und seine Program (ohne Anderungen)

s2 (Medium).jpg

Die Messaufstellung, Die Adxl war noch verklebt so dass keine Bewegung da war.
s3 (Medium).jpg


Ergebnisse mit Sensor 1 und 2. Einmal mit stromversorgung aus dem Laptop und einmal durch die LM7805
s4 (Medium).jpg

Ergebnisse mit Sensor 3 und 4. Einmal mit stromversorgung aus dem Laptop und einmal durch die LM7805
s5 (Medium).jpg

Fur mich ist das ergebnis :
ein Ungenauigkeit von 1 mm aber bei grossere Ausschlage 2 mm.
Stromversorgung aus dem laptop oder LM7805 macht bei mir keine unterschied.
Die Genauigkeit bei Startpunkt war bei mir 100%, nach jeder Bewegung kam er wieder nach nul zuruck!

Ich hoffe das jemand die Muhe nimmt um auch mal seine Genauigkeit zu messen ("throw") um zu sehen ob die gleich Werte rauskommen.
Ich habe mal kurz die Arduino website angeschaut. Kann es sein durch float , int usw das die genauigkeit von die Zahlen "schleichter " wird?
(die Genauigkeit nur im Bereich von +/- 15 mm Weg sollte nur sehr gut sein)
 

kalle123

User
Wenn du glaubst das ein bischen copy/past schon programmieren ist, dann kann ich programmieren ;-)

Jeroen, mehr kann ich auch nicht! :D

Also kein Unterschied bei der Stromversorgung?!

Deine ADXL 345 sind ALLE vom selben Händler. Das könnte ein Problem sein bei Lieferung aus China.
Ich bestelle lieber 4 ADXL 345 von 4 verschiedenen Händlern ;) Es gibt auch bei Chips 2.Wahl.

b5IoPwLl.png


Bei solchen Abweichungen würde ich auch nervös, Jeroen!

(Deine Zahlen sind für Dritte teilweise schlecht zu lesen!)

Wie groß ist "chord" bei den Aufzeichnungen?

Gruß KH
 
kalle schrieb : Also kein Unterschied bei der Stromversorgung?!
Stimmt leider !

kalle schrieb : Wie groß ist "chord" bei den Aufzeichnungen?
Die Chord war 67 mm bei alle Messungen.

Da wo du es nicht lesen kannst, ist dass Unterscheid 2mm.

Kalle schrieb : Bei solchen Abweichungen würde ich auch nervös, Jeroen!
Warum ist das NUL-punkt immer gut?

Kalle schrieb :Deine ADXL 345 sind ALLE vom selben Händler. Das könnte ein Problem sein bei Lieferung aus China.
Ich bestelle lieber 4 ADXL 345 von 4 verschiedenen Händlern Es gibt auch bei Chips 2.Wahl.
Wie weiss ich ob ich die beste kaufe oder ist da nur probieren bei unterschiedlich Handler aus China?
 

kalle123

User
Jeroen, viele Fragen :rolleyes:

Wie weiss ich ob ich die beste kaufe oder ist da nur probieren bei unterschiedlich Handler aus China?

https://www.google.de/search?q=fake+chips+from+china&source=lnms&sa=X&ved=0ahUKEwjbtYXiz8rZAhVJK1AKHTmcDcQQ_AUICSgA&biw=1336&bih=827&dpr=1

So, ich werde auch mal hier versuchen, zu messen. ABER, ich werde Winkel messen, nicht "throw". Der ADXL 345 misst Beschleunigung (9.81 m/s²) ---> Winkel ---> "throw".

1. Versuch: Smartphone

F1MwweVl.png


an 45°

CWuWPXLl.png


Mir ist der Fehler zu groß! Manche messen ja mit dem smartphone. Vielleicht ist das iphone ja besser ;)

2. Hiermit

sEvAggCl.png


und

cPJidyYl.png


Das sieht recht gut aus.

3. Noch besser wäre so etwas, aber das müsste ich erst bestellen ....

xhxpmSol.png


Bild aus https://nl.aliexpress.com/item/0-320Precision-Angle-Measuring-Finder-Scales-Universal-Bevel-Protractor-Tool/32478150486.html?spm=a2g0s.8937460.0.0.nSDWU9

-------------------------------------------------------------------------------------------------------------------------------------

Vielleicht können die ADXL 345 nicht besser messen?

Vielleicht ist die Art, wie im Arduino sketch gerechnet wird, nicht richtig für hohe Genauigkeit?

Jeroen, ich weiß es einfach nicht!

Eckehards Programm nimmt auch ADXL 345 und rechnet genau so, also wohl kein Unterschied?!

Man könnte mal das hier kaufen und schauen, ob das besser ist, wenn man das Messgerät nach misst und kontrolliert!

http://www.digitech.nl/angle-throw-meter-preorder

Von Aaro seh ich noch kein Programm, nur "schöne" Bilder ;)

Viele Fragen, die ich dir auch nicht beantworten kann .....

Gruß KH
 

WalterH

Fördermitglied
...Ob das schon jemand mal nachgeprüft hat :confused:

Gruß KH

Man muss nur das Video sehen. Eine herrliche Satire. Ist das Dieter Hallervorden geschminkt? :rolleyes:

Oder ist das ernst gemeint? So dämlich kann doch niemand sein den Ruderausschlag des Höhenruders als Winkel "präzise" zu messen und sich dabei über den Flieger zu beugen und den Winkel des ganzen Fliegers, inclusive natürlich des Höhenruders, zu verändern.

Was soll man von solcher Werbesendung halten?

Das kleine Gerät mit der App macht einen guten Eindruck. Nur schade , dass man keine 2 Geräte gleichzeitig in der App sieht.
Dann hätte ich mir die ganze Arbeit gespart. :D
 
Ansicht hell / dunkel umschalten
Oben Unten