Hallo, ich frage hier mal[/code], da ich vor lauter Suchen im Netz langsam rissige Augen bekomme und hoffe hier richtig zu sein. Ich habe vor einen Tricopter zu bauen. Diesen aber vorerst ohne shield oder Zusatzbords. Also nach und nach aufbauen und verstehen. Leider hänge ich gerade und möchte Euch fragen, ob evtl. jemand zu hierzu etwas helfen kann:
Meine Tests mit dem BMA020 sind etwas verwirrend. Ich habe den Sensor direkt an meine MEGA angeschlossen, direkt auf 5 Volt und ohne Widerstände. Dazu habe ich ein Sketch gefunden mit dem ich das mal getestet habe.
Y: 1 11111000
Z: 1000001 110110
X: 1000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 1000001 111
Y: 10000001 11111000
Z: 1 110110
X: 10000001 111
Y: 10000001 11111000
Z: 1 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 10000001 111
Y: 1 11111000
Z: 1 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1 110110
X: 1000001 111
Y: 1000001 11111000
Z: 1 110110
X: 10000001 111
Y: 10000001 11111000
Z: 1 110110
X: 1000001 111
Y: 1000001 11111000
Meine Tests mit dem BMA020 sind etwas verwirrend. Ich habe den Sensor direkt an meine MEGA angeschlossen, direkt auf 5 Volt und ohne Widerstände. Dazu habe ich ein Sketch gefunden mit dem ich das mal getestet habe.
Code:
#include <Wire.h>
#define ACCELEROMETER 0x38
#define X_OUT1 0x02
#define X_OUT2 0x03
#define Y_OUT1 0x04
#define Y_OUT2 0x05
#define Z_OUT1 0x06
#define Z_OUT2 0x07
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Serial.print("X: ");
Serial.print((unsigned int)accRead(X_OUT1), BIN);
Serial.print (" ");
Serial.print((unsigned int)accRead(X_OUT2), BIN);
Serial.println();
Serial.print("Y: ");
Serial.print((unsigned int)accRead(Y_OUT1), BIN);
Serial.print (" ");
Serial.print((unsigned int)accRead(Y_OUT2), BIN);
Serial.println();
Serial.print("Z: ");
Serial.print((unsigned int)accRead(Z_OUT1), BIN);
Serial.print (" ");
Serial.print((unsigned int)accRead(Z_OUT2), BIN);
Serial.println();
delay(100);
}
byte accRead(byte address){
byte val = 0x00;
Wire.beginTransmission(ACCELEROMETER);
Wire.write(address);
Wire.endTransmission();
Wire.requestFrom(ACCELEROMETER, 1);
val = Wire.read();
Wire.endTransmission();
return val;
}
[code]
Es scheint als ob ich Verbindung zum Sensor habe und auch Daten erhalte, es sieht für mich aber confus aus, zumal die Werte springen obwohl ich den sensor nicht bewege.
Z: 1000001 110110
X: 1000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 1000001 111
Y: 10000001 11111000
Z: 1 110110
X: 10000001 111
Y: 10000001 11111000
Z: 1 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1000001 110110
X: 10000001 111
Y: 1 11111000
Z: 1 110110
X: 10000001 111
Y: 1000001 11111000
Z: 1 110110
X: 1000001 111
Y: 1000001 11111000
Z: 1 110110
X: 10000001 111
Y: 10000001 11111000
Z: 1 110110
X: 1000001 111
Y: 1000001 11111000
Code:
Meine Frage nun an Euch: Hat jemand Erfahrung mit dem direkten Ansprechen des Sensor mit einem Arduino MEGA? Oder kann ich vielleicht die Software vom MultiWii einfach mal auf den Arduino laden und damit testen ob der Sensor die Lage richtig ausgibt? Als erstes muss ich wissen ob der auf funzt. Wenn ich das weiss kann ich mich an die Interpretation der Werte machen. Meine Versuche aus dem MultiWii Code diesen teil des BMA020 zu extrahieren und solo zu verwenden sind bisher nicht sehr gut verlaufen. Es zeigt mir zwar, dass der Weg zu einem Code, der einen Copter so steuern kann sehr weit ist, zumal ich vieles in dem Code noch nicht verstehe, aber ich will das versuchen, Schritt für Schritt die Teile einzeln zu testen und dann zu kombinieren. Ob ich am Ende zu dem komme was ich will ist eine andere Frage, aber dann kann ich immernoch auf "fertige" Lösungen zurückkommen (das ist nicht negativ gemeint).
Vielen Dank
Gruss,
loby