Arduino gyro inakkurat?

2 Antworten

Sind die rohen ax usw. Werte denn richtig?

Deine ganze Rechnung mit den „Mittelwerten“ macht für mich keinen Sinn. Dein neuer Wert hat so ja einen extrem großen Einfluss und man hat quasi keine Glättung

Die Werte sind ja aktuell alle
Werte = (alter_Wert + (neuer Wert * 10000)) / 10000

Und welche Bibliothek nimmt du genau?

Die https://github.com/bolderflight/bmi088-arduino welche ich auf den ersten Blick gefunden haben muss man etwas anders benutzen. Da am besten mal die Beispiele ausprobieren ob die richtig funktionieren

Biberjumper 
Fragesteller
 10.03.2023, 10:56

Hey. Ich benutze die Seed Library da die andere für mich nicht funktioniert hat: https://github.com/Seeed-Studio/Grove_6Axis_Accelerometer_And_Gyroscope_BMI088/archive/master.zip
Die Rohen Werte sind auch absolut ungenau, deshalb habe ich eine Glättung versucht (und wie es aussieht gescheitert)

0
LisamagPferde04  10.03.2023, 12:24
@Biberjumper

Bringt es was wenn du den Delay höher stellst?
Je nachdem wie der BMI konfiguriert ist machst du eventuell zu viele reads obwohl die Daten noch nicht bereit sind.
In dem ursprünglichen Beispiel nehmen die ja einen Delay von 50 und nicht 1

0
Biberjumper 
Fragesteller
 10.03.2023, 12:27
@LisamagPferde04

Ich hatte den Delay auf 100ms in den ersten tests. Leider hat das nichts gebracht :/

0

Du glättest nicht 10000 Werte, sondern Du zählst einen WErt 10000x dazu und dann teilst Du durch 10000.

Mach eine FIFO und davon den Durchschnitt. Aber je nach Arduino wirst Du gar keine 10000 glätten können, so viel Speicher hat der nicht. Nimm mal 10 oder so.

Biberjumper 
Fragesteller
 10.03.2023, 10:57

Oh stimmt. Das andere Problem ist dass meine Rohen Daten auch komplett abweichen, deshalb habe ich eine "Glättung erst versucht"

0
Biberjumper 
Fragesteller
 10.03.2023, 17:01
@W00dp3ckr

Wenn er sich 0 bewegt und flach auf dem Tisch liegt

68.30(ax), -1.46(ay), 1005.62(az), 3.30(gx), -1.22(gy), 1.22(gz),

68.12(ax), -2.38(ay), 1007.63(az), -7.08(gx), 2.08(gy), -1.95(gz),

68.12(ax), -2.38(ay), 1007.63(az), -3.78(gx), -0.98(gy), -3.66(gz),

64.09(ax), -2.75(ay), 1005.43(az), 0.12(gx), 1.10(gy), 0.61(gz),

64.09(ax), -2.75(ay), 1005.43(az), 0.73(gx), 1.10(gy), -4.76(gz),

64.64(ax), -2.20(ay), 1004.88(az), 6.10(gx), -4.15(gy), 0.00(gz),

65.92(ax), -0.18(ay), 1003.42(az), 7.57(gx), 4.64(gy), 4.27(gz),

65.92(ax), -0.18(ay), 1003.42(az), -5.00(gx), -5.49(gy), 3.17(gz),

65.55(ax), -1.65(ay), 1003.78(az), -0.12(gx), 5.49(gy), 10.25(gz),

65.55(ax), -1.65(ay), 1003.78(az), -1.83(gx), -2.44(gy), -2.44(gz),

65.73(ax), -2.56(ay), 1003.42(az), 1.59(gx), 1.83(gy), 0.49(gz),

65.73(ax), -2.56(ay), 1003.42(az), -1.22(gx), -4.39(gy), -0.73(gz),

65.37(ax), -1.28(ay), 1005.43(az), -2.44(gx), 1.34(gy), -5.98(gz),

67.57(ax), -1.10(ay), 1005.62(az), -0.85(gx), 2.20(gy), -5.25(gz),

0
W00dp3ckr  10.03.2023, 19:04
@Biberjumper

Das sollen Doubles sein? Ich denk da ist was sehr falsch. Such mal auf Youtube, wie so ein Kunstflieger bei 10g im Gesicht aussieht :-D.

0
Biberjumper 
Fragesteller
 10.03.2023, 22:06
@W00dp3ckr

Also das ist was der Sensor mir als Rohdaten bei folgendem Code liefert:

#include "BMI088.h"

#include <Wire.h>

float ax = 0, ay = 0, az = 0;

float gx = 0, gy = 0, gz = 0;

BMI088 bmi088( 0x19, 0x69 );

void setup(void) {

 Serial.begin(115200);

 Wire.begin();

 while (!Serial);

 Serial.println("BMI088 Raw Data");

 while (1) {

   if (bmi088.isConnection()) {

   bmi088.initialize();

   Serial.println("BMI088 is connected");

   break;

 } else {

   Serial.println("BMI088 is not connected");

 }

   delay(2000);

 }

}

void loop(void) {

   bmi088.getAcceleration(&ax, &ay, &az);

   bmi088.getGyroscope(&gx, &gy, &gz);

   Serial.print(ax);

   Serial.print("(ax), ");

   Serial.print(ay);

   Serial.print("(ay), ");

   Serial.print(az);

   Serial.print("(az), ");

   Serial.print(gx);

   Serial.print("(gx), ");

   Serial.print(gy);

   Serial.print("(gy), ");

   Serial.print(gz);

   Serial.print("(gz), ");

   Serial.println();

0
Biberjumper 
Fragesteller
 10.03.2023, 22:23
@W00dp3ckr

Hab ich. Deshalb bin ich hier. Da find ich nix was mir hilft

0
W00dp3ckr  10.03.2023, 22:38
@W00dp3ckr

also ich kapiere es. Die Schwankungen sind effektiv klein. Das Objekt liegt schief auf dem Tisch. 1000 entspricht ca 1g.

0
Biberjumper 
Fragesteller
 11.03.2023, 01:38
@W00dp3ckr

981 az bedeutet dass es gerade auf dem tisch liegt und 1g auf den sensor in der z achse wirken oder wie? Also muss ich die ganzen a werte einfach durch 981teilen? um die G Kraft zu bekommen?

0
W00dp3ckr  11.03.2023, 08:42
@Biberjumper

Ich würde sagen 1000 ist ungefähr 1g. Aber halt nicht ganz genau. Und die gs sind die Rotation pro Sekunde. Und das scheint ja wohl auch an der Nachweisgrenze zu sein.

0