Hallo Forum, Ich hätte ganz kurz nur mal einige Fragen zum MPU6050, betrieben am Arduino Micro. Misst ein 'Accelerometer', zu Deutsch 'Beschleunigungsmesser', die Drehgeschwindigkeit um die jeweilige Achse, oder die Bewegungsgeschwindigkeit, d.H. z.B. eine Links oder Rechts - Bewegung um die Achse? Mein MPU6050 misst nämlich die Drehgeschwindigkeit um die Achsen, wenn ich z.B. den MPU um die Hochachse drehe, schlägt der Wert aus, bis ich aufhöre zu drehen. Ist das richtig, was der macht? Mir kommt das so komisch vor... Warum sollte man die Drehgeschwindigkeit angeben, wenn man schon durch den Gyrometer die Grad-Anzeige hat... LG BenW
Hi, der MPU6050 ist eine Motion Processing Unit. Es beinhaltet ein Accelerometer (Beschleunigungssensor) und ein Gyroskop (Drehratensensor), das was der MPU ausgibt ist schon richtig, wahrscheinlich liest du einfach den falschen Wert aus, denn deine sonstigen Aussagen sind richtig ;) Schau dir mal das Datenblatt an: https://www.cdiweb.com/datasheets/invensense/MPU-6050_DataSheet_V3%204.pdf Seite 24ff. Du musst nur die richtigen Register setzen & lesen. HTH Chris
Der Beschleunigungssensor misst die Beschleunigung entlang einer Raumachse. Das Gyrometer misst die Drehgeschwindigkeit (Winkelgeschwindigkeit) um eine Raumachse. Dass auch der Beschleunigungssensor bei einer Drehung ausschlägt, liegt ganz einfach daran, dass es praktisch wohl unmöglich ist, den Sensorchip zu drehen, ohne dass sich auch der Beschleunigungssensor mitbewegt.
Dann hat bei meinem MPU6050 doch was, oder ich komme mit der Programmierung nicht zurecht: Der Beschleunigungsmesser(Accelerometer) zeigt keine Bewegung/Beschleunigung um eine Raumachse an, sondern die Drehung in Grad um die jeweilige Achse... Stimmt folgender Code?:
1 | #include<Wire.h> |
2 | |
3 | const int MPU_addr=0x68; // I2C address of the MPU-6050 0x68 |
4 | int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ; |
5 | |
6 | |
7 | |
8 | void setup() |
9 | {
|
10 | Serial.begin(9600); |
11 | |
12 | Wire.begin(); |
13 | Wire.beginTransmission(MPU_addr); |
14 | Wire.write(0x6B); // PWR_MGMT_1 register |
15 | Wire.write(0); // set to zero (wakes up the MPU-6050) |
16 | Wire.endTransmission(true); |
17 | }
|
18 | |
19 | |
20 | |
21 | void loop() |
22 | {
|
23 | |
24 | MPU(); |
25 | }
|
26 | |
27 | |
28 | |
29 | |
30 | void MPU() |
31 | {
|
32 | Wire.beginTransmission(MPU_addr); |
33 | Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H) |
34 | Wire.endTransmission(false); |
35 | Wire.requestFrom(MPU_addr,14,true); // request a total of 14 registers |
36 | AcX=Wire.read()<<8|Wire.read(); // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L) |
37 | AcY=Wire.read()<<8|Wire.read(); // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L) |
38 | AcZ=Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L) |
39 | Tmp=Wire.read()<<8|Wire.read(); // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L) |
40 | GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L) |
41 | GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L) |
42 | GyZ=Wire.read()<<8|Wire.read(); // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L) |
43 | |
44 | Serial.print("Accelerometer (Bewegungsgeschwindigkeit:)"); |
45 | Serial.print("\t"); |
46 | Serial.print("\t"); |
47 | Serial.print(AcX); |
48 | Serial.print("\t"); |
49 | Serial.print(AcY); |
50 | //Serial.print("\t");
|
51 | //Serial.print(AcZ);
|
52 | Serial.print("\t"); |
53 | Serial.print("\t"); |
54 | Serial.print("\t"); |
55 | Serial.print(Tmp/340.00+36.53); //equation for temperature in degrees C from datasheet |
56 | Serial.print("\t"); |
57 | Serial.print("\t"); |
58 | Serial.print("\t"); |
59 | Serial.print("Gyrometer (Drehgeschwindigkeit in */Sekunde:)"); |
60 | Serial.print("\t"); |
61 | Serial.print("\t"); |
62 | Serial.print(GyX); |
63 | Serial.print("\t"); |
64 | Serial.print(GyY); |
65 | Serial.print("\t"); |
66 | Serial.println(GyZ); |
67 | delay(333); |
68 | }
|
Chris R. schrieb: > Schau dir mal das Datenblatt an: > https://www.cdiweb.com/datasheets/invensense/MPU-6050_DataSheet_V3%204.pdf Ein Datenblatt, wo alles drin steht. Wie geil ist das denn. SCNR
OK, erstmal danke für das Datenblatt. Die Frage ist nur: Was fange ich damit an, beziehungsweise wie setze ich auf auf einen Sketch auf den Arduino um? Habe bereits jegliche Optionen, Libraries und Examples aus dem Internet probiert, trotzdem gibt mir der Accelerometer immer nur die Drehung um eine Achse aus. Ganz ehrlich, bin ich zu dumm dafür? Danke schon im Voraus ;)
Benjamin W. schrieb: > Habe bereits jegliche Optionen, Libraries und Examples aus dem Internet > probiert, trotzdem gibt mir der Accelerometer immer nur die Drehung um > eine Achse aus. Ähm - kann es evtl. sein, daß Du die vom Sensor (korrekt) gemessene Erdbeschleunigung als "Drehung um die Achse" interpretierst? D.h. Du erwartest (fälschlicherweise) alle Werte Ax,Ay,Az = 0, weil Du den Sensor ja nicht bewegst? Beim Drehen des Sensors wandert der gemessene Wert der Erdbeschleunigung natürlich um die Achsen, je nachdem, welche dann gerade nach unten zeigt...
Hallo nochmal, Bei einer linearen Bewegung zeigt mein MPU leider überhaupt keine Werte an, nur bei einer Drehung. Lassen wir jetzt mal den Gyrometer aus dem Spiel, ich weiß bereits, für was dieser gut ist. In den beiden Bildern ist es nochmal verdeutlicht, was der MPU macht: Wenn ich ihn nach dem Einschalten um die X-Achse nicht bewege, zeigt diese null an. Erst wenn ich ihn um die Achse bewege, wandert auch der Wert mit. Ähnlich einem Wendezeiger, oder, besser ausgedrückt, einem Winkelmesser zur Horizontalen. Gruß BenW
Benjamin W. schrieb: > Ähnlich einem Wendezeiger, oder, besser ausgedrückt, einem Winkelmesser > zur Horizontalen. Eben, der Winkel, den der Sensor misst, ist der Winkel der Erdbeschleunigung - die zieht immer nach unten! Was für eine Beschleunigung soll der Sensor denn messen, wenn Du ihn mit konstanter Geschwindigkeit in der Horizontalen bewegst? Wenn Du in einem ICE sitzt, der mit 250 km/h über gerade Gleise rauscht, und machst die Augen zu, warum fühlst Du dich da z.B. nicht mehr beschleunigt, als im Wohnzimmer auf der Couch?
Klassische Verwechslung der Begriffe "Beschleunigung" und "Bewegung"? Um Thomas' Einwurf noch mal deutlicher zu machen. Accelerometer heißt Beschleunigungsmesser. Nicht Bewegungsmesser.
Hier gibts ein fertiges Projekt mit Arduino-Sketch und auf Wunsch mit Processing-Visualisierung der Drehungen/Bewegungen. Habe die Sketchs selbst mal ausprobiert. Liefen super. Teste den Sketch einfach mal. Wenn er läuft musst du in deinem Code nochmal auf Fehlersuche gehen. Wenn nicht ist es vll ein Problem der Lötstellen (Chinanachbau o.ä.)... http://www.geekmomprojects.com/gyroscopes-and-accelerometers-on-a-chip/
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.

