Werte in m/s² umrechnen (Beschleunigungssensor)

Hallo Leute!

Ich versuche momentan, die Datenausgabe meines Beschleunigungssensors in m/s² umzurechnen, habe damit aber irgendwie so meine Schwierigkeiten.

Ich habe bereits alle Werte für die einzelnen Achsen -1G, 0G, +1G gesammelt. Ich weiß nun aber leider nicht, wie ich diese Werte in m/s² umrechnen kann.

Werte meiner Z-Achse:

bei Z= +1G:

Z=714
Y=510
X=520

bei Z= -1G:

Z=304
Y=496
X=509

Kann mir jemand helfen? Eventuell hat jemand bereits Erfahrung oder weiß zufällig, wie man dies machen könnte? :slight_smile:

Liebe Grüße
TikiMaske

1g sind 9,81 m/s^2

Welchen Sensor hast Du?

Grüße Uwe

1g = 9,81 m/s² ist mir bekannt. :slight_smile:

Ich verstehe nur leider nicht, wie ich daraus einen "Skalierungsfaktor" für die Umrechnung der ausgegebenen Werte bekomme.

Den genauen Beschleunigungssensor kann ich leider nicht nennen. Er sitzt auf einem fertigen Shield.
Auf dem Sensor steht Kionix KXR94 51569 0915, ich kann aber leider kein passendes Datenblatt finden. :frowning:

KXR94 Product Brief.pdf

KXR94-1050 Specifications Rev 3.pdf

KXR94 scheint eine Serie zu sein, ich weiß jedoch leider nicht, welchen genau ich habe. :frowning:

TikiMaske:
KXR94 scheint eine Serie zu sein, ich weiß jedoch leider nicht, welchen genau ich habe. :frowning:

Tja...
Das ist natürlich ein Problem.

Aber die sind sich so ähnlich, dass man die konkreten werte doch locker ausmessen kann.
(hoffe ich)

Werte meiner Z-Achse:

Ohne dass du sagst wie das gemessen wurde....naja
Denn ohne stabile Referenz wird das kaum was werden.

An und für sich könnte man für jede Achse eine 2 Punkt Kalibrierung durchziehen.
Dann hat sich das mit dem Berechnen auch erledigt.

Z=714
Y=510
X=520

Ca 510 für 0G
Ca 710 für 1G
Das zeigt: Eine Differenz von 200 "Punkten" für 1G

Macht 400 für 2G
Also Sensor auf den Kopf drehen, dann würde ich folgendes erwarten:
Z=310
Y=510
X=520
Passt also ganz gut zu deinen Messwerten.

Ohne dass du sagst wie das gemessen wurde....naja

Ich habe die Werte für die Z-Achse gemessen, in dem ich den Sensor erst normal auf den Tisch gelegt habe (Z=+1g) und danach auf den Kopf gedreht (Z=-1g).

Also Sensor auf den Kopf drehen, dann würde ich folgendes erwarten:
Z=310
Y=510
X=520
Passt also ganz gut zu deinen Messwerten.

Ungefähr diese Werte habe ich bereits oben bei Z=-1g gemessen.

Ich bezog mich eher auf die Referenz!
Wenn die wackelt, dann misst du nur Mist.

Ungefähr diese Werte habe ich bereits oben bei Z=-1g gemessen

Sach ich ja ...
Wollte dir mit meinem Rechenbeispiel zeigen, wie einfach es ist, damit umzugehen.

Ich bezog mich eher auf die Referenz!
Wenn die wackelt, dann misst du nur Mist.

Ähm also meine Referenz ist jetzt nicht wirklich die Beste! :smiley:
Präzision bzw. Genauigkeit ist in diesem Fall aber auch nicht wirklich notwendig.

Sach ich ja ...
Wollte dir mit meinem Rechenbeispiel zeigen, wie einfach es ist, damit umzugehen.

Oh entschuldige, da habe ich dich dann falsch verstanden.

Ich schaffe es irgendwie nicht, diese Werte in m/s² umzurechnen.

TikiMaske:
Ich schaffe es irgendwie nicht, diese Werte in m/s² umzurechnen.

Ist das nicht "Dreisatz" ?

Nur nicht mit Bauern, Kartoffeln und Preisen, sondern mit ADC Werten, g und einem Faktor. :wink:

Ist das nicht "Dreisatz" ?

Dreisatz kann ja eigentlich nicht sein, weil ich bei
+1g=+9.81 m/s² = 714 counts
und bei
-1g = -9.81 m/s² = 304 counts
zähle.

Ich würde bei Bearbeitung einer Gleichung mit dem Dreisatz die andere Gleichung außer Acht lassen.
Oder irre ich mich?

TikiMaske:
Dreisatz kann ja eigentlich nicht sein, weil ich bei
Ich würde bei Bearbeitung einer Gleichung mit dem Dreisatz die andere Gleichung außer Acht lassen.
Oder irre ich mich?

Natürlich brauchst du beide Punkte/Gleichungen um einen beliebigen Messwert in g umzurechnen,
sonst wüsstest du nicht wo der Nullwert ist.

Wie wäre es mit 9.81 * (Messwert - 509) / 205 ?

Wie wäre es mit 9.81 * (Messwert - 509) / 205 ?

Vielen Dank!
Kannst du das evtl erklären, ich kann es mir nicht ganz herleiten.
Ich probiere es aber gleich mal aus! :slight_smile:

Wenn du tatsächlich selbst versuchen würdest die Werte ineinander umzurechnen,
kämest du wohl auf ein ähnliches Ergebnis.

Und nein, ich werde lineare Funktionen nicht erklären.

Wenn du tatsächlich selbst versuchen würdest die Werte ineinander umzurechnen,
kämest du wohl auf ein ähnliches Ergebnis.

Alles klar, dann versuche ich das mal.

Und nein, ich werde lineare Funktionen nicht erklären.

Ok schade, aber trotzdem danke!

Wenn du es selber rechnen möchtest, dann schaue dir die Geradengleichung an.

Alternativ:

// Funktion aus der Referenz geklaut und modifiziert.
float map(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}




void setup() 
{
 Serial.begin(9600);
}

void loop() 
{
  float x = map(float(analogRead(A0)),300.0,700.0,-1.0,1.0); // Werte für -1G und +1G eintragen
 // float x = map(float(random(100,900)),300.0,700.0,-1.0,1.0); // TestWerte von -2G bis +2G generieren.
  Serial.println(x);
}

Wenn du es selber rechnen möchtest, dann schaue dir die Geradengleichung an.

Ich habe mal eine Geradengleichung aufgestellt:

y = 0.04784 * x - 24.36

Muss ich mal schauen, wie genau ich das in meinen Code einbringen kann.

Alternativ:

// Funktion aus der Referenz geklaut und modifiziert.

float map(float x, float in_min, float in_max, float out_min, float out_max)
{
  return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}

void setup()
{
Serial.begin(9600);
}

void loop()
{
  float x = map(float(analogRead(A0)),300.0,700.0,-1.0,1.0); // Werte für -1G und +1G eintragen
// float x = map(float(random(100,900)),300.0,700.0,-1.0,1.0); // TestWerte von -2G bis +2G generieren.
  Serial.println(x);
}

Den Code werde ich gleich mal ausprobieren, der übersteigt noch etwas meine Kenntnisse :smiley:

Vielen Dank für eure Hilfe! Ich bin noch ziemlich neu in der Welt der Elektrotechnik (und Mikrocontroller) und tue mich manchmal noch etwas schwer.

Liebe Grüße
TikiMaske