BTS Mesure BTS Mesure
DébutTP 01TP 02Trouve NombreCourbesCTNPT100VISABT VISAArduinoNI6009ChenillardMétrologieRégulationMPUCodeurC2IEtalon

La liaison série : comment communiquer avec un Arduino ?

D'une manière plus générale, la palette VISA série nous permettra de communiquer avec tous les instruments de mesure équipés d'une liaison RS232 (port COM).

La palette VISA

         Etape 1 : VISA config 
         Etape 2 : Envoyer un message à l’Arduino
         Etape 3 : Recevoir un message de l’Arduino
         Etape 4 : Réaliser une interface graphique

La palette chaîne

Les couleurs

 

     

 

 

La palette VISA :

NI-VISA est un pilote qui s’interface toujours de la même manière quel que soit le moyen de connexion (GPIB, liaison série, VXI : bus informatique industriel, initialement destiné à l'instrumentation).

Pour trouver la palette VISA série, le mieux est d’utiliser la fonction Rechercher :

Etape 1 : VISA config

Il faut initialiser la liaison série afin de communiquer avec l’Arduino :

Comme le montre l’aide la seule donnée indispensable est le nom de la ressource VISA.

Par défaut les autres paramètres sont adaptés à la communication avec un Arduino :

·        Débit en bauds : 9600, soit 960 caractères à la seconde, soit 1,04 ms par caractère …
                                         il faut un bit Start, 8 bits pour le code ASCII, un bit Stop : 10 bits

·      Activer le caractère de terminaison (0xA = 10 = LineFeed) : Vrai   par défaut
Lors de la réception d’un message cela permet de déterminer facilement la fin du message.

·     Bits de données : 8 plus 1 bit de Start, 1 bit de Stop : soit un total de 10 bits

·     Parité : pas de bit de parité (0) pas de contrôle de la transmission….

Par contre on peut:

·      Réduire le timeout à 300 ms par exemple au lieu de 10 s.
Sans réponse de l’Arduino le VISA Read ne bloque l’exécution du reste du programme que 300 ms…

Etape 2 : Envoyer un message à l’Arduino

Rappel : lors du TP03 nous avons piloté une LED RGB par la liaison série.
Le programme de l’Arduino est disponible ici.
Télécharger ce programme (ou le vôtre si vous l’avez encore), puis téléversez-le sur l’Arduino.
 Faites un essai du programme à l’aide du moniteur série de l’Arduino.

Câbler à l'aide d'une résistance de 330 Ω la LED R (patte 9) G (patte 10) B (patte 11) et la patte longue (Cathode commune) à la Masse.

Format de transmission retenu : "rouge;vert;bleu;" exemple : 50;150;250;

Si on oublie le dernier ";" la méthode parseInt attend son timeout de 1s pour être sûr qu'il ne reste pas de chiffre à traiter.
Cela ralentit considérablement la vitesse de traitement du message (1012 ms au lieu de 12 ms)...

Envoyer par Labview le message "255;255;255;" à l’Arduino, voici un VI minimaliste :

Remarque :
Lors de la première éxécution, nous envoyons notre message alors que Arduino est en phase d'initialisation.
Aussi notre premier message n'est pas "traité" par l'Arduino.
Pour y remédier, il suffit de relancer une deuxième fois le programme pour que le message arrive.

Par contre si nous mettons un VISA Close à la fin de notre programme,
Arduino est réinitialisé à chaque exécution du VISA Config.
Dans ce cas prévoir une tempo d'au moins 2s avant d'envoyer le message...

Etape 3 : Recevoir un message de l’Arduino

Nous voulons maintenant afficher le message de confirmation que nous envoie l’Arduino.

Nous sommes obligés de donner un nombre d’octets à lire dans le VISA Read.

Mais dès que l’Arduino envoie le caractère LF (0xA) le VISA Read renvoie le buffer lu (grâce à l’option Activer le caractère de terminaison.)

 Il faut laisser un peu de temps à l’Arduino pour répondre, pour cela nous plaçons une tempo dans une structure séquence.

Ecrire et tester ce programme :

Etape 4 : Réaliser une interface graphique

L’intérêt de Labview est de permettre une interface graphique élaborée sur sa face avant.

Voici une interface graphique possible en utilisant des glissières comme commande :

Cahier des charges :

  • Prévoir 3 commandes pour piloter la LED R G B.
  • Mettre les 3 commandes au format U8
  • Afficher le message envoyé à l'Arduino
  • Envoyer ce message sur le COM (liaison série) de l'Arduino
  • Lire la réponse de l'Arduino et l'afficher.
  • Analyser la réponse de l'Arduino pour la séparer sous forme de 3 nombres R G B .
  • Afficher les nombres Rouge Arduino, Vert Arduino et Bleu Arduino.
  • Afficher une LED témoin sur la face avant :
    • la couleur de la LED correspond au code RGB envoyé (à faire en dernier)
    • cliquer sur cette LED éteint la LED

Fonctions utiles :

Les palettes à utiliser se situent dans :

  • Programmation/Chaîne /Concaténer des chaînes
  • Programmation/Chaîne /Conversions/ Nombre en chaîne…  

Voici un extrait du programme permettant de générer le message à envoyer :

Remarque : Si nous ne fermons pas la liaison série à la fin de notre programme,
 il est impossible d’ouvrir un moniteur série avec l’Arduino tant que Labview est ouvert.
Pour y remédier il faut fermer la liaison série à la fin de notre programme (STOP).

 

La palette chaîne :

Nous souhaitons exploiter la chaîne reçue depuis l’Arduino qui est du type :

 Rouge = 23;Vert = 0;Bleu = 48                (on peut remplacer les "; " par des tabulations "\t" )

 Les expressions régulières (Rouge =  ;Vert =  ;Bleu = ) vont nous servir de balises afin d’isoler les variables qui nous intéressent dans la chaîne reçue.

Chaîne /Balayer une chaîne

Ce VI est spécialisé pour traiter une chaîne et isoler les données à extraire en sortie.

Editer la chaîne de balayage vous aide à construire la Chaîne de bayage

Attention : la correspondance avec la chaîne reçue doit-être exacte (espaces compris)
N'hésitez pas à faire un copier-coller de vos expressions régulières depuis votre programme Arduino

  1. Chaîne /Balayer une chaîne
  2. Double clic : on rentre dans
  3.   ajouter  génère la chaîne de balayage : Rouge = %f
  4.           ajouter  génère la chaîne de balayage : ;Vert = %f
  5.          ajouter    génère la chaîne de balayage : ;Bleu = %f
  6.   génère automatiquement la chaîne de format : Rouge = %f;Vert = %f;Bleu = %f  
  7. Remarque en remplaçant les %f par des %d on obtient en sortie des décimaux.

Formats des variables lors du balayage  :

  • %s : string  (Balayer une chaîne abc)
  •  %f : float  ( Balayer un nombre 12,34 ou 1,234E1)
  • %d : décimal (Balayer un décimal )

Les couleurs et l'évènement cliquer sur la LED :

Lorsque l'on clique sur la LED on souhaite éteindre la LED.

La structure évènement : Souris appuyée est parfaitement adaptée.

Voici quelques conseils pour appliquer le code couleur RGB généré à la LED de la face avant.

Grâce à cette pallette nous pouvons générer une couleur RGB correspondant à la couleur demandée.

Ensuite grâce au noeud de propriété nous pouvons appliquer cette couleur en Couleur Arrière Plan  (.CoulAP)

Plus délicat, une LED possède 2 couleurs (Faux ou Vrai sous forme de cluster) et 2 plans (premier plan et arrière plan pour les transitions sous forme de tableau)
Il nous est demandé d'après l'aide un tableau 1D de clusters de 2 éléments.
Pour cette application nous utiliserons la même couleur partout.

 Pour cela il faut assembler les couleurs à l'aide de cluster (2 éléments)  puis de tableau 1D.