BTS Mesure BTS Mesure
DébutTP 1UARTLED RGBBilanCapteursDataloggingStationUltrasonCAN seriePontRégulationCO2

Mise en œuvre d’une liaison SPI et d’une carte SD pour Datalogging

Vous pouvez télécharger le texte du TP ici.

Objectifs du TP :

  • Étude de la liaison SPI
  • Prise en main rapide de la carte SD 
  • Utilisation de la bibliothèque SD
  • Réalisation d’un datalogger :
  • Étalonnage d'un capteur de pression
  • Calcul de

    - l'incertitude élargie d'un capteur étalon Uétalon ;
    - l'ncertitude élargie du CAN de l'Arduino UArduino ;
    - l'inceritude élargie d'une modélisation Umodélisation ;
    - la propagation des incertitudes dans une chaîne de mesure.

1) La liaison SPI :

Les cartes SD utilisent la liaison série SPI (pour Serial Peripheral Interface) pour communiquer avec un microcontrôleur tel que l’Arduino uno.

Une liaison SPI est un bus de données série synchrone baptisé ainsi par Motorola, qui opère en mode Full-duplex (lecture et écriture en simultané). Les circuits communiquent selon un schéma maître-esclaves, où le maître s'occupe totalement de la communication. Dans notre cas le maître sera l’Arduino uno. Plusieurs esclaves peuvent coexister sur un même bus, dans ce cas, la sélection du destinataire se fait par une ligne dédiée entre le maitre et l'esclave appelée chip select. Notre lecteur de carte SD sera l’esclave.

Le bus SPI utilise 4 signaux logiques :

·         SCLK — Serial Clock, Horloge (généré par le maitre : l’Arduino  uno, patte D13)

·         MOSI — Master Output, Slave Input (généré par le maitre l’Arduino  uno, patte D11)

·         MISO — Master Input, Slave Output (généré par l'esclave vers l’Arduino  uno, patte D12)

·         SS — Slave Select ou Chip Select (CS), actif à l'état bas (généré par le maitre). Sur l’Arduino uno c’est la seule patte paramétrable (par ex : int chipSelect = 10;).  Pour les shields SD (carte d’extension) le CS est inscrit sur la carte en général il s’agit de D4 ou D10 (valeur par défaut).

Remarques : il peut y avoir plusieurs Chip Select si l’Arduino communique avec plusieurs périphériques en SPI.

C’est la plus rapide des liaisons séries de l’Arduino : l’horloge est à 4 MHz par défaut.

Comment fonctionne une liaison SPI

  • L'Arduino (Master) envoie des signaux à la carte SD (Slave) : Master Out Slave In (MOSI)
  • l'Arduino (Master) reçoit des signaux de la carte SD (Slave) : Master In Slave Out (MISO)

Test : un programme écrit sur une carte SD toutes les 2 secondes : xx;A;B;C/r/n  (xx étant le numéro de la mesure)

SPI Arduino SD

Nous constatons que la SPI-CLOCK est à 4 MHz. Ce qui est la fréquence par défaut pour la liaison SPI d'un Arduino.

L'analyse détaillée et le programme test sont disponibles sur ce lien.

2) Prise en main rapide de la carte SD :

La programmation d’un lecteur de carte SD est grandement facilitée par l’usage de la bibliothèque SD et de l’exemple associé Datalogger (Fichier/Exemples/SD/Datalogger ) :

SD class : SD.begin(cspin), SD.open(filepath, mode), SD.remove(filename)
File class : file.print(data) , file.println(data), file.close()


Le datalogging est un dispositif électronique programmable qui enregistre des valeurs de mesure individuelles et des séries de mesure sur une longue période. Les grandeurs sont automatiquement mesurées, numérisées et enregistrées sur un support (ici une carte SD).

Exemple d'initialisation à mettre dans le setup :

    pinMode(chipSelect, OUTPUT);    	    // Seul pinMode à déclarer dans le setup : chipSelect=10
    if (!SD.begin(chipSelect)){		    // Initialisation + contrôle, s’il y a un pb
     	 Serial.println("Erreur carte SD"); // écrire un message d’erreur
 	 return ;} 	// return nous fait sortir du sous programme setup Serial.println("Carte présente");  // Sinon l’initialisation est correcte 

Exemple d’une fonction utilisateur  ecritureSD() inspiré de l'exemple Datalogger livré avec la bibliothèque SD :

void ecritureSD() {
      File Pression = SD.open("Pression.csv", FILE_WRITE);    // Ouverture du fichier Pression
      if (Pression) {			// Si l’ouverture est correcte...
        Pression.print(P_Jeulin);	// Ecrire la pression mesurée par le capteur Jeulin	
        Pression.print(";"); 		// Séparateur pour tableau csv : « ; »
        Pression.println(MPX,3); 	// Ecrire la tension mesurée par le capteur MPX5100 avec 3 chiffres après la virgule (2 par défaut)
        Pression.close();   		// Fermeture du fichier Pression
        }          // fin de Si ouverture correcte
      else  {				  //  Sinon c’est que l’ouverture n’est pas correcte
          Serial.println("Erreur Pression.csv");  } 
                  }  // Fin de la fonction ecritureSD()

Remarque : lorsque l'on utilise un shied SD, il faut retenir que les pattes 10 à 13 sont précablées et réservées à la carte SD.
                       Seule la patte CS (10 ou 4 selon les shields) est à déclarer dans le setup, les autres sont déclarées automatiquement par la bibliothèque SD.

3) Réalisation d’un datalogger :

Le capteur de pression étudié la semaine dernière nécessite d’être étalonné.
Sinon le datasheet nous annonce une précision de 25 hPa.
L'étalonnage va nous permettre de réduire significativement cette incertitude.

L’étalon que nous allons utiliser est le pressiomètre SA 0/2000 hPa (Jeulin). Il possède une Sortie Analogique qui délivre une tension proportionnelle à la pression mesurée :

Sortie Analogique :     0 hPa => -2,5 V

                                    2 000 hPa => +2,5 V

                                    Us(V) = 0,0025 x p(hPa) - 2,5

Pour faire varier la pression nous allons utiliser une pompe à vide.

La sortie du capteur MPX5100 sera reliée à l’entrée analogique A0 de l’Arduino.

La pression dans la cloche à vide sera inférieure à 1 bar. La Sortie Analogique du pressiomètre va donc varier entre -2,5 V et 0V, ce qui est incompatible avec l’entrée analogique de l’Arduino. Mais si on inverse les deux bornes la variation sera de  0V (1000 hPa et [A] = 0) à 2,5V (0 hPa et [A] = 512).

1.      Exprimer la relation P([A]) : la pression absolue en hPa du pressiomètre Jeulin en fonction de [A]  = analogRead(A1);
     Tuto Excel : utiliser Excel pour déterminer l'équation d'une droite pour ceux qui n'aiment pas les maths...

2.  Quelle est la sensibilité s de la sortie analogique du pressiomètre Jeulin en mV/hPa ?

Voici le cahier des charges du programme à réaliser :

·         Toutes les 0,5 s relever la sortie analogique du pressiomètre et la tension du MPX5100 ;
      ou mieux (pour les plus téméraires) relever le couple de mesure à chaque fois que la pression
      du capteur Jeulin baisse de 20 hPa. Cela évite d'enregistrer les points lors de la remontée brutale en pression...

·         Calculer la pression à partir du pressiomètre à l’aide de son entrée analogique.
      PJeulin=a*q*analogRead(A1) + b;
      VMPX= q*analogRead(A0);

·         Pour le débogage afficher ces deux mesures sur le moniteur série

·       Si PJeulin < 980 et PJeulin > 100 hPa enregistrer dans un fichier sur une carte SD ces 2 mesures :  PJeulin;VMPX5100
      dans un tableau au format csv (séparateur « ; ») afin d’exploiter ce tableau de mesure à l’aide d’Excel ;
      Le test P < 980  évite d'enregistrer les points avant d'enclencher la pompe à vide
      et P > 100 hPa les mesures hors gamme (150 - 1150 hPa d'après le constructeur)...

·         Prévoir une LED RGB :

o   qui s’allume en vert durant 2s si la carte est présente ;

o   qui émet un flash bleu durant l’écriture de la carte SD.

o   qui s’allume en rouge s’il y a un pb d’écriture sur la carte SD ;

·         Récupérer le fichier de la carte SD sur Excel

·         Amélioration : dans le setup prévoir la création d’un entête pour le fichier Pression.csv
      première colonne : P Jeulin (Pa)   deuxième colonne : V MPX5100
     Ou prévoir d'effacer
le fichier précédent à chaque initialisation ( SD.remove )

Rouillé par les vacances ? structure du programme avec des commentaires.

3.     Mesurer le courant moyen consommé par votre datalogger.
        Estimer l'autonomie en heure de votre montage alimenté par une batterie de 600 mAh.
        Mesurer le nombre d'octets enregistrés sur votre carte sur 6 minutes de fonctionnement.
        Combien d'octets sont écrits sur la carte pour une heure de fonctionnement ?
        Estimer combien d'heures de données peuvent-être enregistrées sur votre carte SD.

Appel : faites valider par le professeur la partie Datalogger

4) Étalonnage

4. Réaliser une série de mesure à l’aide de la cloche à vide.
    Vérifier que les points de mesure sont bien enregistrés sur la carte SD.
    Rechercher et remplacer tous les . par des , dans Excel.

    Quelle est la plus petite pression mesurée correctement par le MPX5100 ?

5. Pour vérifier la répétabilité de la méthode réaliser 2 séries de mesures supplémentaires.
    Pour chaque série éliminer :
            - les mesures redondantes au début de la série (P>980 hPa)
            - les mesures hors gamme à la fin de la série (P<150 hPa)
            - et la remontée brutale en pression
.
    Tracer sur le même graphe les 3 séries de mesure.
    Tuto Excel : mettre plusieurs courbes sur le même graphe Excel.
    Ce capteur vous semble-t-il fidèle ?

Répétabilité
Fidélité sous des conditions de répétabilité.

Conditions de répétabilité
Conditions où les résultats d'essai indépendants sont obtenus par la même méthode sur des individus d'essai identiques dans le même laboratoire, par le même opérateur, utilisant le même équipement et pendant un court intervalle de temps.

6. Établir la droite de régression linéaire. Joindre une capture de votre courbe à votre compte-rendu.
    Tuto Excel : droite de régression et sensibilité

    Quelle est la sensibilité de notre capteur en mV/kPa ?
    Quelle est la sensibilité annoncée par le constructeur (cf datasheet) ?
    Calculer l'erreur en % entre ces 2 sensibilités.

7. Exprimer la pression P en hPa en fonction de Vout en V.

8. Incertitude de notre étalon Jeulin d'après la notice du constructeur ?
    Uétalon = ?

Incertitude élargie U : L’incertitude élargie U est donc obtenue en multipliant l’incertitude-type par un facteur k
appelé facteur d’élargissement, qui permet d’obtenir un intervalle correspondant à un niveau de confiance choisi.

Pour une loi de distribution normale (cas le plus fréquent), le facteur d’élargissement k est assimilable au coefficient de Student t.
t est disponible dans la table de Student : il varie selon le nombre de mesures n et le niveau de confiance.

L'inceritude élargie se note U  (de l’anglais « Uncertainty »)
Le Guide pour l'expression de l'incertitude de mesure (GUM) constitue le document de référence fondamental de la métrologie
Guide to the expression of Uncertainty in Measurement

9.   L'incertitude élargie pour un niveau de confiance de 95% de notre Arduino est de ± 2 LSB.
      Que vaut le quantum de notre Arduino ?
      Quelle est la résolution de notre Arduino - MPX5100 en hPa ?
      En déduire l'incertitude de l'Arduino en hPa : UArduino = ?

10. Modélisation : l'incertitude de prédiction.
      A l'aide d'Excel nous allons estimer l'incertitude du modèle.
      Tuto Excel :  la formule matricielle DROITEREG. Ecart type des résidus : u = Sey = Sn-2
      Incertitude élargie à un  niveau de confiance de 95 % U = k*u.
      Le nombre de degré de liberté est n-2, pour déterminer t  (k : facteur d'élargissement) dans la table de Student.
      Umodélisation = ?

11. Propagation des incertitudes :  
      Calculer l'incertitude de votre étalonnage.
      Est-ce que notre étalonnage a permis de réduire l'incertitude de notre capteur ?

12. Quel est le maillon faible de cette chaîne de mesure ?

13. Établir le certificat d'étalonnage de votre association MPX5100-Arduino
      Date :
      Nom des opérateurs :

      N° du capteur et référence :
      N° de l'Arduino utilisé :

      Équation du modèle linéaire obtenu :
      Incertitude élargie à un niveau de confiance de 95 % :

14. En utilisant votre équation d'étalonnage, reprendre la question de la séance précédente :
        A l'aide d'une seringue faire varier la pression.
        Proposer un protocole afin de vérifier la loi de Boyle Mariotte
        (PV = cste si T= cste)
        Réaliser ce protocole.
        Comparer vos résultats avec ceux de la séance précédente.

Appel : faites valider par le professeur la partie étalonnage

Rendre le compte rendu soit :

  • sur feuille

  • fichier word dans le répertoire de la classe 1MMESURE/Mesures : Etalonnage1_Nom1_Nom2

  • fichier word Etalonnage1_Nom1_Nom2 par email à bts.mesure@gmail.com