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 :
|
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 :
·
·
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)
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
) :
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]
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
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
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 ?
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.
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
8
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
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
= ?
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 = ?
Calculer l'incertitude de votre étalonnage.
Est-ce que notre étalonnage a permis de réduire
l'incertitude de notre capteur ?
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 % :
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.
-
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