Probleme mit den Werten der sensoren – Android-Hilfe.de
Jetzt kostenlos registrieren: Mitglieder surfen ohne Werbung!

Probleme mit den Werten der sensoren

  • 4 Antworten
  • Neuester Beitrag
Diskutiere Probleme mit den Werten der sensoren im Android App Entwicklung im Bereich Betriebssysteme & Apps.
R

R1Snake

Neues Mitglied
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?
 
J

jogimuc

Stammgast
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:
R

R1Snake

Neues Mitglied
Das mit der Zeit ist mir neu und weiß auch nicht wie ich das umsetzen soll.

Kannst du mir ein Schnipsel schreiben?
 
J

jogimuc

Stammgast
Du hast ein Schnipsel.
 
R

R1Snake

Neues Mitglied
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 - Probleme mit den Werten der sensoren Antworten Datum
2
2
19