Rollwinkel eines Motorrads

Hallo zusamm.

Projekt erklärung:
Der MPU-6050 soll mit hilfe des UP501 die Kurvenlage und die Position eines Motorrads auf der SD-Karte speichern.Wunsch programm,mit dem man die Messwerte auf SD-Karte speichern.Hier ist meine gesammte Code
Vielen Dank im Voraus

#include <SoftwareSerial.h>
#include <SPI.h>
#include <SD.h>
#include "Wire.h"
#include "I2Cdev.h"
#include "MPU6050.h"

const int chipSelect = 4;
char GPS;
MPU6050 mpu;
int16_t ax, ay, az;
int16_t gx, gy, gz;
SoftwareSerial mySerial(2, 3); // RX, TX ... the 10 is what matters based on my suggested wiring above
#define PMTK_SET_NMEA_UPDATE_1HZ  "$PMTK220,1000*1F"
#define PMTK_SET_NMEA_UPDATE_5HZ  "$PMTK220,200*2C"
#define PMTK_SET_NMEA_UPDATE_10HZ "$PMTK220,100*2F"

// turn on only the second sentence (GPRMC)
#define PMTK_SET_NMEA_OUTPUT_RMCONLY "$PMTK314,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29"
// turn on ALL THE DATA
//#define PMTK_SET_NMEA_OUTPUT_ALLDATA "$PMTK314,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0*28"
void setup()
{
 Wire.begin();
 Serial.begin(115200);
 Serial.println("Adafruit MTK3329 NMEA test!");

 Serial.print("Initializing SD card...");
 // see if the card is present and can be initialized:
 if (!SD.begin(chipSelect)) {
   Serial.println("Card failed, or not present");
   // don't do anything more:
   return;
 }
 Serial.println("card initialized.");
 Serial.println("Initialize MPU");
 mpu.initialize();
 Serial.println(mpu.testConnection() ? "Connected" : "Connection failed");



 // 9600 NMEA is the default baud rate
 mySerial.begin(9600);

 // uncomment this line to turn on only the "minimum recommended" data for high update rates!
 mySerial.println(PMTK_SET_NMEA_OUTPUT_RMCONLY);

 // uncomment this line to turn on all the available data - for 9600 baud you'll want 1 Hz rate
 //mySerial.println(PMTK_SET_NMEA_OUTPUT_ALLDATA);

 // Set the update rate
 // 1 Hz update rate
 //mySerial.println(PMTK_SET_NMEA_UPDATE_1HZ);
 // 5 Hz update rate- for 9600 baud you'll have to set the output to RMC only (see above)
 mySerial.println(PMTK_SET_NMEA_UPDATE_5HZ);
 // 10 Hz update rate - for 9600 baud you'll have to set the output to RMC only (see above)
 //mySerial.println(PMTK_SET_NMEA_UPDATE_10HZ);
 File dataFile = SD.open("GPS.txt", FILE_WRITE);
 dataFile.println("");
 dataFile.println("");
 dataFile.println("");
 dataFile.println("");
 dataFile.println("##############################################################################################################");
 dataFile.println("");
 dataFile.println("#################");
 dataFile.println("##Neue Messung###");
 dataFile.println("#################");
 dataFile.println("ax;ay;az;gx;gy;gz;ms");
 dataFile.close();
}
/*
void loop() // run over and over
{

 if (mySerial.available()) {
   GPS = (char)mySerial.read();
   Serial.print(GPS);
   File dataFile = SD.open("GPS.txt", FILE_WRITE);
   dataFile.print(GPS);
   dataFile.close();
 }

if (Serial.available()) {
 mySerial.print((char)Serial.read());
}
}
*/
File dataFile;

void loop() // run over and over
{

 if (mySerial.available()) {
   GPS = (char)mySerial.read();
   dataFile.print(GPS);
   Serial.print(GPS);
   if (GPS == '\n') // bei erkanntem Zeilenende
   {

     mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz);
     dataFile.print(ax); dataFile.print("\t"); Serial.print(ax); Serial.print("\t");
     dataFile.print(ay); dataFile.print("\t"); Serial.print(ay); Serial.print("\t");
     dataFile.print(az); dataFile.print("\t"); Serial.print(az); Serial.print("\t");
     dataFile.print(gx); dataFile.print("\t"); Serial.print(gx); Serial.print("\t");
     dataFile.print(gy); dataFile.print("\t"); Serial.print(gy); Serial.print("\t");
     dataFile.print(gz); dataFile.print("\t"); Serial.print(gz); Serial.print("\t");
     dataFile.print(millis()); dataFile.print("\t"); Serial.print(millis()); Serial.print("\t");

     // hier ggf. Funktion aufrufen zur Ausgabe von X, Y, Z
     dataFile.close(); // Datei schließen
     dataFile = SD.open("GPS.txt", FILE_WRITE); // und sofort wieder öffnen
   }
 }

 if (Serial.available()) {
   mySerial.print((char)Serial.read());
 }
}

Dann fang mal an. Oder wie soll man den Thread verstehen?

Ich bin immernoch der Meinung, daß man mit einem Beschleunigungssensor nicht die Kurvenlage messen kann, da die Beschleunigung immer nach unten, Richtung Reifen wirkt, da das Verktorprodukt aus Gewichtskraft und umgekehrter Zentrifugalkraft im Reifen liegen muß da ansonsten keine stabile Kurfenlage möglich wäre.

Grüße Uwe

Hallo,
schöner Sketch, wichtig anzuschauen…

Was hast Du denn nun vor?
"Rollwinkel eines Motorrads"
Was verstehst Du denn unter Rollwinkel eines Motorrads?
Den "Eulersche Winkel" oder den "Roll-Nick-Gier-Winkel"?

In Deinem Sketch kann ich keine Berechnungen finden. Ist es das, was Du suchst?
Ich glaube, das wird die Luft dünn...
Gruß und Spaß
Andreas

hab zwar keine idee dazu, finde die sache aber sehr interessant, da selber moped fahrer.

sieht so aus, als wenn es richtung datenlogger geht....

uwefed:
Ich bin immernoch der Meinung, daß man mit einem Beschleunigungssensor nicht die Kurvenlage messen kann, da die Beschleunigung immer nach unten, Richtung Reifen wirkt, da das Verktorprodukt aus Gewichtskraft und umgekehrter Zentrifugalkraft im Reifen liegen muß da ansonsten keine stabile Kurfenlage möglich wäre.

Grüße Uwe

Da hast du recht, mit Beschleunigungssensoren könnte man höchstens versuchen aus der größeren Beschleunigung während einer Kurvenfahrt einen Winkel zu errechnen.

Aber der mpu6050 hat ja auch eine Art Gyroskope funktion und gibt die Winkelgeschwindigkeit aus.
Wenn man die aufintegriert, kann man die absoluten Winkel errechnen.

@hicham123: Hast du denn, mal ganz ohne Code, eine Ahnung was der Arduino machen soll?
Bevor man anfängt zu programmieren, sollte man, möglichst detailliert, aufschreiben was genaue der Controller machen soll.

guntherb:
Aber der mpu6050 hat ja auch eine Art Gyroskope funktion und gibt die Winkelgeschwindigkeit aus.
Wenn man die aufintegriert, kann man die absoluten Winkel errechnen.

Und selbst der ist schwer in der Lage dies (ganz) korrekt zu tun.
Es gibt ja auch massenweise Handy-Apps die sowas aufzeichnen können. Jedes Smartphone verfügt mittlerweile über einen 3-Achsen Gyro, Beschleunigungsmesser und einen Kompass.
Fahre ich z.B. (möglichst linear) durch einen Kreisverkehr, wandert der Winkel immer weiter auf.

Meine ActionCam macht das ähnlich.

Da ich mir über den Winter eine Maschine rein für die Rennstrecke aufbaue, werde ich dort Abstandssensoren in die Verkleidung bauen. Damit sollte sich der Winkel genauer bestimmen lassen. Noch ein paar IR-Temperaturfühler und fertig ist mein nächstes Projekt :smiley: