|
Verkabelungsbeschreibung ist am ende dieses Blogs. |
Bereits Anfang des Jahres habe ich eine Lösung in C# und .NET Micro Framework geschrieben. Ursprünglich habe ich die Lösung aus der in C++ geschriebenen Library portiert (Library für Arduino). Zuvor suchte ich nach einem kürzeren und funktionalem Beispiel, aber ohne Erfolg. Da ich nun selbst relativ gut mit dem Sensor vertraut bin, konnte ich ein kürzeres Beispiel für den Arduino schreiben.
#include <Wire.h> #define sensor_address 0x68 void setup() { // 9600 Baut reichen zum Betrachten aus. Serial.begin(9600); Wire.begin(); delay(1000); // Powermanagement aufrufen // Sensor schlafen und Reset, Clock wird zunächst von Gyro-Achse Z verwendet Serial.println("Powermanagement aufrufen - Reset"); SetConfiguration(0x6B, 0x80); // Kurz warten delay(500); // Powermanagement aufrufen // Sleep beenden und Clock von Gyroskopeachse X verwenden Serial.println("Powermanagement aufrufen - Clock festlegen"); SetConfiguration(0x6B, 0x03); delay(500); // Konfigruation aufrufen // Default => Acc=260Hz, Delay=0ms, Gyro=256Hz, Delay=0.98ms, Fs=8kHz Serial.println("Konfiguration aufrufen - Default Acc = 260Hz, Delay = 0ms"); SetConfiguration(0x1A, 0x00); // Leerzeichen Serial.println(""); } void loop() { byte result[14]; // Anfangs Adresse von Beschleunigungssensorachse X result[0] = 0x3B; // Aufruf des MPU6050 Sensor Wire.beginTransmission(sensor_address); // Anfangsadresse verwenden. Wire.write(result[0]); Wire.endTransmission(); // 14 Bytes kommen als Antwort Wire.requestFrom(sensor_address, 14); // Bytes im Array ablegen for(int i = 0; i < 14; i++) { result[i] = Wire.read(); } // Zwei Bytes ergeben eine Achsen Wert und könenn // per Bit Shifting zusammengelegt werden. // Beschleunigungssensor int acc_X = (((int)result[0]) << 8) | result[1]; int acc_Y = (((int)result[2]) << 8) | result[3]; int acc_Z = (((int)result[4]) << 8) | result[5]; // Temperatur sensor int temp = (((int)result[6]) << 8) | result[7]; // Gyroskopesensor int gyr_X = (((int)result[8]) << 8) | result[9]; int gyr_Y = (((int)result[10]) << 8) | result[11]; int gyr_Z = (((int)result[12]) << 8) | result[13]; // Ausgabe Serial.print("ACC X:\t"); Serial.print(acc_X); Serial.print("\t"); Serial.print("Y:\t"); Serial.print(acc_Y); Serial.print("\t"); Serial.print("Z:\t"); Serial.print(acc_Z); Serial.print("\t"); Serial.print("Temperatur:\t"); Serial.print(temp); Serial.print("\t"); Serial.print("Gyroskope X:\t"); Serial.print(gyr_X); Serial.print("\t"); Serial.print("Y:\t"); Serial.print(gyr_Y); Serial.print("\t"); Serial.print("Z:\t"); Serial.print(gyr_Z); Serial.println("\t"); } void SetConfiguration(byte reg, byte setting) { // Aufruf des MPU6050 Sensor Wire.beginTransmission(sensor_address); // Register Aufruf Wire.write(reg); // Einstellungsbyte für das Register senden Wire.write(setting); Wire.endTransmission(); } |
Kurzfassung für den Sensor Aufruf, ohne weitere Library. |
Mit dem Quellcode wird der Sensor mit den Standardwerten initialisiert, so dass die Empfindlichkeit des Gyroskop bei 250°/s und der Beschleunigungssensor bei 2g liegt. Steht der Sensor still auf dem Tisch sollten die Werte für das Gyroskop und den Beschleunigungssensor für X und Y Achse nahe bei 65536 oder 0 liegen. Beschleunigung auf der Z-Achse bei ca. 16000.
|
Ausgabe über dem Arduino Monitor |
Ich hoffe, ich konnte somit dem einen oder anderen mit diesem kleinen Bespiel weiterhelfen. Bei Fragen kann gerne die Kommentarfunktion verwendet werden.
Anschluss Beschreibung:
- Arduino Nano 3.0 – Pin4 –> MPU6050 Pin SDA
- Arduino Nano 3.0 – Pin5 –> MPU6050 Pin SCL
- Arduino Nano 3.0 – Pin5V –> MPU6050 Pin VCC
- Arduino Nano 3.0 – PinGND –> MPU6050 Pin GND
Zuletzt geändert 20.11.2014
Kommentare
danke für den Hinweis.
Ich habe wohl beim bereinigen einen Häckchen zuviel gesetzt. Habe mich schon gewundert, warum heute weniger meine Seite Aufrufen :)
Grüße von
JPL
oft sind es ein Wackelkontakt, oder das nicht richtige Verbinden.
In erster Linie kann ich nur vermuten.
Arduino Uno -> MPU6050
Pin A4(SDA) -> SDA
Pin A5(SCL) -> SCL
Pin 5V -> VCC
Pin GND -> GND
Ich bin mir nicht sicher, aber ich habe in Erinnerung, dass es auch Module gibt, die mit 3,3V Versorgungsspannung funktionieren. Darauf bitte achten.
Dann muss darauf geachtet werden, dass der Serial Monitor auf 9600 Baud gestellt ist.
Ich hoffe ich konnte weiterhelfen. ;)
Grüße von
meiner Welt
/*9600 Baut reichen zum Betrachten aus. */
Serial.begin(9600);
danke für den Hinweis, verdammter Zeilenumbruch. Das ist mir nicht aufgefallen beim hineinkopieren.
Grüße von
meiner Welt
das ist richtig. Von Haus aus, ist immer die Clock von Gyro Z bereits eingestellt.
In diesen Beispiel habe ich das mit reingenommen zur Vollständigkeit, kann aber auch weg gelassen werden, wenn zur Laufzeit keine Änderungen der Internen Clock benötigt wird.
Gruß
Johannes