samedi 18 octobre 2014

Transmettre les données de l'Arduino vers un tableur (Excel ou Libre Office Calc)

Ce n'est pas la première fois que je vous parle de data logging au moyen de l'Arduino: il y a quelques mois, nous avions vu comment procéder pour que l'Arduino enregistre ses mesures sur un fichier CSV situé sur une carte SD.  Ce fichier CSV pouvait ensuite être lu par Excel.  L'inconvénient de cette méthode, c'est qu'on ne voit pas les données pendant qu'elles sont enregistrées:  on doit interrompre l'acquisition des données pour retirer la carte SD de l'Arduino,  et l'insérer dans un ordinateur muni d'Excel.

Nous avions ensuite expérimenté la transmission de données de l'Arduino (muni d'un shield Ethernet) vers le service en ligne carriots.com, ce qui nous permettait de visualiser un graphique qui se mettait à jour en temps réel.

Mais dans bien des cas, on préférerait pouvoir transmettre les données en temps réel à un ordinateur situé tout près de l'Arduino, pour que celui-ci les affiche sous forme de graphique.  Si on n'a pas besoin d'accéder à ces données à partir d'un autre ordinateur, pourquoi se donnerait-on la peine de les expédier sur internet avec un shield Ethernet ou Wi-Fi?

Pour ce faire, on peut écrire notre propre programme en Processing ou en Python, mais on peut aussi utiliser un tableur comme Excel ou LibreOffice Calc. Et vous savez quoi? Ce n'est pas seulement possible, c'est même plutôt facile!


PLX-DAQ et Excel

Pour utiliser PLX-DAQ, vous aurez besoin d'un ordinateur muni du logiciel Excel. Vous n'avez pas Excel?  Avant de vous précipiter vers les employés de Bill Gates pour leur offrir une partie substantielle de votre argent, lisez plutôt la partie de cet article qui parle de l'utilisation de Libre Office Calc, qui est totalement gratuit.

PLX-DAQ est une macro pour Excel mise au point par la société Parallax pour permettre aux microcontrôleurs qu'elle commercialise d'envoyer des données vers Excel.  C'est gratuit, et ça fonctionne avec n'importe quel microcontrôleur capable de communication série, ce qui inclut bien sûr l'Arduino!

Le circuit

Pour faire un premier essai rapide, un potentiomètre achemine un signal analogique à l'entrée A0 de l'Arduino.  C'est ce signal qui sera envoyé à Excel pour être mis en graphique. Évidemment, l'Arduino doit être relié à un des ports USB de l'ordinateur.

Le sketch Arduino

Le sketch à téléverser dans l'Arduino est plutôt simple:  il consiste en gros à lire la valeur de l'entrée A0, et de la transmettre par liaison série (donc Serial.Print et Serial.Println, comme quand on veut afficher quelque chose dans le moniteur Série).  Chaque fois que la macro PLX-DAQ reçoit la commande DATA suivie d'une liste de données séparées par des virgules, elle place ces données sur la prochaine ligne du tableur.

TIME (en majuscules) est une instruction qui indique à la macro d'insérer l'heure (ce sera l'heure telle que réglée dans l'ordinateur qui exécute Excel).
.

.

Installation et utilisation de la macro

Par défaut, Excel est plutôt paranoïaque en ce qui concerne les macros:  en mode "Niveau de sécurité élevé", il refuse de les exécuter, par crainte qu'elles contiennent des virus.  Pour vérifier le niveau de sécurité de votre exemplaire d'Excel (et pour le modifier s'il n'est pas adéquat), choisissez "Options" dans le menu "Outils".




Dans la boîte de dialogue "Options", vous cliquez sur l'onglet "Sécurité", puis sur le bouton "Sécurité des macros..."


Vous pouvez alors sélectionner "Moyenne":  dorénavant, lorsqu'un fichier contiendra une macro, Excel vous demandera l'autorisation de l'exécuter.



Il faut maintenant télécharger le fichier d'installation sur le site de Parallax.  Une fois décompressé, le répertoire présente ce contenu (j'ai fait mes tests avec Windows 7):


Vous lancez l'application "plx_daq_install.exe", qui installera un dossier "Parallax Inc" dans le menu des programmes:


Lancez le fichier "PLX-DAQ Spreadsheet":  il s'agit d'un tableur Excel qui contient la macro "PLX-DAQ".  Si vous avez choisi le niveau de sécurité moyen, Excel vous avertit de la présence de macros (et vous choisissez évidemment de les activer).


Une feuille de calcul familière d'Excel s'affiche à l'écran.  Elle comporte déjà des données, mais il ne s'agit pas, pour l'instant, de celles qui proviennent de notre Arduino.

Si tout va bien, vous devriez apercevoir la boîte de dialogue illustrée ci-dessous.  Dans cette fenêtre, il faut sélectionner le port série qui correspond à l'Arduino (dans mon cas c'état COM3, donc j'ai sélectionné 3) et la vitesse de transmission des données (9600, puisque c'est cette valeur que j'ai établie dans mon sketch Arduino).  Il s'agit ensuite de cliquer sur le bouton "Connect" pour que l'état de l'entrée A0 (ainsi que le moment où la mesure a été prise) s'affiche dans le tableur.


Par défaut, le fichier "PLX-DAQ Spreadsheet" ne comporte pas de graphique, mais rien de vous interdit d'en ajouter un.  Si vous le préparez à l'avance, avant l'acquisition des données, le graphique se met à jour, en temps réel, à mesure qu'Excel reçoit les informations.  Ci-dessous, le résultat obtenu pendant que je tournais lentement le bouton du potentiomètre.



OpenDaqCalc et LibreOffice Calc

Philippe Loussouarn, animateur du site RC Navy,  a mis au point une macro similaire à PLX-DAQ, mais conçu pour être utilisée avec LibreOffice Calc plutôt qu'avec Excel:  sa macro s'appelle OpenDaqCalc.

Cette fois, vous devez vous assurer que la suite LibreOffice est installée sur votre ordinateur.  Si ce n'est pas déjà fait, vous pouvez vous la procurer ici, c'est entièrement gratuit.  (Cette fois, fidèle à l'esprit "logiciel libre", j'ai effectué mes tests sous Linux Mint),

Le circuit

C'est le même que dans notre version "PLX-DAQ":  pour un test rapide, nous tournerons le bouton d'un potentiomètre relié à l'entrée A0 de l'Arduino.

Le sketch Arduino

Le même sketch présenté plus haut pour la transmission de données à Excel fera parfaitement l'affaire!

Installation et utilisation de la macro

LibreOffice Calc est tout aussi prudent qu'Excel en matière de macros:  par défaut, il est réglé de façon à n'exécuter aucune macro.  Vous devrez donc faire les réglages nécessaires pour autoriser leur exécution.

On commence par "Options...",  au bas du menu "Outils".


Dans la liste de gauche, vous choisissez "LibreOffice/Sécurité", et vous cliquez sur le bouton "Sécurité des macros...".


Et vous choisissez un niveau de sécurité moyen, pour que LibreOffice Calc vous demande l'autorisation d'exécuter des macros, lorsque vous ouvrez un fichier qui en comporte.

Ensuite, vous téléchargez le fichier OpenDaqCalc.zip sur le site RC Navy, vous le décompressez, et vous ouvrez le fichier "OpenDaqCalc.ods".

 

Il s'agit d'un tableur qui comporte quelques colonnes de données (mais pour l'instant, ce ne sont pas celles qui proviennent de notre Arduino) et un graphique.

Pour démarrer la macro, on va dans le menu "Outils/Macros/Exécuter la macro...".


Ensuite vous choisissez, dans la liste de gauche,  "OpenDaqCalc.ods/Standard/Module 1", et "Main" dans la liste de droite.  Cliquez sur le bouton "Exécuter".


Maintenant que la macro est en fonction, vous devriez voir cette petite boîte de dialogue.  Il faut s'assurer que le port série sélectionné est bien celui qui correspond à l'Arduino, et que la vitesse de transmission est la même que dans notre sketch (9600 si vous utilisez mon sketch).  Lorsque vous cliquez sur le bouton "Connect", le tableur se met à afficher les données qu'il reçoit en provenance de l'Arduino.


Le graphique est réglé pour afficher les données de la troisième et de la quatrième colonne, alors que nos données se trouvent dans les deux premières colonnes:  un clic droit sur le graphique vous permettra de modifier la plage des données qui seront mises en graphique:


Et voici ce que j'ai obtenu en tournant lentement le bouton du potentiomètre:




J'ai eu l'idée de cet article après avoir lu cette discussion sur le forum Arduino.  Merci pierrotm777!

Yves Pelletier (Twitter:  @ElectroAmateur)

36 commentaires:

  1. Bonjour, j'aurai voulu savoir comment faire pour que plx daq fonctionne sous windows 8?

    RépondreSupprimer
    Réponses
    1. Je ne sais pas, ne disposant d'aucun appareil fonctionnant sous Windows 8.

      Supprimer
  2. J'ai office 2010 et ca ne marche pas : Message d'erreur de microsoft forms en lancant PLX-DAQ Spreadsheet.xls (Impossible de charger le objet car indisponible... puis erreur VB 424. J'ai windows 7.

    RépondreSupprimer
    Réponses
    1. Il semble que Parallax ne supporte plus PLX-DAQ: il ne sera donc pas mis à jour pour les versions plus récentes d'Office et de Windows. Ils recommandent www.makerplot.com comme solution de remplacecement, mais ce n'est pas gratuit...

      Supprimer
  3. Merci beaucoup pour le développement de cette macro.
    La communauté des profs de Sciences de l'ingénieur des lycées de Strasbourg est toute excitée.
    Comment peut-on afficher plusieurs valeurs mesurées en même temps sur plusieurs colonnes Excel ?

    Merci d'avance

    RépondreSupprimer
    Réponses
    1. En modifiant le fichier Arduino comme suit :
      Serial.print("DATA,TIME,"); // envoi du temps et la mesure à Excel
      Serial.print(ValeurMesuree0);
      Serial.print(",");//c'est cette virgule qu'il ne faut pas oublier !
      Serial.println(ValeurMesuree1);
      delay(1000); // 1 seconde d'attente entre chaque série de mesures

      JMM

      Supprimer
    2. Bonjour et merci pour ces infos cependant j'ai un problème, la troisième colonne Excel n'est pas prise en compte, du coup la première colonne est normale et affiche le temps mais dans la seconde elle affiche mes deux mesures (sur deux lignes).
      Ma question est donc comment faire pour afficher ma deuxième mesure dans la troisième colonne ?

      Supprimer
    3. Attention au retour de ligne ln, il faut le mettre a la fin uniquement.

      int ValeurMesuree0 = analogRead(Mesure_Pin0);
      int ValeurMesuree1 = analogRead(Mesure_Pin1);

      Serial.print("DATA,TIME,");
      Serial.print(ValeurMesuree0);
      Serial.print(",");
      Serial.println(ValeurMesuree1);

      Supprimer
  4. Bonjour,

    En appliquant le Tuto sur la "Transmission de données Arduino vers Calc" , impossible d'installer la macro « OpenDaqCalc » malgré la sécurité des macros imposée à "Moyenne" (ou" faible").

    Il me signale "WinChangeRate.bat not found in dossier xxx " alors que le fichier y figure bien !

    nota 1 :le port sélectionné ( 7) est bien celui fourni par la carte UNO et la vitesse est bien 9600 bauds comme dans votre sketch.

    nota 2 : W7 / 64 bits, Open office 4.1.1, UNO Rev3


    Merci d'avance

    CG

    RépondreSupprimer
    Réponses
    1. hey , apres 3 ans je te répond pas forcement pour toi mais pour les autres comme moi qui ont ton probléme ;) . Moi j'ai mis un nom de dossier avec espace , juste supprime l'espace ou remplace le par un "_"

      Supprimer
  5. Merci bcps ca marche , ajouter dautres pages dans ce genre la

    RépondreSupprimer
  6. Pourriez vous m'indiquer comment faire remonter la donnée calculée totalForce dans excel sur le code suivant
    void setup(void)
    {
    Serial.begin(9600); // We'll send debugging information via the Serial monitor
    }

    void loop(void)
    {
    // Lecture des capteur FRS 1 et FSR 2
    fsr1Reading = analogRead(fsr1Pin); // Lit la valeur de FSR1 sur a0
    Serial.print("Analog reading FSR1 = "); // Affiche sur PC "Analog reading FSR1 ="
    Serial.println(fsr1Reading); // Affiche la valeur binaire lu de FRS1
    fsr2Lu = analogRead(fsr2Pin); // Lit la valeur de FSR2 sur a1
    Serial.print("Analog reading FSR2 = "); // Affiche sur PC "Analog reading FSR2 ="
    Serial.println(fsr2Lu); // Affiche la valeur binaire lu de FRS2

    // analog voltage reading ranges from about 0 to 1023 which maps to 0V to 5V (= 5000mV)
    fsr1Voltage = map(fsr1Reading, 0, 1023, 0, 5000); // Convertie la valeur FSR1 Numerique en milli Volt
    Serial.print("Voltage FRS1 reading in mV = "); // Affiche sur PC "Voltage FRS1 reading in mV = "
    Serial.println(fsr1Voltage); // Affiche la valeur convertie en millivolts de FRS1
    fsr2Voltage = map(fsr2Lu, 0, 1023, 0, 5000); // Convertie la valeur FSR2 Numerique en milli Volt
    Serial.print("Voltage FRS2 reading in mV = "); // Affiche sur PC "Voltage FRS2 reading in mV = "
    Serial.println(fsr2Voltage); // Affiche la valeur convertie en millivolts de FRS2

    //================== Traitement de FSR 1 ===========================================================

    if (fsr1Voltage == 0)
    {
    Serial.println("No pressure sur FSR1");
    fsr1Force = 0; // la force FSR1 est nulle
    }
    else
    {
    // The voltage = Vcc * R / (R + FSR) where R = 10K and Vcc = 5V
    // so FSR = ((Vcc - V) * R) / V yay math!
    fsr1Resistance = 5000 - fsr1Voltage; // fsr1Voltage is in millivolts so 5V = 5000mV
    fsr1Resistance *= 10000; // 10K resistor
    fsr1Resistance /= fsr1Voltage;
    Serial.print("FSR1 resistance in ohms = ");
    Serial.println(fsr1Resistance);

    fsr1Conductance = 1000000; // we measure in micromhos so
    fsr1Conductance /= fsr1Resistance;
    Serial.print("Conductancede FSR1 in microMhos: ");
    Serial.println(fsr1Conductance);

    // Use the two FSR1 guide graphs to approximate the force
    if (fsr1Conductance <= 1000)
    {
    fsr1Force = fsr1Conductance / 80;
    Serial.print("Force in Newtons de FSR1: ");
    Serial.println(fsr1Force);
    }
    else
    {
    fsr1Force = fsr1Conductance - 1000;
    fsr1Force /= 30;
    Serial.print("Force in Newtons de FSR1: ");
    Serial.println(fsr1Force);
    }
    }

    /

    if (fsr2Conductance <= 1000) // Conductance inferieur ou egal à 1000
    {
    fsr2Force = fsr2Conductance / 80;
    Serial.print("Force en Newtons de FSR2: "); // Affiche la force sur FSR2 avec conductance < 1000
    Serial.println(fsr2Force);
    }
    else
    {
    fsr2Force = fsr2Conductance - 1000; // Conductance superieur à 1000
    fsr2Force /= 30;
    Serial.print("Force en Newtons de FSR2: "); // Affiche la force sur FSR2 avec conductance > 1000
    Serial.println(fsr2Force);
    }
    }

    forceTotal = fsr1Force + fsr2Force; // Sommes des 2 forces
    Serial.print("La sommes des Forces in Newtons est de : "); // Affiche la force sur FSR2 avec conductance > 1000
    Serial.println(forceTotal);

    Serial.println("--------------------");
    delay(2000);
    }

    RépondreSupprimer
  7. forceTotal = fsr1Force + fsr2Force; // Sommes des 2 forces
    Serial.print("DATA,TIME,"); // envoi du temps et la mesure à Excel
    Serial.println(forceTotal);

    RépondreSupprimer
  8. Merci beaucoup pour cette solution!!
    On refait la même chose mais par le biais d'une com GPRS...? ;-)

    RépondreSupprimer
  9. Bonjour et merci pour ce projet.
    Je ne parviens pas à installer la macro PLX-DAQ, l'installation est stoppée par le message suivant : "Clé non valide pour l'utilisation dans l'état spécifié".
    Une idée pour résoudre ce problème ?
    D'avance merci.

    RépondreSupprimer
  10. Bonjour et encore merci pour ce projet.
    J'ai un problème pour afficher dans Excel deux mesures car la commande Serial.print(","); n'est pas acceptée (Arduino V1.6.8).
    Merci encore
    void loop()
    {

    tension = analogRead(pintension);
    tension = tension * 5 / 1023;
    courant = analogRead(pincourant);
    force = analogRead(pinforce);


    Serial.print("DATA,TIME,");
    Serial.print(tension);
    Serial.print(",");
    Serial.println(courant);

    delay(1000);

    }

    RépondreSupprimer
  11. Bonjour,
    au moment d'exécution du module 1 de la macro, j'ai ce message :LinuxSeriald not found in /home/norbert/.cache/.fr-3R0gBP//

    que signifie t-il ? je suis un débutant

    Merci

    RépondreSupprimer
  12. Bonsoir,

    J'ai un probléme. Au moment de la compilation avec mon windows 8, il y'a [StampDAQ do not connect. please check your port setting] qui apparait. Merci de me donner des indices pour avancer.

    RépondreSupprimer
  13. Bonjour,
    J'ai un problème concernant l'affichage des données sur PLX-DAQ. Tout fonctionnait très bien sur Excel 2007 et du jour au lendemain, plus aucune données sur Excel. Je n'ai aucun message d'erreur, le port sélectionné est bien le bon, le baud également, sur la fenêtre il est même écrit "connected" avec C et R en vert et R qui clignote, le pilote du port est aussi à jour. J'ai désinstallé et réinstallé le logiciel arduino et PLXDAQ. Mon code est le même que sur un autre ordinateur qui lui fonctionne. J'ai également changé de carte arduino due. Sur la carte les diodes L et ON sont allumées et la diode TX clignote. Je commence a être à court d'idée. Merci d'avance pour votre aide.

    RépondreSupprimer
  14. Bonjour,

    Merci beaucoup pour cette application très intéressante. Je suis arrivé à faire tourner OpenDaqCalc avec libreOffice. Tout se passe correctement. Le seul problème réside dans le fait que les données s'affichent sur le tableur de manière saccadée. Un train de 8 mesures (températures acquise avec un tmp36) arrive toutes les 8 secondes environ.C'est un peu ennuyeux pour de l'acquisition en temps réel. Merci par avance pour vos commentaires et conseils. Arnaud

    RépondreSupprimer
    Réponses
    1. Je dirais qu'il faut augmenter la valeur de la commande "delay"

      Supprimer
  15. Je fais face aussi au même problème, toutes mes données arrivent toutes les 10 secondes, avec la même heure pour chacune des données, libre office plante aussi à chaque fois que je lance l’acquisition des données, je ne peux plus l'arrêter quand j'en ai envie. Merci d'avance, en l'attente d'une réponse.

    RépondreSupprimer
  16. Bonsoir
    Merci pour cet intéressant tuto, mais chez moi ça ne marche pas.
    J'utilise Office 2007 sous Windows 10 et l'IDE Arduino 1.6.9.
    PLX-DAQ se connecte systématiquement après le deuxième appui sur "Connect". Le voyant "C" (connect)est vert et le voyant "R" (receive)clignote vert/rouge au rythme de l'instruction "delay" du sketch Arduino, mais...aucune donnée n'apparait dans la feuille Excel... Dommage.
    Le site Parallax dit qu'il faut Windows 98 (!!) et Excel 2000 à 2003. A l'occasion j'essaierai un Office 2003 sous Windows 7.
    Si quelqu'un a d'autres infos concernant des configurations fonctionnelles, je suis preneur. D'avance merci.
    JC

    RépondreSupprimer
  17. Oui en effet il faut une version 32 bit pour que ca marche à mon bureau avec windows 7 32 bit et excel 2010 ca fonctionne.

    RépondreSupprimer
  18. Excellent, marche du premier coup avec Excel 2010, sous Win 7, 64 bits, sans paramétrage de sécurité, seulement confirmer la macro.
    Le graphe se trace en temps réel, à mesure de l'arrivée des datas.
    Du coup je vais laisser tomber matplotlib sous Python, pourtant une belle bibli, mais l'utilisateur n'aura pas à installer Python pour tracer une courbe d'AFR(N).

    RépondreSupprimer
  19. Merci!! Fonctionne très bien avec windows 10 et office 7.
    Je m'en sers pour régler une régulation de niveau.

    RépondreSupprimer
  20. Bonjour, votre tuto m'intéresse mais je n'ai jamais utilisé Ardino...
    Est-il possible sur ce principe ou au autre d'utiliser plusieurs claviers pour que chaque clavier renseigne une cellule différente d'Excel en live ? (win10/64b & Excel 2010/32b)
    Merci

    RépondreSupprimer
  21. Bonjour,
    j'ai suivies le tuto, mais une fois sur OpenDaqCalc, il ne reconnais pas le COM de l'arduino on potentiomètre fonctionne, ainsi que la carte.
    Pouvez-vous m'aider ?
    PS : Quand je lance OpenDaqCalc, il m'indique un message,comme quoi il faut installer Java. Cela à t-il un lien avec mon problème ??

    RépondreSupprimer
  22. Bonjour,
    Je réalise un projet avec arduino nécessitant le transfert de données sur Excel.
    J'ai téléchargé le fichier, cependant, lorsque j'ouvre la feuille Excel, une erreur du type "Impossible de charger les objets car ils ne sont pas disponibles sur cette machine".
    De ce fait je n'ai pas de boîte de dialogue s'affichant.
    Quelqu'un aurais-il une solution à ce problème?
    Merci :)

    RépondreSupprimer
  23. J ai téléchargé le fichier OpenDaqCalc ,la macro main , j ai exécuter la macro mais pas de boite de dialogue qui arrive dommage

    RépondreSupprimer
  24. De ce fait je n'ai pas de boîte de dialogue s'affichant.
    Quelqu'un aurais-il une solution à ce problème?
    Merci :)

    RépondreSupprimer
  25. Bonjour et merci pour ce tutos.
    Marche très bien (je récupère plusieurs entrée analog sur plusieurs colonne).
    Par contre, dans le cas d'une seul valeur, y a-t-il un moyen de toujours écrire la valeur lue dans un seule cellule pour éviter le défilement?
    Bonne journée.

    RépondreSupprimer
  26. Bonjour
    Est-ce que c'est possible de remplir les cases d'Excel colonne par colonne, et non pas ligne par ligne ?
    Merci

    RépondreSupprimer
  27. Cela ne marche pas pour moi avec OpenDaqCalc, tout semble bon et il ne se passe rien dans libre office

    RépondreSupprimer
  28. Bonsoir,
    Le fichier fonctionne très bien, j'ai bien mes données récupérées sous Excel mais j'ai 2 questions.
    1- Comment faire afficher 2 données?
    2- Lorsque j'active la partie de récuperation de donnée, mon capteur IR en mode tachimetre ne fonctionne plus.

    Pour le tachimetre, j'ai récupéré un bout de sketch que j'ai réadapter pour mon besoin, soit utilisation d'un capteur SHARP qui va mesurer l'oscillation d'une cuillere et le capteur IR qui va mesurer la rotation d'un pièce.

    Avez vous une idée?


    RépondreSupprimer
  29. Bonsoir,
    Je n'arrive pas à voir mes données écrites dans le fichier Excel lorsque je connecte mon microcontrôleur à la machine et à PLX-DAQ. Le port de communication est bien respecté sauf qu'une fois que j'appuie sur mes boutons poussoirs, les données sont bien transmises mais pas écrites dans Excel. Comment faire s'il vous plait?

    RépondreSupprimer