Capteur de pression absolue Grove MPX5700AP

Introduction

Le module Grove MPX5700AP est un capteur de pression absolue délivrant une tension analogique compatible 5 V (Arduino) ou 3,3 V (Pyboard, Micro:bit, …). Pour rappel, la logique 3,3 V est devenue la norme dans le domaine des microcontrôleurs.

Présentation du MPX5700AP

Le circuit  MPX5700AP est un capteur de pression absolue analogique alimenté en 5 V. La mesure de pression s’échelonne de 0 kPa à 700 kPa pour une tension de sortie allant de 0,2 V à 4,7 V. Sa précision est au maximum égale à 2,5 % de la plage de mesure (700 kPa).

L’expression de la pression P (en kPa) en fonction de la tension U fournie s’exprime par la relation suivante :

    \[P=\dfrac{P_{max}}{U_{max}-U_{min}}\times (U-U_{min})=\dfrac{700}{4,7-0,2}\times (U-0,2)\]

    \[\boxed{ P = \dfrac{700}{4,5} \times (U - 0,2) }\]

Fonctionnement sous 3,3 V

Pas mal d’électronique a été ajouté au capteur MPX5700AP pour rendre ce module Grove fonctionnel sous 3,3 V. En particulier, la tension de sortie est atténuée par un circuit d’amplification (diviseur de tension).

A=\dfrac{R5}{R5 + R4} = \dfrac{4,7}{4,7+2,0}\approx 0,701.

U_{min} = 0,701\times0,2 = 0,14~\rm V

U_{max} = 0,701\times4,7= 3,29~\rm V

Le tableau ci-dessous donne les caractéristiques de ce module Grove lorsqu’il est alimenté en 3,3 V.

  Minimum Maximum
Pression (kPa) 0 700
Tension analogique (V) 0,14 3,29
Tension numérique 12 bit (Pyboard) 174 4095
Tension numérique 10 bit (Micro:bit) 44 1023

L’expression de la pression P (en kPa) en fonction de la tension analogique U devient donc :

    \[P=\dfrac{P_{max}}{U_{max}-U_{min}}\times (U-U_{min})=\dfrac{700}{3,29-0,14}\times (U-0,14)\]

    \[\boxed{P = \dfrac{700}{3,15}\times(U-0,14)}\]

Lecture de la pression en langage Python

Pyboard (Micropython)

Pour la tension en valeur numérique (entier) sous 12 bit :

    \[P=\dfrac{P_{max}}{U_{max}-U_{min}}\times (U-U_{min})=\dfrac{700}{4095-174}\times (N-174)\]

Le programme ci-dessous a été testé sur une carte Feather STM32F405 Express d’Adafruit.

# En cours de mise à jour !

Micro:bit (Micropython)

    \[P=\dfrac{P_{max}}{U_{max}-U_{min}}\times (U-U_{min})=\dfrac{700}{1023-44}\times (N-44)\]

# Mesure de pression Grove MPX5700AP 15-700 kPa > 0.2-4.7V
from microbit import *

Vcc = 3.09    # Mesure au voltmètre de la tension d'alimentation entre 3V3 et GND
No  = 3       # Décalage (entier) obtenu pour une tension de OV sur l'entrée analogique

Pmin = 15     # Pression minimale du capteur
Pmax = 700    # Pression maximale du capteur
              # Amplification = 3,3/4,7 = 0.702
Umin = 0.14   # Tension minimale (0.2V * 0.702 = 0.140V)
Umax = 3.3    # Tension maximale (4.7V * 0.702 = 3.300V)



while True:
    N = pin1.read_analog()                     # Lecture de la tension numérique
    U = (N-No)*Vcc/(1023-No)              # Calcul de la tension
    P = Pmax/(Umax-Umin)*(U-Umin)  # Calcul de la pression
    print(P, "kPa")                                      # Affichage
    sleep(1000)                                        # Temporisation (ms)

Application : vérification de la loi de Mariotte

Les programmes  suivants proposent de vérifier la loi de Mariotte à partir d’une seringue de 60 mL fournie avec le module Grove MPX5700AP.

La liste des différents volumes à fixer est à compléter dans le code. Les mesures sont affichées au format CSV. Elles devront être copiées vers un logiciel de traitement de données.

Pyboard (Micropython)

# Vérification de la loi de Mariotte avec module Grove MPX5700AP 15-700 kPa > 0.2-4.7 V
from pyb import Pin, ADC

adc = ADC(Pin("A0"))              # Déclaration du CAN

Pmin = 0                         # Pression minimale
Pmax = 700                        # Pression maximale
                                  # Amplification = 3,3/4,7 = 0.702
Umin = 174                        # Tension minimale (0.2V * 0.702 = 0.140V) N=174
Umax = 4095                       # Tension maximale (4.7V * 0.702 = 3.300V) N=4095

#volume   = [40]                  # Tableau initial des volumes à compléter - 40 mL pour pression atmosphérique
volume   = [60,50,40,35,30,25]    # Proposition de volumes
pression = []                     # Tableau des pressions

# Mesures
for vol in volume :                                   # Parcours des volumes prédéfinis
    input("Régler le volume sur " + str(vol) + " mL") # Validation du réglage du volume
    U = adc.read()                                    # Lecture de la tension numérique (12 bit)
    P = (Pmax)/(Umax-Umin)*(U-Umin)        # Calcul de la pression du capteur
    print(P, "kPa")                                   # Affichage de la pression
    pression.append(P)                                # Ajout de la mesure dans le tableau de pression

# Affichage au format CSV
print("V ; P")                        # Affichage entête des grandeurs
print("mL ; hPa")                     # Affichage entête des unités
for i in range(len(volume)):          # Parcours des points de mesures
    print(volume[i],";",pression[i])  # Affichage des mesures

Résultats :

# En cours de mise à jour

Micro:bit (Micropython)

# Vérification de la loi de Mariotte avec module Grove MPX5700AP 15-700 kPa > 0.2-4.7 V
from microbit import *

Vcc = 3.09    # Mesure au voltmètre entre 3V3 et GND
No  = 4       # Décalage (entier) obtenu pour une tension de OV

Pmin = 0     # Pression minimale
Pmax = 700    # Pression maximale
              # Amplification = 3,3/4,7 = 0.702
Umin = 0.14   # Tension minimale (0.2V * 0.702 = 0.140V) N=44
Umax = 3.3    # Tension maximale (4.7V * 0.702 = 3.300V) N=1023

#volume   = [40]                  # Tableau initial des volumes à compléter - 40 mL pour pression atmosphérique
volume   = [60,50,40,35,30,25]    # Proposition de volumes
pression = []                     # Tableau des pressions

# Mesures
for vol in volume :                                   # Parcours des volumes prédéfinis
    input("Régler le volume sur " + str(vol) + " mL") # Validation du réglage du volume
    N = pin1.read_analog()                            # Lecture de la tension numérique (10 bit)
    U = (N-No)*Vcc/(1023-No)                          # Calcul de la tension
    P = (Pmax)/(Umax-Umin)*(U-Umin)       # Calcul de la pression
    print(P, "kPa")                                   # Affichage de la pression
    pression.append(P)                                # Ajout de la mesure dans le tableau de pression

# Affichage au format CSV
print("V ; P")                        # Affichage entête des grandeurs
print("mL ; hPa")                     # Affichage entête des unités
for i in range(len(volume)):          # Parcours des points de mesures
    print(volume[i],";",pression[i])  # Affichage des mesures

Résultats :

# En cours de mise à jour
Pour marque-pages : Permaliens.

6 réponses à Capteur de pression absolue Grove MPX5700AP

  1. Mathis Launay dit :

    Bonjour,

    Il me semble que le capteur de pression MPX5700AP est mesure une pression différentielle et non une pression absolue.

    Mathis

  2. Wis dit :

    Bonjour,

    Merci pour ces explications bien utiles. Dans l’optique de vérifier la loi de Mariott avec une carte microbit, je cherche à comprendre le fonctionnement de votre code et aurait quelques questions:

    1. Comment arrivez vous aux deux relations du début, donnant l’expression de P en fonction des tensions? Je trouve les valeurs que vous donnez dans la documentation du capteur, et comprends comment vous obtenez les valeurs minimale grâce au facteur d’atténuation, mais ne trouve pas de trace de ces expressions.

    2. À propos de facteur d’atténuation, où avez vous trouvez sa valeurs? je ne la trouve nulle part.

    Encore merci pour cette page.

    • Bonjour,
      J’ai fait une erreur dans la formule. Il faut prendre la Pmin = 0 kPa (et non 15kPa). Désolé.

      Concernant l’atténuation, sur le schéma électrique du module Grove, la tension est atténuée par un diviseur de tension composé de deux résistances de R5=4,7k et R4=2k (1%).
      Le calcule donne donc R5/(R5+R4) = 4,7/6,7 = 0,701…

      Dans mon article, j’avais fait des mesures.

  3. SABRA dit :

    Bonjour, et merci pour ce tuto,

    Deux questions :
    Je ne trouve rien sur le fait que ce capteur ait été adapté pour la carte microbit. Où avez-vous trouvé cette information?

    Par ailleurs, je ne comprends pas pourquoi vous prenez 15 kPa comme tension minimale. En lisant la datasheet, j’aurais plutôt mis 0.

    • Bonjour,
      Effectivement, le capteur MPX5700AP seul ne fonctionne pas sous 3,3 V. Uniquement sous 5 V.
      Par contre le module Grove MPX5700AP a été adapté électroniquement sous 3,3 V et 5 V. Il est donc compatible avec la plupart des microcontrôleurs y compris le micro:bit.

      Pour le calcul de la pression à partir de la tension, le datasheet précise bien pour la version MPX5700A : 0 kPa -> 0,2V et 700 kPa -> 4,7V
      Donc Pmin = 0 => P = 700/4,5*(u-0,2)

      Je vous remercie cette remarque importante ! Désolé pour l’ambiguïté.

Répondre à SABRA Annuler la réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *