Arduino MEGA 2560 mit WMP+ und BMA020

loby

Neuer Benutzer
#1
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.
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.
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
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
 

Lonestar78

Erfahrener Benutzer
#2
Hi,

sieht doch ganz gut aus soweit.
Ändere doch mal
Serial.print((unsigned int)accRead(X_OUT1), BIN);
in
Serial.print((unsigned int)accRead(X_OUT1));

Dann wirds auch lesbarer für Ottonormalmenschen.....
 

loby

Neuer Benutzer
#3
Hallo Lonestar78,
Ich habe das mal gemacht und das Ergebnis sieht jetzt so aus:

Code:
X: 1      8
Y: 65      247
Z: 193      53
X: 193      7
Y: 129      247
Z: 1      54
X: 1      8
Y: 1      247
Z: 65      54
X: 1      8
Y: 65      247
Z: 193      53
X: 65      8
Y: 1      247
Z: 1      54
X: 193      7
Y: 129      247
Z: 193      53
X: 193      7
Y: 65      247
Z: 193      53
X: 193      7
Y: 65      247
Z: 1      54
X: 1      8
Y: 65      247
Z: 1      54
X: 1      8
Y: 129      247
Z: 1      54
X: 193      7
Y: 65      247
Z: 193      53
X: 1      8
Y: 65      247
Z: 129      54
X: 1      8
Y: 65      247
Z: 193      53
X: 1      8
Y: 65      247
Z: 193      53
X: 1      8
Y: 1      247
Z: 65      54
Man kann jetzt zumindest sicher sehen, dass der Sensor Ergebnisse liefert und die sich auch ändern, wenn man ihn bewegt. Leider stehe ich trotzdem noch auf dem Schlauch begzl.
- warum zappeln die Daten so obwohl in den Daten oben der Sensor nicht bewegt wurde
- wie lese ich diese Daten? (Sorry, aber ich komme mit dem Datenblatt nicht so gut zurecht, die Übung fehlt)

Vielen Dank
Gruss
loby
 

loby

Neuer Benutzer
#4
Hier mal ein Link zu einem Video meines Aufbaus. Da ich aber Daten erhalte scheint es nicht an dem Aufbau zu liegen, oder? Die andern Kabel gehen zum ESC, zum URM37 und zum Oszi. Alles ist aber aus.

http://youtu.be/vmuExqRfz6Q

Gruss,
loby
 

ApoC

Moderator
#5
Also ich weiss nicht, warum du das Rad neu erfinden willst. Multiwii Code ist fertig und laeuft auch problemlos auf deinem Mega. Sensoren an den I²C, Seriellen Bus und gut is.

Da muss man nicht rumwundern, weil man die Ausgaben des BMA nicht versteht. Dein BMA funktioniert nach deiner Liste prächtig.
 

loby

Neuer Benutzer
#6
Hi ApoC,
das mag ja sein, wenn man als Ziel das Fliegen hat und die Teile "einfach" zusammen schraubt und die fertige Software draufspielt. Das ist nicht negativ gemeint, ich habe aber vor allem Spass am bauen und testen. Dazu muss man halt die Teile einzeln verstehen. Ja, die Werte sehen soweit gut aus, das habe ich mittlerweile verstanden. Somit mache ich mich jetzt daran den WMP+ und den BMA020 zu kombinieren um meinen Prototypen weiter auszubauen. Vielleicht fliegt er ja mal, aber selbst wenn ich am Ende doch auf die MultiWii komme, der Weg ist bei mir das Ziel.

Vielen Dank an alle für die Hilfe. Vielleicht kommt ja noch ne Frage.
Gruss,
loby
 
FPV1

Banggood

Oben Unten