Matlab Arduino transfert d'une variable.

Bonjour,

Je rencontre un petit problème dans l'élaboration de mon projet c'est pourquoi je viens vers vous.

Je reçoit des données via mon module Nrf24l01+ ( réception RF) provenant d'une autre carte arduino. Ces données sont celle d'un IMU Gy-521. Elles sont donc composé de 12 octets et je les stocke dans 6 variables différentes.

Mon problème est qu'il faut que je transfert ces variables sous matlab. J'ai donc installé le package support arduino pour matlab. J'arrive ainsi a allumé éteindre une LED depuis matlab.

Ma question et comment faire pour transférer ma variable disons "toto" stocker dans mon micro controleur vers Matlab? J'ai peur que en utilisant matlab cela téléverse un nouveau programme dans mon arduino venant écraser l'ancien.

Vos lumières m'éclaireraient bien, merci d'avance pour vos réponses.

Vous pouvez lire cela

En gros vous configurez matlab pour lire ce qui vient sur le port série et côte Arduino vous utilisez Serial.print/write pour envoyer vos données à Matlab.

L'important est de bien configurer le port série des 2 côtés et définir un protocole de communication (Matlab doit savoir ce que vous envoyez et quand pour le lire)

Merci J-M-L, j'avoue que je n'ai pas vraiment tout piger à son code ^^ Mais cela me suffit comme point de départ!

J'arrive à envoyer une chaine de caractère c'est un bon début ! (Me reste encore à la séquencer parce que la j'envoie toto et je recoit "totototototototototototototototototototototototototototototototo" mais sa devrait pas être trop dur!)

Merci encore.

C'est sans doute parce que vous envoyez toto dans la loop() et donc ça se répète... Non?

Ah oui clairement c'est ça, mais dans tous les cas je vais récupérer des données de mon IMU qui seront envoyé en boucle, il faut que j'arrive juste à bien séquencer mon envoie pour que à la réception je sache exactement quel type récupérer et combien d'octet! Mais j'ai des petites idées!

Il suffit d'envoyer un (ou plusieurs) caractère de début de séquence par exemple le code ASCII 01 (en ascii c'est SOH = Start of heading) ou 02 (Start of text)

Ensuite vous envoyez vos 12 octets en binaire avec des Serial.write(xx);

Et éventuellement ensuite les code ascii 3 et 4 (end of text / end of transmission)

Comme ça côté Matlab vous faites une boucle qui attend le ou les caractères de début de transmission - une fois reçus vous savez que le 12 prochains octets sont une trame de donnée et éventuellement vous vous assurez de lire le ou les octets de fin de transmission pour vous assurer que la communication était bonne. Et vous recommencez la boucle

Oui c'est une façon de faire, je vais surement l'utiliser pour être sur de transmettre les bonnes donnnées. Je n'avais pas vu votre message et j'ai fait une méthode un peu plus barbare dira t on:

J'envoie juste en boucle via un serial.println mes 6 float représentant les 3 accélération et les 3 vitesse de rotation. Et coté matlab je fait juste six fscanf après avoir ouvert la connection et définie le protocole (dans une boucle infini ) et en fait sa récupère directement dans l'ordre les 3 accelération suivit des trois vitesse de rotations ! Sa marche nikel (pour l'instant ) mais c'est vrai qu'un flag afin d'assurer la transmission des bonnes données peut etre utile!

La j'ai un nouveau problème, je suis un peu à la rue en maths et j'avoue que je n'ai strictement aucune idée de comment interprété les valeurs de mon IMU pour en obtenir une données concernant la position de mon système.

Je vais ouvrir un nouveau poste je pense mais si vous avez des idées je suis preneur.

Merci de votre aide.

Il y a des librairies arduino qui interprètent ces données pour vous - soit vous le faites côté arduino et envoyez le résultat à Matlab soit vous dupliquez les formules de la librairie (fonctions) côté Matlab et envoyez les données brutes

L'idée du drapeau de début (et éventuellement de fin) de trame c'est juste pour éviter que Matlab se perde si d'aventure un des octets venait à se perdre sur la ligne série pour une raison ou une autre - dans ce cas vous êtes décalé d'un octet et tout ce que vous lisez n'a plus de sens. L'avantage donc du drapeau de début et de fin c'est de permettre de sauter une trame qui serait pas complète et de se récupérer ensuite

Oui je vais placer un drapeau de début et de fin!

Auriez vous un lien vers une librairie éffectuant ce dont vous me parlez ?

Merci.

Regardez du côté MPU6050

Par exemple http://dummyscodes.blogspot.fr/2014/07/mpu6050-gy-521-breakout-arduino-mega.html?m=1

C'est une question intéressante. Tu peut facilement envoyé les données ou recevoir les données en utilisant la liaison série. La technique est simple car matlab prévoit la manipulation du port COM grâce à l'instruction Serial. Tu peut formater ta données (début, donnée, fin, ...). Voila un exemple qui permet de contrôler une matrice des LED 8x8 en utilisant matlab, Arduino et la liaison série (Lien du projet complet).

|500x149

|500x361

Bon courage.