Ruderweg Messung mit Arduino

M. Roy

User
Hi zusammen,

hier mal meine letzte Ausbäute von heute morgen.

Links die alte Klammer die aber nicht wirklich funktionierte und vor allem zu wenig Spielraum für die Dicke des Ruders gelassen hat.

Rechts das Neue welches für einen Schnellschuss sehr vielversprechend ausschaut. Funktion ist glaub selbsterklärend. Das ADXL wird unten eingeschoben und das Kabel wird rechts durch den Kanal geführt und kann geklemmt werden. Als Kabel werd ich ein USB Kabel nehmen. Ist preislich gut und die sind sehr flexibel.

Was meint Ihr?

image.jpg

Grüße
Markis
 

kalle123

User
Hallo Markis.

Danke für das Bild. Da kann ich nicht mithalten ;) Eine Baustelle 3D Druck mache ich (auf meine "alten" Tage) nicht mehr auf.

Bildschirmfoto_2017-07-16_10-59-56.jpg

Bei GRÜN sitzt der ADXL345, bei SCHWARZ das Kabel und Klemmung ROT. Seh ich das richtig?

Wie die Klemmung (Ausführung re.) funktioniert, seh ich so nicht ...

USB Kabel ist sicher eine Möglichkeit. Nur sind mir die "üblichen" mit 4 - 5 mm einfach zu dick. Die Kabel an USB Mäusen sind dünner. Meine Cherry Maus hier hat ein 3 mm Kabel, aber ich will die Maus nicht schlachten.

Noch was Markis. Hans hatte ja gestern hier nachgefragt wegen "Genauigkeit/Wiederholgenauigkeit". Vielleicht kannst du da was zu sagen?!

Für mich war/ist das hier eine reine Hobbysache. Und die techn. Daten des Sensors lassen sich nachlesen. Irgendwo hier im thread hab ich auch den Link zu einem Kalibriersketch gepostet.

Grüße KH
 
Hi,

zunächst mal vielen Dank für die wertvollen Infos in diesem Thread. Hat mich dazu animiert das Ganze nachzubauen!


Eine Frage zum Sensor: Was denkt ihr wie dieser auf den Einfluss eines Magneten reagiert. Ansonsten wäre dies doch eine gute Möglichkeit den Sensor auf dem Ruder zu fixieren.
 

kalle123

User
Das mit den Neodym Magneten hab ich auch schon probiert.

NUR, die Dinger kleben halt unter den dünnen Ruderflächen bei mir wie Sau.

Kein Einfluß. Messprinzip -> Gravitation, nicht Magnetfeld.

Gruß KH
 

Vakuum

User
mal Quergedacht...

mal Quergedacht...

Hi,

ich finde eure Arbeit sehr interessant!
Zur Entwicklung des Messgerätes kann ich mangels Fachwissen nichts beitragen, daher habe ich den Fred auch nicht vollständig gelesen.

Mich beschäftigt ein anderer Aspekt...

Ich gehe von folgenden Voraussetzungen aus:
- Die Sensoren registrieren Abweichungen in Relation zur Lotrechten, die Anzeige eurer Lösung erfolgt in Winkelgraden.
- Die Modelle werden zur Messung in horizontaler Lage mit null Grad Anstellwinkel (Tragfläche) aufgebaut.
- Es können mehrere Messwerte simultan erfasst werden (Frage: wie viele maximal, etwa auch acht für einen 6-Klappenflügel + Leitwerk?).

Folgende Probleme scheint es damit jedoch in der Praxis zu geben:
- Die Messung wird beeinträchtigt durch das Gewicht der Sensorik an den waagerecht stehenden Rudern.
- senkrecht (Seitenruder) oder schräg (V-Leitwerk) stehende Ruder können nicht gemessen werden.

Was haltet ihr von folgendem Vorschlag:
Die Modelle werden zur Messung "an der Nase aufgehängt", idealerweise in folgender Position:
Anstellwinkel der Fläche zur Lotrechten = 0°, Querachse des Modells zur Lotr. = 90°.

Daraus folgt:
Anstellwinkel des Höhenleitwerks zur Lotr. entspricht dann der EWD
Anstellwinkel des Seitenruders beträgt dann 0° zur Lotr.
Das Gewicht der Sensorik spielt praktisch keine Rolle mehr.
Alle Ruder können in einer Anordnung gemessen werden.
Hinweis:
Anstellwinkel des V-Leitwerks entspricht nicht exakt der EWD, sondern reduziert sich um folgende Formel*
* „cos² ((180- ϕ) /2)“ [ϕ = Öffnungswinkel]


Die Vorstellung, zur Programmierung eines Modells die Positionen bzw. die Ausschläge aller Ruder gleichzeitig angezeigt zu bekommen, halte ich für sehr verlockend.
Den Mehraufwand, ein Modell zur Messung abweichend von der üblichen waagerechten Ausrichtung in der beschriebenen Weise zu positionieren, würde ich gerne in Kauf nehmen.


Was haltet ihr von der Sache?

Gruß
Gregor
 

kalle123

User
Hallo Gregor.

Ich will dann mal meinen unqualifizierten Senf dazu geben.

Ich gehe von folgenden Voraussetzungen aus:
- Die Sensoren registrieren Abweichungen in Relation zur Lotrechten, die Anzeige eurer Lösung erfolgt in Winkelgraden.
- Die Modelle werden zur Messung in horizontaler Lage mit null Grad Anstellwinkel (Tragfläche) aufgebaut.
- Es können mehrere Messwerte simultan erfasst werden (Frage: wie viele maximal, etwa auch acht für einen 6-Klappenflügel + Leitwerk?)

Pkt.1 OK

Pkt.2 Warum horizontale Lage mit null Grad Anstellwinkel? Es werden alle drei Achsen des Sensors ausgewertet.

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

Also eine gewisse Schräglage des Modells wird ausgeglichen. Also 5° oder 10° sollten da nix ausmachen. Sensor ansetzen und Elektrionik auf Null stellen.

Pkt.3 Da ein Arduino pro mini, ein LCD 1602 und der Sensor in China für Zusammen unter ~5€ zu kriegen sind und ich die Sache für meine kleinen Nuris nutzen wollte, hab ich mir halt 2 Units gebaut. Ich brauch da momentan nicht mehr. Aber das Projekt ist offen ....

Zu deinen weiteren Anregungen sag ich jetzt mal nichts, Gregor. Wenn du löten kannst, investiere doch einfach mal die paar Euros und experimentiere einfach selber damit. Wenn dich nur Winkel interessieren, kannst du 2 Tasten (um die Klappentiefe zu variieren) weglassen. Vielleicht ist für dich das Nullstellen auf überflüssig. Dann brauchst du überhaupt keine Tasten.

Einfachere geht es fast nicht mehr ;)

Gruß KH
 

Eckehard

User
Zwei ADXL345 über I2C an einem Arduino

Zwei ADXL345 über I2C an einem Arduino

Hallo,

vielleicht grübelt der eine oder andere noch über eine einfache Möglichkeit, zwei I2C ADXL345 Sensoren an einem Arduino zu betreiben...

Auf der Reise durchs www bin ich auf folgende intreressante Library gestoßen:

https://www.i2cdevlib.com/usage

Vorteil:
Man kann der Instanziierung als Parameter die DeviceID übergeben....
Code:
...
// class default I2C address is 0x53

// specific I2C addresses may be passed as a parameter here

// ALT low = 0x53 (default for SparkFun 6DOF board)

// ALT high = 0x1D

ADXL345 accel;
...


Bin gespannt, wie das dann funktioniert...

Grüße
Eckehard
 

Thomas L

Vereinsmitglied
Hmm, jetzt grübel ich ... wieso benötigt man für mehrere I2C devices eine eigene Lib ? das geht auch mit der standard Wire Lib. So wie ich das sehe bietet I2CDev lediglich eine vereinfachte Methode Daten auf den I2C-Bus zu lesen/schreiben.

z.B. landet jedes Read in der Funktion I2Cdev::readBytes wo dann die Wire Lib bedient wird:
Wire.beginTransmission(devAddr);
Wire.write(regAddr);
Wire.endTransmission();
Wire.beginTransmission(devAddr);
Wire.requestFrom(devAddr, (uint8_t)min(length - k, BUFFER_LENGTH));
 

kalle123

User

Eckehard

User
Hallo Thomas, Kalle,

ja, im Link von Kalle wird Hardware (SD0 Pin auf GND oder VCC) und Software Bedingungen beschrieben. Als Software wird Wire.h Lib verwendet....

Ich würde gerne eine (!) ADXL345.h Lib verwenden...
Die mir bis dato bekannten ADXL345.h Libs kennen "nur" die Standard 0x53 DeviceID....

Mit der I2CDev.h und der von dort (!) auch mitgelieferten ADXL345.h kann ich die DeviceID mit übergeben.... also zwei ADXL345 Sensoren an einem I2C Bus verwenden..

Das vereinfacht den Sketch Ruderweg.ino imho erheblich...bzw macht diese lesbarer.

Soweit mein Plan.....

Grüße
Eckehard
 

kalle123

User
Will noch mal was zur Genauigkeit sagen.

Die techn. Daten des ADXL 345 lassen sich ja im Datenblatt nachlesen.

http://www.analog.com/media/en/technical-documentation/data-sheets/ADXL345.pdf

Hier mal die entsprechende Tabelle aus der Datenblatt
Bildschirmfoto_2017-07-18_14-27-34.png

Dann hab ich mich bei meinem Ansatz entschlossen, alle drei Sensorachsen in die Kalkulation einfließen zu lassen.

Siehe die application note zum ADXL 345 http://www.analog.com/media/en/technical-documentation/application-notes/AN-1057.pdf

Ich verwende die Formel [11], aber das hängt von der Sensorausrichtung ab. Bei mir ist halt X vorne, also eventuell an der Stelle im sketch ändern nach Formel [12] oder [13]

Das soll bewirken, das Schräglagen kompensiert werden.

Dann noch die Sensorkalibrierung. Eine gute Anleitung findet sich hier https://learn.sparkfun.com/tutorials/adxl345-hookup-guide

Abschnitt Calibration Method

Ich nehm das aufgeführte sketch und packs in einen Arduino Uno und schließe einen Sensor an. Dann brauch ich noch eine möglichst rechtwinklige Referenz (Würfel o.ä.)

Der Sensor wird an der Referenz jeweils in beiden Richtungen angelegt und das Programm ermittelt für alle drei Achsen jeweils den min und den max ACC Wert. Werte notieren und mit der Anleitung dort den GAIN und OFFSET für die drei Achsen berechnen. Die Werte dann in mein Programm eintragen. Feddig. (Hört sich kompliziert an, ist aber simple ;))

Dann aber DIESEN Sensor mit DIESEM Arduino betreiben und nicht mit anderem Sensor wechseln oder halt erneut kalibrieren.

Soviel zu Genauigkeit. Jetzt kann man noch diskutieren, inwieweit die ~ 10 gr Sensor + Wäscheklammer (ich bleib erst mal dabei :D, die Neodym machen mir Macken in die Flächen) und die Steifigkeit des Kabels auf die Messung wirken. Hab hier 4 adriges Kabel mit 3 mm Ø vom "C". Lieber wäre mir das Silikonkabel, das sich an den kleinen GPS Modulen aus China findet. Auch 4 adrig 3 mm Ø, aber hochflexibel. Nur gefunden als Meterware hab ich das halt noch nicht ....

Grüße KH
 

Eckehard

User
2 ADXL345 an einem Arduino, I2CDev Library

2 ADXL345 an einem Arduino, I2CDev Library

Hallo,

anbei mal der (nicht finale) Stand von heute abend....:
IMG_0667.JPG

Angezeigt werden
- 2x Winkel, rechter und linker Sensor
- 1x Ausschlag, auf Basis des Winkels des rechten Sensors, bei eingestellter Klappentiefe


Als Hardware habe ich ersteinmal folgendes verwendet:
- Arduino Uno R3
- LCD Keypad Shield (mit 6Tasten)
- ADXL345 (SDO an VCC)
- ADXL345 (SDO offen)
etwas Flachbandkabel aus der Restekiste zum Anschluss der Sensoren.

Also funktioniert die Verwendung von 2 ADXL345 prinzipiell unter Verwendung der I2CDev Library....

Den Uno werde ich noch durch einen ProMini ersetzen da ich den Uno für die "Prototypenentwicklung" benötige...

Der praktischen Einsatz am Modell steht noch aus....


Grüße
Eckehard
 

M. Roy

User
Hi zusammen,

schmeißt diese Pixelbomber weg und versucht mal so ein Nextion Display.
Die Teile sind echt cool und weiten das Spektrum extrem aus.

@ Eckehard: wie hast du die zwei ADXL über das I2C ausgelesen. Wäre für mich interessant, da ich da an meine Grenze gestoßen bin. Ich konnte die 0x53 nicht auf den zweiten Sensor anpassen.....
Meine Lösung baut auf dem Pfad von Kalle auf, aber ja, über deinen Weg wird es sicherlich übersichtlicher.

Würde mich über Rückmeldiüung freuen.

Grüße
Markus
 

kalle123

User
Hallo Eckehard, Markus.

Also 2 x ADXL 345 auf nen 1602 ist sicher "too much". ;) Also wenn es einfach sein soll, dann nimm ein 2004.

Vielleicht Eckehard, postet du einfach mal deinen Code hier, interessiert sicher nicht nur Markus.

Markus, zu deinem Vorschlag "Nextion".

Das sind zwei Bilder eines anderen Projekt aus nem anderen Forum. Prop wuchten mit ADXL 345, Arduino Mega und NEXTION 3,5" TFT LCD TOUCH Display.

15.jpg13.jpg

Hat jetzt nicht direkt mit "Ruderwegmessung" zu tun. Nur meine persönliche Erfahrung mit Nextion.

- Von den Farben krieg ich Augenkrebs

- Das Bedienen über touch war mir nur mit einem speziellen Stift möglich, vielleicht hab ich zu dicke Finger und auch nicht konsistent.

- Das Einarbeiten in Nextion ist (für mich) was für l a n g e Wintertage. Das mach ich nicht mal eben so nebenbei.

Aber insgesamt, schön, das es hier weiter geht. Hätte ich nicht gedacht!

Ich werde zum Kalibrierern der ADXL 345 später noch was schreiben. Denke, der Begriff "Kalibrierung" wird manchen abschrecken. Sollte man besser "Abgleich" nennen. Hab da mal was rausgekramt.

Grüße KH
 

kalle123

User
Hier kommt momentan ein ziemliches Gewitter runter, da kann ich noch was zum ADXL 345 Abgleich sagen.

Hier mein "Abgleichstand" ;)

Ein Doppel T (geleveld) von irgendeiner Baustelle und ein rechtwinkliger Alu Klotz aus nem Alu Walzwerk.

IMG_20170718_172259.jpg

Sensor auf nen winklig gefrästen Stück mit Klebeband fixiert.

IMG_20170718_170601.jpg

Damit und dem Programm danach alle 3 Achsen hintereinander einmal in + und - Messrichtung anlegen.

Geht los (flach aufgelegt) mit Z-Achse + 229

Dann rumgedreht Z-Achse - 269

Danach kommt bei mir X-Achse - 274

usw. usw. Reihenfolge ist egal.

Code:
Sensor #1



SparkFun ADXL345 Accelerometer Breakout Calibration

Send any character to display values.

Accel Minimums: -6  0  0
Accel Maximums: 0  5  229

Send any character to display values.

Accel Minimums: -6  0  -269
Accel Maximums: 0  5  229

Send any character to display values.

Accel Minimums: -274  0  -269
Accel Maximums: 0  5  229

Send any character to display values.

Accel Minimums: -274  -270  -269
Accel Maximums: 0  5  229

Send any character to display values.

Accel Minimums: -274  -270  -269
Accel Maximums: 261  5  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  5  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  5  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Accel Minimums: -275  -270  -269
Accel Maximums: 261  278  229

Send any character to display values.

Wenn man durch ist, kleine Tabelle anlegen und die gefundenen Werte eintragen.

IMG_20170719_101343.jpg

Geh mal die erste Zeile durch. Sensor #1 - X-Achse

261 + (-275) = -14

-14 / 2 = -7 DAS IST DER OFFSET


Nun der GAIN

261 + |-275| = 536

dann 536 / 255 = 2.102 (255 entspricht 1g oder 9.81m/s²)

dann nochmal 2.102 / 0.5 = 1.051 DAS IST DER GAIN für DEN Sensor und DIE Achse.

Werte in das sketch an der Stelle Offset und Gain eintragen, kompilieren und auf den Arduino flashen. Feddig!

Denk schon, das sich der recht kleine Aufwand zur Verbesserung der Genauigkeit lohnt.

Grüße KH
 

Eckehard

User
2 ADXL345 an einem Arduino, I2CDev Library, HowTo...

2 ADXL345 an einem Arduino, I2CDev Library, HowTo...

Hallo Markus,

hier der Code, auf die relevanten Zeilen eingekürzt:

Code:
#include "Wire.h"     // Für I2C Bus
#include <LiquidCrystal.h>      // für das LCD
#include <SainsmartKeypad.h>     // fuer die Keys auf dem Keypad Shield
#include <ADXL345.h>     // fuer das Breackkout Board 
#include <I2Cdev.h>     // fuer das Breackkout Board 

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
SainsmartKeypad keypad(0);
ADXL345 adxl1(0x53);  
ADXL345 adxl2(0x1D);

...



void setup() {
  Wire.begin();
  lcd.begin (16, 2);            // for 16 x 2 LCD module
  lcd.setBacklightPin(backLight, lightLevel); 

...

  adxl1.initialize();
  adxl2.initialize();
...
}

void loop() {
...
  adxl1.getAcceleration(&x1, &y1, &z1); // read the accelerometer values and store them in variables
  x1g = 0.00385 * (x1 - offsetX1) / gainX1; // 0.00385 to convert the raw data to Gs
  y1g = 0.00385 * (y1 - offsetY1) / gainY1; // offset and gain for calibration
  z1g = 0.00385 * (z1 - offsetZ1) / gainZ1;

  adxl2.getAcceleration(&x2, &y2, &z2); // read the accelerometer values and store them in variables
  x2g = 0.00385 * (x2 - offsetX2) / gainX2; // 0.00385 to convert the raw data to Gs
  y2g = 0.00385 * (y2 - offsetY2) / gainY2; // offset and gain for calibration
  z2g = 0.00385 * (z2 - offsetZ2) / gainZ2;
...
}


Bitte beachte
1. ...das die Methoden bei der Verwendung von I2Cdev Library anders heissen als im Orginal Code und den Libraries von Kalle:
Also:

"initialize" statt "powerOn"
"getAcceleration" statt "readAccel"

2.... außerdem, dass ein Sensor auf die I2C Adress 0x1D konfiguriert werden muss (Pin SDO an VCC legen, siehe Link von Kalle)

Ich denke an dem Code Beispiel kannst Du ablesen wie es funktionieren kann....

Ich finde, die I2CDev und auch die zugehörige ADXL345 sind ne feine Sache, der spezifische Code der mit den ADXL345 Sensoren spricht ist wirklich recht übersichtlich....

Den vollständigen Sketch stelle ich irgendwann mal rein, wenn er wirklich "fertig" ist. Da gehört ja auch die Liste der Hardware dazu, die ja doch von Kalle 's Appetizer abweicht...
Vielleicht kann man ja sogar den "Kalibrierungslauf" mit integrieren....
Die Anzeige Routine ist noch nicht "schick" genug, und die Anzeige "flackert" etwas....
Umschaltung von Throw nach Sekante ist noch nicht wählbar (Toggle Button....)
Das muss ich versuchen zu ändern...

IMHO reichen 16 Zeichen in 2 Zeilen für diese spezielle Anwendung völlig.....

Grüße und viel Spaß beim Basteln....und vielen Dank an Kalle für die Zeilen zum Thema Kalibrierung!

Eckehard
 

kalle123

User
Hallo Eckehard.

Wie ich damit angefangen hab, habe ich mir um so Sachen wie 2 Sensoren auf einem Arduino keine Gedanken gemacht.

Du hast dich an den (etwas verwirrenden) Plan aus dem Link gehalten?

two_adxls_03.jpg

Da ist ein Dreher in der hex Adresse vom rechten Senor und die Pull-up Widerstände müssen wohl auch nicht sein ....

Sind schon auf dem GY-291 mit drauf.



Und meine beiden Meßkisten sind ja nun fertig.

Bildschirmfoto_2017-07-19_19-11-46.jpg

Hab die Teile nummeriert #1 und #2 (wegen des Abgleichs) und auf der Pappabdeckung des displays die Anschlussbelegung mit drauf. Man vergisst schnell, wo was ist ;)

Die dupont Buchsen an den Sensor Kabeln hab ich inzwischen auch vernünftig verpressen können. Mit meiner Nessel Zange war das bei den kleinen Litzen nix und erst mit der Engineer PA-09 aus Japan geht das einwandfrei. (War ein klasse Hinweis hier im Forum)

Eckehard, meines Erachtens kannst du die Sekantenmessung weglassen. Hat wohl im Modellbau keine Bedeutung und verwirrt nur.

Zum Abgleich. Ich hab das noch mal versucht, einfach und verständlich darzustellen. Es tauchte ja immer wieder hier im thread die Frage nach der Genauigkeit auf. Und die doku von Analog Devices kann manchmal etwas abschrecken.

Gruß KH
 

Eckehard

User
Hallo Kalle,

die Idee zwei Sensoren zu verwenden, machen das RC-Meter imho erst "rund".
Mit "rund" meine ich: Man kann zwei Klappen sehr einfach auf gleiche Werte einstellen.

Beispiel:
Ich stelle mir das folgendermaßen vor:

- Man klemmt die Sensoren z.B. an die linke und rechte Queruderklappe...
- gibt die Klappentiefe am RC-Meter ein
- stelle das RC-Meter auf Null
- nun stellt man gemäß der Anleitung des Modells
am Sender den gewünschten positiven Winkel/Ausschlag am linken QR ein (Anzeige im RC-Meter links: Ausschlag und Winkel)
- nun stellt man
am Sender den gleichen positiven Winkel am rechten QR ein (Anzeige im RC-Meter rechts: Winkel)

Damit hat man beide Winkel / Ausschläge gleich eingestellt.

Ich finde das ist der Aufwand wert.....

Wegen I2C Bus habe ich mich eher am Schaltplan des Breakout Bords orientiert... Ja die Breakout Boards haben bereits 4k7 als PullUps an den I2C Leitungen, das macht bei zwei Sensoren so um die 2k3 pro Leitung....
Werden auf den gleichen I2C Bus noch mehr Breakout Bords mit internen PullUps gehängt, sollte man sicherstellen, daß wirklich alle Slaves noch sicher kommunizieren können. Also ggf. die internen PullUps ablöten....
Der SDO ist per 4k7 an Gnd, was I2C Device Adresse (0x53) entspricht. Klemmt man SDO an VCC dann hat der Sensor I2C Device Adresse (0x1D). Das passt eigentlich zur Doku von AD... Und auch zu meinen Erfahrungen mit dem I2CScanner Sketch. Einen Dreher seh ich da nicht?

Das mit der Umschaltung auf Sekantenmessung sehe ich eher als Herausforderung, da ich die Umschlatung mit einem Taster (monostabil) hinbekommen möchte...

Jetzt werde ich mich mal ans Kalibrieren machen.... :-)

Grüße
Eckehard
 
Ansicht hell / dunkel umschalten
Oben Unten