Acquisition et traitement de données

Arduino et Excel

Maths, Sciences et Techno | Deuxième cycle

schéma

DIFFICULTÉ MOYENNE | 2 HEURES


Dans de nombreuses activités que nous vous proposons, nous faisons l'aquisition de beaucoup de données avec Arduino. L'intérêt est de pouvoir représenter ces données sous forme graphique afin de les interpréter. Le logiciel Arduino peut représenter les données sous forme graphique en "live", au fur et à mesure de leur aquisition, mais la fonctionnalité n'est pas très efficace.
Nous vous proposons ici de récupérer vos données Arduino et les importer dans excel afin de les représenter sous forme graphique. Cela vous permettra d'ajouter des courbes de tendances, des coefficients de corrélation, qui vous permettront d'analyser vos résultats.
Mais que, quoi, comment faire ? Procédons par étapes :

Le moniteur série.


Commençons par une définition théorique du moniteur série.

Le moniteur série est une fenêtre distincte qui permet de communiquer avec Arduino en recevant et en envoyant des données "série" ("serial" en anglais).
Les données série sont envoyées sur un seul fil par le câble USB et consistent en une série de 1 et de 0. Les données peuvent être envoyées dans les deux sens (dans notre cas, sur deux fils : d'Arduino vers l'ordinateur et de l'ordinateur vers Arduino).

Un moniteur série permet de communiquer avec Arduino. Il est très utile et il ne faut pas se passer de l'utiliser !
Il permet par exemple :
  • De vérifier en temps réél le signal sortant d'un capteur analogique ou numérique.
    On peut vérifier ce signal pour, entre autre :
    • Débugger un programme en vérifiant que le capteur fonctionne, qu'il est correctement branché et programmé.
    • Acquérir des données pour ensuite les analyser.
  • Commander Arduino à distance (en envoyant des commandes avec son clavier).
  • Faire communiquer Arduino avec des logiciels présents sur votre ordinateur (exemple : produire des effets visuels en fonction de l'environnement à la manière de ce qu'on peut voir sur le pont Jacques Cartier à Montréal).

Pour des performances artistiques visuelles ou musicales, la communication série est indispensable. La plupart des logiciels de musique ou d'édidion vidéo sont capables de comprendre les données transmises par la communication série.
C'est le moniteur série qui affiche les données transmises par cette communication.
C'est le côté "sans limites" d'Arduino : nous pourrions contrôler n'importe quel logiciel compatible avec la communication série grâce à des capteurs.

Dans un programme Arduino, 2 lignes de code vous permettront d'initialiser la communication et afficher les données.
  1. Premièrement, dans le "void setup()", la ligne
    Serial.begin (9600);
  2. Deuxièmement, dans le Void loop(), la ligne
    Serial.print (data); ou Serial.println (data);


Programmer le moniteur série : exemple


Le programme ci-dessous permet de lire la valeur d'un potentiomètre sur la prise A0 et afficher cette valeur dans le moniteur série.
Dans cet exemple de simulation, nous pourrions par exemple utiliser les valeurs du potentiomètre transmises par le moniteur série pour contrôler une vidéo (qui serait lue par un logiciel spécifique), modifier le volume ou la tonalité d'une chanson composée dans Garage Band, Ableton ou autre logiciel d'édition musicale.
Cependant ici nous allons plutôt récupérer les données pour les représenter sous forme graphique.

int valeur = 0;
int potentiometre = A0;

void setup()
{
  pinMode(potentiometre, INPUT);
  Serial.begin (9600);
}

void loop()
{
  valeur = analogRead (potentiometre);
  Serial.println (valeur);
  delay (100);
}


Essayons de le comprendre ensemble.
Tout d'abord, la déclaration des variables.

int valeur = 0;
int potentiometre = A0;

Nous déclarons ici deux variables de types entier ("int").
  • int valeur = 0; : cette variable permettra de stocker la valeur du potentiomètre lue par Arduino et que nous voudrons afficher dans le moniteur série.
  • int potentiometre = A0; : cette variable permet de dire à Arduino que le mot "potentiometre" est égal à "A0". Le potentiomètre est branché sur la prise A0.
Voilà c'est assez simple, passons à la suite.

La partie void setup().

void setup()
{
  pinMode(potentiometre, INPUT);
  Serial.begin (9600);
}

Elle ne comporte elle aussi que deux lignes :
  • pinMode(potentiometre, INPUT); : nous indiquons à Arduino que le potentiomètre est une "entrée". Étant donné que nous avons préalablement déclaré que potentiometre = A0, cette ligne équivaut à dire pinMode (A0, INPUT);.
  • Serial.begin (9600); : voici la nouveauté évoquée plus haut. Cette ligne sert à démarrer la communication série. La fonction Serial.begin() prend un argument entre ses parenthèses : la vitesse de communication. Cette vitesse s'exprime en "bauds", une unité largement utilisée dans le domaine des communications électroniques (téléphonie, réseaux etc). La définition théorique est un peu complexe mais disons que 9600 bauds correspondent à peu près à 9600 bits/seconde. Nous utilisons cette valeur car c'est la valeur par défaut lorsqu'on ouvre le moniteur série. Ce n'est pas la plus rapide mais elle suffira largement à nos besoins.
Nous venons donc d'initialiser le programme en indiquant le comportement de la pin "potentiometre" (A0) (pinMode (potentiometre, INPUT);)et en démarrant la communication série entre Arduino et l'ordinateur (Seriel.begin (9600);).

La partie void loop().

void loop()
{
  valeur = analogRead (potentiometre);
  Serial.println (valeur);
  delay (100);
}

Elle ne comporte elle aussi que trois lignes relativement simples :
  • valeur = analogRead(potentiometre); : cette commande nous permet de lire la valeur analogique du potentiomètre et de stocker cette valeur dans la vriable "valeur".
  • Serial.println (valeur); : cette ligne permet d'imprimer à l'écran, dans le moniteur série, la variable "valeur".
  • delay (100); : cette commande demande de faire une pause de 100ms a chaque boucle. Nous obtiendrons donc 10 mesures par secondes
Remarque : on peut afficher de différentes manières les données dans le moniteur série.
  • Ici nous avons utilisé la commande Serial.println(), le terme "println" signifiant "print line". Les données s'afficheront en colonne avec un retour à la ligne à chaque nouvelle donnée affichée.
  • Nous aurions pu utiliser la commande Serial.print(). Dans ce cas il n'y a pas de retour à la ligne et toutes les données s'affichent les unes après les autres sur une seule ligne. Cela peut vite devenir illisible. Essayez pour voir !
  • Seules les prises A0 à A5 sont capables de lire des signaux analogiques. Ce sont les prises "ANALOG IN".

Vous pouvez maintenant brancher votre arduino et téléverser le programme.

ide arduino
Cliquez sur la loupe en haut à droite de la fenêre Arduino pour faire apparaître le moniteur série. Par défaut il sera réglé sur le débit de 9600 bauds. Vous verrez alors dans la nouvelle fenêtre un signal analogique compris entre 0 et 1023 (la plage de signaux analogiques produit par Arduino, pour vous rafraichir la mémoire et pour plus de détails, voir formation Arduino partie 1).
Faites tourner le potentiomètre dans un sens ou dans l'autre pour faire varier les valeurs, comme dans l'image animée ci-dessous.

Importez vos données dans Excel


Dans l'exemple ci-dessus, les données issues de la prise A0 (potentiomètre) s'affichent dans la moniteur à l'infini. Tant que l'Arduino est branché, les données entrent.
Fermez le moniteur série, rouvrez-le, faites tourner le potentiomètre et debranchez rapidement la câble USB de l'Arduino afin d'arreter l'aquisition de données. Etant donné que nous avons ajouté un délai de 100ms, si le processus vous prend 5 secondes vous aurez 50 données.

  1. Commencez par sélectionner toutes les valeurs affichées dans le moniteur série, puis copiez-collez les dans votre éditeur de texte favori ("bloc-note" sous windows, "textedit" sous OSX).
    Utilisez les raccourcis clavier :
    • Tout sélectionner : control + a (Windows) / cmd + a (OSX)
    • Copier : control + c (Windows) / cmd + c (OSX)
    • Coller dans votre éditeur de texte : control + v (Windows) / cmd + v (OSX)
  2. Enregistrez votre document au format .txt (exemple : data.txt).
  3. Ouvrez votre tableur favori et créez un nouveau document. Je vais prendre le cas d'Excel pour la suite (cliquez sur les images pour les agrandir).
  4. Allez dans Données --> fichier texte (voir encadrés rouges).
  5. importation fichier .txt dans excel
  6. Une nouvelle fenêtre vous invite à aller chercher votre fichier .txt (ici data.txt). Sélectionnez le et cliquez sur importer.
  7. selection du fichier .txt dans excel
  8. Choisissez délimité puis cliquez sur suivant.
  9. schéma expérimental
  10. Sélectionnez tabulation et virgule (vous verrez apparaître une ligne de délimitation dans l'aperçu de données)puis cliquez sur suivant.
  11. schéma expérimental
  12. Choisissez standard puis cliquez sur terminer.
  13. schéma expérimental
  14. Sélectionnez la cellule à partir de laquelle vous voulez que votre tableau commence, puis cliquez sur OK. Choisissez la colonne B, nous insérerons des données dans la colonne A dans la section suivante
  15. schéma expérimental

Représentez vos données sous forme graphique


Vos données apparaisent maintenant sous forme d'une colonne dans Excel.
Nous allons vouloir représenter le signal provenant du potentiomètre en fonction du temps en secondes.
Nous avons déjà la valeur du signal dans la colonne B, ajoutons le temps dans la colonne A.
Nous savons que chaque valeur a été mesurée à chaque 100ms, soit 0,1 seconde.
La colonne A devra donc avoir les valeurs 0,1 / 0,2 / 0,3 etc... Entrer chaque valeur a la main, ligne par ligne, peut être très long.
Savez vous comment automatiser cette opération ?
  1. Sélectionnez la case A1, et tapez la première valeur : 0,1.
  2. Sélectionnez la case A2, et tapez la seconde valeur : 0,2.
  3. Sélectionnez les 2 cases A1 et A2.
  4. Etirez les cases en cliquant-glissant a partir du carré qui apparaît en bas à gauche de la sélection.
Excel va comprendre la suite logique et incrémenter automatiquement les valeurs.

Insérez un graphique afin de représenter vos données.

Sélectionnez les deux colonnes A et B.

schéma expérimental

Choisissez graphique en courbe.

schéma expérimental

Si vous avez bien travaillé, vous devriez obtenir un superbe graphique montrant le signal analogique mesuré aux bornes du potentiomètre en fonction du temps, comme ceci :

schéma
Comment peut-on interpréter ce graphique ?
  1. Il a fallu 2,2 secondes avant que je ne commence à tourner le potentiomètre.
  2. Je n'ai pas tourné le potentiomètre de façon régulière, particulièrement entre 5,8 et 6,1 secondes !
  3. Mon potentiomètre est arrivé au bout de sa course à 8,2 secondes.
  4. Il m'a fallu 3 secondes de plus pour débrancher l'Arduino et stopper l'aquisition des données.

Ceci est la démonstration qu'un graphique peut avoir énormément de choses à dire !