Go Down

Topic: IMU 9D0F (Read 1 time) previous topic - next topic

Flooow

Bonjour,

Je cherche a faire fonctionner un capteur 9 axes (RAZOR 9D0F) qui contient un accéléromètre, un gyroscope et un magnetomètre.

Il fonctionne directement en liaison série USB sur le pc, dans son moniteur je voit bien toutes les données, mais j'aimerais les envoyer vers un pc via bluetooth.


J'ai donc configurer une liaison BL avec un HC05 fonctionelle, et quand le module BL reçoit "c" il doit envoyer les informations du capteur 9 axes.

J'ai donc définit 2 liaisons série dans mon code arduino, une pour le BL l'autre pour le capteur et je lui ai dit, quand tu reçoit "c" sur le BL, tu envois sur cette même liaison, la donnée que tu va lire que la liaison du capteur.

Or, je reçoit toujours -1 comme retour si je demande "c" au bluetooth.

Je pense que cela est du à un format de donnée qui ne lui correspond pas, et il doit renvoyer cette valeur par défaut ?

Je n'arrive pas à trouver d'informations concernant ce problème sur internet. Des idées ?

Merci.

Bonne soirée
Flooow.

J-M-L

#1
Feb 16, 2017, 09:58 pm Last Edit: Feb 16, 2017, 10:00 pm by J-M-L
Vous avez un bug ligne 42 et votre fil rouge n'est pas bien connecté... enfin peut-être....

Sérieusement, vous nous dites "j'ai un bug dans mon code, pouvez vous devinez où?"... et vous croyez qu'on va pouvoir vous aider?... postez le code (-1 sur un Serial.read() ça veut dire pas de données dispo)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Flooow

Je ne sais pas s le problème est dans le code, mais niveau montage c'est basique quoi, le TX de mon IMU sur le port 9 de l'arduino et puis l'alimentation, idem pour le BL.

Code: [Select]

#include <SoftwareSerial.h>

SoftwareSerial bluetooth(10, 11);
SoftwareSerial IMU(8, 9);

char bluetoothData = ' ';

void setup() 
{
    pinMode(4, OUTPUT);
    IMU.begin(57600);
    bluetooth.begin(19200);
    Serial.begin(9600);
}

void loop() 
{
 
  if (bluetooth.available())
  {
      bluetoothData = bluetooth.read();
       
      /*Conditions on the data we receive*/
      switch(bluetoothData)
      {
        case 'a':
          digitalWrite(4, HIGH);
          bluetooth.println("a-recu");
          break;

        case 'b':
          digitalWrite(4, LOW);
          bluetooth.println("b-recu");
          break;

        case 'c':
          bluetooth.println(IMU.read());
          break;

        default:
          digitalWrite(4, LOW);
          break;
      } 

       delay(100);
    }
}



Merci du retour ;)

J-M-L

#3
Feb 16, 2017, 10:49 pm Last Edit: Feb 16, 2017, 10:58 pm by J-M-L
Pourquoi quand vous recevez une commande sur Bluetooth une donnée serait aussi dispo à lire sur l'IMU?

De plus software serial est un peu touchy quand vous en avez 2 en même temps. Cf la doc et l'usage de listen()
 
Il semble que vous n'utilisez pas Serial, qui est le port série matériel - ce serait bien de mettre votre Imu dessus par exemple et utiliser software serial pour le BT - ce serait plus robuste

Faut repenser entièrement la lecture du contenu de l'IMU
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

-Standby

Une image du montage ?  
The Mind is like a parachute it works best when opened.

Flooow

#5
Feb 17, 2017, 08:58 pm Last Edit: Feb 17, 2017, 09:06 pm by Flooow
http://hpics.li/621e910

Voilà le montage fait rapidement.

Le code j'ai essayé, même en supprimant le BL, et je reçois -1 aussi.

J'ai aussi essayé avec SerialEvent et c'est le même problème (peut être qu'il y a vraiment aucune données, mais si je branche le cable USB sur le capteur avec RX et TX et sur le pc directement, dans le moniteur j'ai les bonnes données ...)

J-M-L

#6
Feb 17, 2017, 09:04 pm Last Edit: Feb 17, 2017, 09:11 pm by J-M-L
si vous virez le BT et vous faites cela

Arduino Pin digital 8 ---> IMU Tx
Arduino Pin digital 9 ---> IMU Rx
et bien sûr alimentation correcte et GND partagés entre l'arduino et le IMU

->en mettant la console de l'IDE à 115200 bauds, ça vous  dit quoi?

Code: [Select]
#include <SoftwareSerial.h>

// Arduino Pin 8 ---> IMU Tx
// Arduino Pin 9 ---> IMU Rx
SoftwareSerial IMU(8, 9);

void setup()
{
  Serial.begin(115200);
  IMU.begin(57600);
}

void loop()
{
  if (IMU.available())
    Serial.print((char) IMU.read());
}
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

-Standby

Quote
Voilà le montage fait rapidement.
Ou ?
The Mind is like a parachute it works best when opened.

J-M-L

Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Flooow

@J-M-L: Ton code fonctionne, enfin j'ai une suite de chiffre et de valeur sur une ligne, peu compréhensible, mais j'ai une donnée qui arrive déjà. (Normalement l'IMU envoi la donnée x,y,x sur la liaison série)

J-M-L

Au fait on dirait que c'est un device 3.3V - c'est ça que vous avez?


Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

J-M-L

@J-M-L: Ton code fonctionne, enfin j'ai une suite de chiffre et de valeur sur une ligne, peu compréhensible, mais j'ai une donnée qui arrive déjà. (Normalement l'IMU envoi la donnée x,y,x sur la liaison série)
vous pouvez copier coller ce que ça dit ?? (vous avez bien mis à 115200?)
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Flooow

Code: [Select]
-1.98-110.237.59-1.98-110.227.60-1.98-110.217.61-2.00-110.217.61-2.00-110.217.62-2.00-110.207.62-2.00-110.207.64-2.00-110.207.58-2.08-110.207.57-2.06-110.207.58-2.06-110.217.59-2.04-110.227.59-2.02-110.237.58-2.04-110.237.58-2.05-110.247.58-2.06-110.237.58-2.06-110.237.57-2.07-110.237.58-2.07-110.227.57-2.05-110.227.56-2.05-110.237.56-2.05-110.227.58-2.05-110.217.58-2.05-110.227.57-2.03-110.227.56-2.03-110.217.56-2.03-110.217.55-2.04-110.227.55-2.04-110.217.55-2.02-110.227.54-1.99-110.227.55-2.01-110.207.56-2.01-110.207.56-1.98-110.207.57-1.97-110.197.57-1.96-110.187.58-1.96-110.187.59-1.96-110.187.60-1.95-110.177.59-1.94-110.177.60-1.93-110.177.62-1.93-110.177.61-1.94-110.187.62-1.94-110.187.61-

Indéfinement des valeurs comme cela, pas exploitable sous ce format mais les valeurs ont l'air bonne.

J-M-L

#13
Feb 17, 2017, 10:50 pm Last Edit: Feb 17, 2017, 10:59 pm by J-M-L
OK donc ça fonctionne...

ensuite faut lire la doc pour voir ce que ça vous envoie...

j'ai regardé un peu il semble que vous puissiez envoyer des commandes par la liaison série pour obtenir un mode où il va vous envoyer des lignes sous la forme

$accelx,accely,accelz,gyrox,gyroy,gyroz,magx,magy,magz#\n\r

donc assez faciles à parser

--> mettre la bonne commande dans le setup()
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Flooow

#14
Feb 18, 2017, 03:47 pm Last Edit: Feb 18, 2017, 04:37 pm by Flooow
Parfait, pour traiter les données et les parser, je ne le fait pas dans la carte arduino, je met en place une interface WPF (Visual Studio)

L'arduino va envoyer la chaine complète et le traitement se fera de l'autre côté.

Je vais donc essayer de remettre le BL, voir si cela fonctionne maintenant.

Merci.

Go Up