Gestion MPU-6050 pour detection de mouvement

Hello

Pour un petit projet, je cherche à détecter le déplacement d’un objet.
Je suis suis procuré un MPU-6050.

Je l’ai branché à mon arduino UNO, et j’ai utilisé cette exemple:

// MPU-6050 Short Example Sketch
// By Arduino User JohnChi
// August 17, 2014
// Public Domain
#include<Wire.h>
const int MPU_addr=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);
}
void loop(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)     
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
  GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
  delay(333);
}

Trouver ici:
http://playground.arduino.cc/Main/MPU-6050#short

Sa marche nikel, j’ai bien les valeurs dans mon terminal série:

AcX = -7692 | AcY = 8896 | AcZ = -12668 | Tmp = 25.71 | GyX = -155 | GyY = -331 | GyZ = -146
AcX = -7680 | AcY = 8940 | AcZ = -12608 | Tmp = 25.61 | GyX = -118 | GyY = -289 | GyZ = -91
AcX = -7696 | AcY = 8984 | AcZ = -12568 | Tmp = 25.66 | GyX = -103 | GyY = -320 | GyZ = -145
AcX = -7820 | AcY = 8948 | AcZ = -12700 | Tmp = 25.71 | GyX = -111 | GyY = -293 | GyZ = -122

Je bloque sur la gestion des valeurs, je pense qu’il faut que j’utilise les valeurs en A (pour accélération ? )
Mais suivant comment mon objet est posé, les valeurs changes.

Merci de votre aide !!!

Il faudrait aller faire un tour dans la documentation du MPU6050. On y trouve notamment, de mémoire, la manière d'initialiser les échelles de mesure (selon l'amplitude des accélérations à mesurer), et les unités utilisées. En effet, les valeurs Ac sont les accélérations suivant l'axe, et les valeurs Gy sont autour de l'axe. Il y a également la température. Il n'y a rien de surprenant au fait que les valeurs ne soient pas à zéro. Pour l'axe Z, on retrouve, logiquement, l'accélération gravitationnelle. Ensuite, si je me souviens bien, il faut avoir le composant relativement stable lors de l'initialisation afin d'avoir des valeurs les plus objectives possibles...

Hello

J'ai regardé un peu les datasheet, mais je comprend pas comment faire.

J'ai trouver un sketch pour calibrer le module, mais les accélération bouge toujours de trop suivant la position de base de mon objet.

Je cherche juste à détecter le déplacement de mon objet. Peut importe comment il est déplacé.

merci de votre aide !

La datasheet de ce capteur est très lourde, normal que tu n'y comprend rien. Il y a des registres interne d'interruptions que tu peut configuré selon certains paramètres (chute, vibration, inclinaison).

Je ne sais pas si c'est une bonne idée, mais perso j'avais multiplié les valeurs envoyé sur le port série par 10 ou 100 pour avoir des valeurs plus lisse !

Edit : Après relecture de ton post je m'apperçois que tu à des valeurs élevé donc ça te donnera pas grand chose.. Le miens me retournais des valeurs plus proche de zero..