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

Capteurs communiquants sans fil

Objectifs du TP :

  1. Transmettre 3 mesures de capteurs à l'aide d'un Arduino et d'un module Bluetooth HC-05.
    Le module transmetteur est sans fil et autonome en énergie grâce à une batterie.
  2. Récupérer ces mesures sur une tablette à l'aide d'une application AppInventor.
  3. Puis construire un VI Labview permettant d'exploiter ces mesures
  4. Ecrire dans un tableur les mesures avec l'horodatage

 1. Transmettre 3 mesures de capteurs à l'aide d'un Arduino et d'un module Bluetooth HC-05

Le choix des capteurs est libre.

Il peut s'agir de capteurs à sorties analogiques : CTN, LM35  (température) ,MPX5100 (pression), BPW34 (photodiode)...

Ou de capteurs à sorties numériques : DHT22 (température et humidité), BMP180 (pression et température)...

Dans les exemples qui vont suivre nous avons choisi:

- Un capteur à sortie numérique : le DHT22.
   Pour commencer utiliser l’exemple de cette bibliothèque :Fichier/Exemples/DHT_Capteur_Humi/DHTtester

- Un capteur à sortie analogique : un simple pont diviseur entre Vin et Gnd avec 2 résistances R=100kΩ
                                                          qui permet de transmettre la tension de la batterie.
                                                          8,4 V pleine charge / 6,8 V proche de 0% : il faut recharger.

Remarques  : la tension mesurée par l'Arduino est au point milieu soit Vin/2
                        Vin = tension de la pile - 0,8 V (diode de protection contre une inversion de polarité)
                         Par conséquent  float Vpile = 2 * 5.0/1024 * analogRead(0) + 0.8;

Une fois les données des capteurs récupérées, nous les regroupons ensemble pour créer une trame grâce à Serial.

   Serial.print("debut;");// trame souhaitée : debut;t;h;Vpile;fin 
  Serial.print(t,1);Serial.print(";");
  Serial.print(h,0);Serial.print(";");
  Serial.print(Vpile);Serial.println(";fin"); // fin de trame \n ou ln...

Les applications suivantes vont découper (split pour AppInventor) la trame au niveau des ";"

Cabler sur un module Arduino :    les capteurs,
                                                      le diviseur de tension,
                                                      et le module BT HC-05.

Ecrire un programme Arduino répondant à ce cahier des charges :
Transmettre 3 mesures de capteurs à l'aide d'un Arduino et d'un module Bluetooth HC-05.

Appel 1 : Faites constater que vous recevez bien les données des capteurs sur le moniteur série Arduino.

2. Récupérer ces mesures sur une tablette à l'aide d'une application AppInventor.

L'application Capteurs créée avec AppInventor est déjà installée sur les tablettes de la J101.

Sur certain Smartphone lors du téléchargement le fichier est nommé Capteurs.apk.zip

Il faut alors le renommer en Capteurs.apk

Vous pouvez aussi télécharger cet apk  et  l'installer sur votre smartphone Android.

Vous pouvez voir le code AppInventor sur ce lien.

Pour ceux qui veulent  modifier le code, télécharger et importer dans AppInventor : Capteurs.aia

Le format de la trame adaptée à l'application est disponible dans la fenêtre Aide.

On peut changer les intitulés Mesure 1, Mesure 2, Mesure 3 en plaçant dans le setup de l'Arduino :

  Serial.println("debut;T(°C);Hr(%);V(Volt);fin");

Appairer le Module Bluetooth HC05xx à la tablette.

  1.  Paramètres/Bluetooth
  2.  Code appairage 1234
  3.  Lancer l’application Capteurs sur la tablette
    Cliquer sur liste puis sélectionner HC05xx

Mesurer la consommation de courant lorsque l'Arduino et le module HC-05
sont alimentés avec une alimentation extérieure de 7,4 V.

Tester si Imoy dépend de la tension d'alimentation (8,4 V et  6,8 V).

Appel 2 :  Faites constater que la tablette reçoit bien les données.
                Personnaliser les intitulés Mesure 1, Mesure 2, Mesure 3.
                Estimer l'autonomie de l'Arduino alimenté par une batterie 9V 650 mAh.

3. Construire un VI Labview permettant d'exploiter ces mesures

Nous n'avons pas le contrôle sur l'application AppInventor.

De plus il est interessant de suivre l'évolution des mesures à l'aide de courbes.

Aussi nous allons remplacer la tablette par un PC et un VI Labview.

Ci-contre la face avant finale souhaitée.

Durant la phase de mise au point la communication entre le PC et l'Arduino se fera par USB.
A la fin nous remplacerons le cordon USB par une liaison Bluetooth à l'aide d'un dongle USB/BT.

Voici les principales fonctions que nous allons utiliser.

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...).

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

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….

Etape 2 : Recevoir une trame Arduino

Appel 3 :  Recevoir et afficher la trame.

  1. Initialiser avec Visa config :
  2. Structure While :
  3. Lire le buffer série jusqu'au caractère de terminaison ou 100 caractères
  4. Afficher le buffer série dans un indicateur :
  5. Lorsque l'on appuie sur Stop, on rend la ressource en fermant la liason série : (Visa close)
    Ainsi le moniteur Arduino peut de nouveau fonctionner...

Etape 3 : Traiter la chaîne de caractères reçue

         Balayer une chaîne      

  1. Il faut indiquer que l'Arduino utilise comme séparateur décimal le point au lieu d'une virgule. Ce qui génère le code format "%.;"
  2.  Le VI Balayer une chaîne permet de décrire précisément le format de la chaîne reçue
    debut;%.; %f;%f;%f;fin
  3. Avec la palette clusteur nous récupérons la diode du clusteur de sortie d'erreur.
    Si la chaîne reçue est conforme à la chaîne décrite, nous récupérons les données.
    Sinon le cluster d'erreur allume la led status..

Appel 4 : Faites constater le fonctionnement de votre programme

Ajouter un bargraphe représentant la charge de la batterie ( 6,8V -> 0 % et 8,4 V -> 100%)

Etape 4 : Ecrire dans un tableur les mesures avec l'horodatage  pour récupérer  

Récupérer l'horodatage grâce au VI : Date et heure en secondes
Formater en chaîne  pour assembler une chaîne au format
             Horodatage (%T);Température (%f);Hr (%f);Vpile(%f) retour chariot (%s)
Ecrire dans un fichier tableur + Construire un tableau
Solution A ou solution ci-dessous

Ecrire une chaîne au format tableur (cf Aide graphique ci-dessous)
placer sur la Face avant et renseigner le chemin
Initialiser les entêtes du tableur


Excel peut lire le fichier 3capteurs.csv  (csv : comma separated values)
               Chaque ligne du texte correspond à une ligne du tableau
               et les points-virgules ; correspondent aux séparations entre les colonnes.

Pour initialiser le tableau Excel avec des entêtes : "Horodatage; T en °C; Hr en % ; Bat en V"

 Chemin du VI actuel + Décomposer un chemin pour récupérer le dossier où est stocké votre programme

Composer un chemin                                   

Appel 5 : Faites constater le fonctionnement de votre datalogging avec horodatage

Etape 5 : Déterminer par extrapolation l'autonomie de la batterie

Pour une meilleure gestion du bouton STOP nous allons comme pour Arduino vérifier que des données sont disponibles

Nous lisons le buffer série et traitons les données que si des octects sont disponibles.

Cela permet d'éviter le timeout de 10s et une meilleure réactivité du bouton STOP...

Par commodité, nous allons aussi stocker l'horodatage dans un graphe déroulant ayant la même longueur d'historique que celui de la Batterie en V

 

Si rien n'est disponible sur le port série, nous calculons par extrapolation à quelle heure la batterie atteint la valeur souhaitée :

Appel 6 : Faites constater le fonctionnement de votre extrapolation de l'autonomie et le bon fonctionnement du bouton STOP

Etape 6 : Réaliser une liaison Arduino - PC sans fil

Nous allons remplacer le cordon USB par un HC-05 côté Arduino et un Dongle Bluetooth côté PC.

Il n'y a aucun changement dans les programmes à effectuer.

Le PC du poste doit être paramétré avec le dongle BT et offre ainsi une liaison série virtuelle.

Dans le menu Bluetooth ouvrer Paramètres Bluetooth avancés pour découvrir le port COM à utiliser.

Tester la liaison série virtuelle sans fil avec vos programmes.