J'ai un MPU 6050 bluetooth.
Je l'ai connecté à une carte arduino due, elle-même connecter à mon ordinateur.
J'ai ensuite utilisé une app android (bluetooth spp pro) qui me permet de recevoir par bluetooth les données du capteur (donc normalement accélération, etc etc).
Je capte bien quelque chose. J'ai sauvegardé ce que je reçois.
C'est de l'hexa. j'ai donc essayé de le convertir en ASCII mais cela reste illisible.
Help me please !
PS: en piece jointe, je met le fichier .txt qui comprend justement les données récupérées.
J'ai un MPU 6050 bluetooth.
Je l'ai connecté à une carte arduino due, elle-même connecter à mon ordinateur.
J'ai ensuite utilisé une app android (bluetooth spp pro) qui me permet de recevoir par bluetooth les données du capteur (donc normalement accélération, etc etc).
vous avez aussi sans doute chargé un programme dans votre Arduino, non? la réponse à votre question se trouve dans le code source de ce point important que vous avez omis de joindre à votre post...
En fait, c'est un capteur déjà pré-programmé. Enfin il est censé l'être haha !
C'est un MPU 6050 avec bluetooth incorporé.
8 broches disponibles (4 seulement ont été soudé à des broches et sont GND VCC TX RX).
Je l'ai simplement branché à ma carte arduino elle meme branché à l'ordi.
J'ai ensuite activé le bluetooth de mon tel et je l'ai connecté directement sans avoir eu besoin de téléverser du code bluetooth etc. J'ai donc ensuité récupéré ces données.
J'ai la doc, la datasheet, le register map !
Mais je n'arrive pas à comprendre ce qu'il envoie.
Je vais profiter de ce sujet pour poser une deuxième petite question.
Est ce qu'il est possible en passant par les broches SDA et SCL de remettre à zéro le capteur et de le coder soi -même ?
J'ai récuperer une doc sur internet également..
J'ai commandé sur amazon et il y avait deux liens qui devait me diriger vers des explications justement mais ils étaient morts.
Comme document j'ai ça (je les uploads)
vous pouvez téléchargez d'un google drive tout un répertoire de trucs. je ne ferais pas trop confiance au .exe venant d'un endroit inconnu mais il y a un bout de code arduino tout à fait parlant sur ce qui est envoyé sur le port série (et google translate peut vous aider avec les commentaires en chinois)
/*
This code is used for connecting arduino to serial mpu6050 module, and test in arduino uno R3 board.
connect map:
arduino mpu6050 module
VCC 5v/3.3v
TX RX<-0
TX TX->1
GND GND
note:
because arduino download and mpu6050 are using the same serial port, you need to un-connect 6050 module when you want to download program to arduino.
Created 14 Nov 2013
by Zhaowen
serial mpu6050 module can be found in the link below:
http://item.taobao.com/item.htm?id=19785706431
*/
unsigned char Re_buf[11],counter=0;
unsigned char sign=0;
float a[3],w[3],angle[3],T;
void setup() {
// initialize serial:
Serial.begin(115200);
}
void loop() {
if(sign)
{
sign=0;
if(Re_buf[0]==0x55) //检查帧头
{
switch(Re_buf [1])
{
case 0x51:
a[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*16;
a[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*16;
a[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*16;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
break;
case 0x52:
w[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*2000;
w[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*2000;
w[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*2000;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
break;
case 0x53:
angle[0] = (short(Re_buf [3]<<8| Re_buf [2]))/32768.0*180;
angle[1] = (short(Re_buf [5]<<8| Re_buf [4]))/32768.0*180;
angle[2] = (short(Re_buf [7]<<8| Re_buf [6]))/32768.0*180;
T = (short(Re_buf [9]<<8| Re_buf [8]))/340.0+36.25;
Serial.print("a:");
Serial.print(a[0]);Serial.print(" ");
Serial.print(a[1]);Serial.print(" ");
Serial.print(a[2]);Serial.print(" ");
Serial.print("w:");
Serial.print(w[0]);Serial.print(" ");
Serial.print(w[1]);Serial.print(" ");
Serial.print(a[2]);Serial.print(" ");
Serial.print("angle:");
Serial.print(angle[0]);Serial.print(" ");
Serial.print(angle[1]);Serial.print(" ");
Serial.print(angle[2]);Serial.print(" ");
Serial.print("T:");
Serial.println(T);
break;
}
}
}
}
void serialEvent() {
while (Serial.available()) {
//char inChar = (char)Serial.read(); Serial.print(inChar); //Output Original Data, use this code
Re_buf[counter]=(unsigned char)Serial.read();
if(counter==0&&Re_buf[0]!=0x55) return; //第0号数据不是帧头
counter++;
if(counter==11) //接收到11个数据
{
counter=0; //重新赋值,准备下一帧数据的接收
sign=1;
}
}
}
vous pouvez téléchargez d'un google drive tout un répertoire de trucs. je ne ferais pas trop confiance au .exe venant d'un endroit inconnu mais il y a un bout de code arduino tout à fait parlant sur ce qui est envoyé sur le port série (et google translate peut vous aider avec les commentaires en chinois)
/*
This code is used for connecting arduino to serial mpu6050 module, and test in arduino uno R3 board.
connect map:
arduino mpu6050 module
VCC 5v/3.3v
TX RX<-0
TX TX->1
GND GND
note:
because arduino download and mpu6050 are using the same serial port, you need to un-connect 6050 module when you want to download program to arduino.
Created 14 Nov 2013
by Zhaowen
Le lien que j’ai donné comprend toutes les infos techniques nécessaires pour comprendre ce qui est envoyé sur le port série et comment transformer ces octets en information
il faut d'abord recevoir 11 octets pour avoir une trame complète
le premier doit être 0x55
le second définit le type de data reçu et peut être 0x51 , 0x52 ou 0x53 pour les 3 axes d'accélération, de vitesse angulaire et axes magnétiques plus la température sans doute.
le code montre les formules à utiliser et dans quels octets/bits sont rangés quels éléments
(leur code n'est sans doute pas super solide s'il y a un décalage sur le premier élément du buffer)
en rouge vous avez le 55 qui est le marqueur de début de trame
ensuite vous avez un indicateur du contenu de la trame, les trames vont se répéter (vert et bleu ci dessus) 51 c'est l'accélération, 52 la vitesse angulaire, 53 le lacet, tangage roulis, 54 l'orientation magnétique
ensuite les 3 données sur deux octets à combiner par une formule magique (cf la doc). les octets sont en little endian, donc poids faible d'abord, puis poids fort
puis en violet c'est la température sur deux octets (x100)
enfin en orange c'est un checksum (la somme de tous les autres octets de la trame)
j'ai récupéré un composant BJY901 MPU6050 Bluetooth
J'ai essayé avec l'aide de la doc et ça avait l'air de fonctionner.
blabllou:
Je vais profiter de ce sujet pour poser une deuxième petite question.
Est ce qu'il est possible en passant par les broches SDA et SCL de remettre à zéro le capteur et de le coder soi -même ?
J'aimerais que cela soit possible.
pas de soucis pour attaquer les registres directement en suivant la doc par I2C. j'arrive à les écrire et relire.
Voilà un bout de code à regarder (à vos risques et périls, ça n'a pas grillé le mien).
ça fonctionne sur un MEGA pour avoir 2 ports Séries
ça démontre
comment utiliser I2C pour configurer certains registres (un booléen pour sauter cette partie du code si vous voulez)
comment analyser ce que l'on reçoit sur le port Serie
Il ne reste plus qu'à vérifier si les valeurs obtenues ont un sens, j'ai utilisé les formules de la doc et ça me semble un peu farfelu pour le moment
J'ai eu aussi à un moment une galère en jouant avec les registres et plus rien ne marchait. Voilà comment on fait reset sur son module (photo de mon module)
vous débranchez tout sauf la masse GND
vous mettez en contact la broche D2 et la broche VCC