Probleme mit den Werten der sensoren

R

R1Snake

Neues Mitglied
0
Ich bin aktuell an meiner ersten App für mich selber dran und möchte oft mit dem Motorrad unterwegs bin mir ein paar Werte auf meinem Handy anzeigen lassen.

Das Handy ist an einer Halterung quer am Tacho befestigt.

Nun zu meinen Herausforderungen:

Ich möchte die G Kräfte und den Neigungswinkel vom Handy aktuell ganz einfach in einer Textview ausgeben lassen.

Hierzu habe ich mir bereits 2 Listener erstellt (Accelerometer und Rotation_Vector.

Accelerometer -> G-Kräfte

Hier habe ich im Sensorchanged event mir den Code von Google reinkopiert aber wenn ich meine Werte mit denen von anderen App vergleiche komme ich bei weitem nicht dran:

final double alpha = 0.8;

// Isolate the force of gravity with the low-pass filter.
gravity[0] = alpha * gravity[0] + (1 - alpha) * sensorEvent.values[0];
gravity[1] = alpha * gravity[1] + (1 - alpha) * sensorEvent.values[1];
gravity[2] = alpha * gravity[2] + (1 - alpha) * sensorEvent.values[2];

// Remove the gravity contribution with the high-pass filter.
linear_acceleration[0] = sensorEvent.values[0] - gravity[0];
linear_acceleration[1] = sensorEvent.values[1] - gravity[1];
linear_acceleration[2] = sensorEvent.values[2] - gravity[2];


strfmt = new Formatter(new StringBuilder());


if (linear_acceleration[0] >= 0) {
strfmt = new Formatter(new StringBuilder());
strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[0]);
tv_gfront.setText(strfmt.toString());
tv_gback.setText("0.00");
}
else {
strfmt = new Formatter(new StringBuilder());
strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[0] * -1);
tv_gback.setText(strfmt.toString());
tv_gfront.setText("0.00");
}

if (linear_acceleration[1] >= 0) {
strfmt = new Formatter(new StringBuilder());
strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[1]);
tv_gleft.setText(strfmt.toString());
tv_gright.setText("0.00");
}
else {
strfmt = new Formatter(new StringBuilder());
strfmt.format(Locale.GERMANY, "%5.2f", linear_acceleration[1] * -1);
tv_gright.setText(strfmt.toString());
tv_gleft.setText("0.00");
}

Beim Winkelsensor habe ich das Problem das die Werte ja von 0.00 bis 1.00 gehen, daher habe ich mir gedacht multipliziere ich den Wert * 180 und bekomme den Winkel raus.

Falsch gedacht.. Der Wert passt nicht und wenn ich mein Handy nur in Y Richtung drehe, dann passt sich auch der X Wert an ?!

strfmt = new Formatter(new StringBuilder());
strfmt.format(Locale.GERMANY, "%5.0f", sensorEvent.values[1]*180);
tv_angleRight.setText(strfmt.toString());

Kann mir bei meinem Problem jemand aushelfen?
 
Hallo eigentlich ist bei solchen Berechnungen immer die vergangene Zeit mit einbezogen. Sehe ich bei dir nicht.

Code:
BewegungZurSeite = (float) (BewegungZurSeite + (float) (event.values[2] * ((System.currentTimeMillis()-LetzteZeit)/1000)));
AktuelleLage = (-LageZuBeginn-(BewegungZurSeite/(-0.015896989)))%360;
LetzteZeit=System.currentTimeMillis();
 
Zuletzt bearbeitet:
Das mit der Zeit ist mir neu und weiß auch nicht wie ich das umsetzen soll.

Kannst du mir ein Schnipsel schreiben?
 
Du hast ein Schnipsel.
 
So hab jetzt was rumexperimentiert und habe für den Winkel bereits ne Lösung entwickelt.

Nur mit den G-Kräften hab ich noch was kämpfen. Ich habe meinen code wie du bereits meintest wie folgt angepasst:

public void onSensorChanged(SensorEvent sensorEvent) {

if(System.currentTimeMillis()-lastTime >= 50) {
dif = (System.currentTimeMillis()-lastTime);
dif = dif / 1000;

deltaX = Math.abs(lastX - sensorEvent.values[1]);
deltaY = Math.abs(lastY - sensorEvent.values[1]);
deltaZ = Math.abs(lastZ - sensorEvent.values[2]);

if (deltaX < 0.5)
deltaX = 0;
else{
deltaX = Math.round((deltaX / dif / 9.80665f)*100)/100f;
}


if (deltaY < 0.5)
deltaY = 0;
else
deltaY = Math.round((deltaY / dif / 9.80665f)*100)/100f;
if (deltaZ < 0.5)
deltaZ = 0;
else
deltaZ = Math.round((deltaZ / dif / 9.80665f)*100)/100f;

lastX = sensorEvent.values[0];
lastY = sensorEvent.values[1];
lastZ = sensorEvent.values[2];

lastTime = System.currentTimeMillis();
}
}


Mit delta sortiere ich kleine Abweichungen aus und will alle 50ms die G Kräfte messen. Jedoch bekomme ich manchmal 24G raus was ja nicht stimmen kann
 

Ähnliche Themen

R
  • RalfKahl
Antworten
10
Aufrufe
288
RalfKahl
R
S
Antworten
4
Aufrufe
990
Sempervivum
S
5
Antworten
22
Aufrufe
1.417
590239
5
Zurück
Oben Unten