Skyduino:~#
Articles
arduino, programmation, tutoriel

[Arduino] Utilisation d’un MPXV4115V (capteur de pression négative)

Bonjour tout le monde !

Ça fait déjà quelques temps que je n’ai pas fait de sketch arduino, alors aujourd’hui je rattrape le coup en vous proposant un petit code arduino bien sympa 😉

Aujourd’hui je vous propose de faire mumuse avec un MPXV4115V !

Il s’agit d’un capteur de pression différentielle négatif (il mesure donc une aspiration) compensé en température.
Le gros avantage c’est qu’il renvoi une tension proportionnel à la pression mesuré, il est donc trés facile à mettre en œuvre !

Première étape, le câblage !

Rien de plus simple, 3 broches, VCC (+5v, sur la broche 2), GND (sur la broche 3), OUT sur la broche 4).

Remarque: la broche 1 est repéré par un petit angle « cassé », c’est assez difficile de le voir (même sur la photo).

Un morceau de protoboard, un peu de soudure, un connecteur, et tout est prêt pour commencer !

Enfin, presque …
Il nous faut aussi une seringue, histoire de pouvoir faire une différence de pression, sinon on ne pourra pas tester notre systéme 😉

Étape 2 : faire des math …

Je sait c’est pas drôle les math, mais il faut bien trouver une formule pour convertir la mesure de 0 à 1023 en sortie de analogRead en une mesure en Kpa (kilo pascal) !

Si on regarde dans le datasheet il nous est donnés une fonction de transfert nominal :

Ainsi on sait que :
Vout = Vs * (P * 0.007652 + 0.92)

On peut donc en déduire que :
P = ((Vout / Vs) – 0.92) / 0.007652 (avec Vout = Vraw + Vcalibration et Vs = Vmax = 1023)

Vraw : valeur en sortie de analogRead (0 ~ 1023)
Vcalibration : float correspondant à la différence entre la valeur 0 « idéal » et la valeur 0 réel au moment de la calibration
Valeur calculé ainsi : Vcalibration = (0.92 * Vmax) – Vraw (Vraw au moment de la calibration)

On peut donc en déduire une fonction en c :

/* Fonction de conversion valeur numérique <> pression en Kpa */
float raw2kPa(int raw, float calibration) {
  /*
   * D'aprés le datasheet du MPXV4115V
   * Vout = Vs * (P * 0.007652 + 0.92)
   * soit : P = ((Vout / Vs) - 0.92) / 0.007652
   * avec Vout = Vraw + Vcalibration et Vs = Vmax = 1023
   */
  return (((raw + calibration) / 1023.0) - 0.92) / 0.007652;
}

Et le code complet, testé et commenté 😉

/*
 * Code d'exemple d'utilisation d'un capteur MPXV4115V
 * (Capteur de pression négative avec compensation en température)
 */

/* Defines */
#define CAP_VCC A0 // Alimentation sans câblage
#define CAP_GND A1 // (utilise deux I/O en rail d'alimentation) 
#define CAP_OUT A2 // Sortie du capteur de pression

// Coefficient de calibration du capteur
float calibration;

void setup() {
  /* Astuce d'alimentation sans câblage */
  pinMode(CAP_VCC, OUTPUT);
  pinMode(CAP_GND, OUTPUT);
  digitalWrite(CAP_VCC, HIGH);
  digitalWrite(CAP_GND, LOW);

  // Initialisation du port série
  Serial.begin(115200);

  // Calibration du capteur 
  // Il faudrait prendre plusieurs échantillons puis faire une moyenne pour bien faire.
  // Mais comme il s'agit d'un tutoriel je vais rester simple 😉
  calibration = 941.16 - analogRead(CAP_OUT); // 941.16 correspond à la valeur idéal pour une pression de 0 Kpa
  // Il s'obtient ainsi : x = 0.92 * Vmax  (avec Vmax la valeur pour VCC soit 1023)
  
  // Affichage de la valeur de calibration
  Serial.print("Calibration: "); // (pour debug)
  Serial.println(calibration, DEC);
}

void loop() {
  // Mesure de la tension en sortie du capteur
  int val = analogRead(CAP_OUT);
  
  // Calcul de la pression réel
  float mesure = raw2kPa(val, calibration);

  // Affichage + delai (no flood)
  Serial.println(mesure, DEC);
  delay(500);
}

/* Fonction de conversion valeur numérique <> pression en Kpa */
float raw2kPa(int raw, float calibration) {
  /*
   * D'aprés le datasheet du MPXV4115V
   * Vout = Vs * (P * 0.007652 + 0.92)
   * soit : P = ((Vout / Vs) - 0.92) / 0.007652
   * avec Vout = Vraw + Vcalibration et Vs = Vmax = 1023
   */
  return (((raw + calibration) / 1023.0) - 0.92) / 0.007652;
}

… On branche le capteur, et on upload le code …

Et voila le résultat :

Calibration: 22.1599731445
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
-0.0000077894
0.1277387022
-0.2555007696
-10.2197351455
-14.8186168670
-19.5452365875
-23.1221466064
-26.3158092498
-28.4874992370
-30.5314426422
-32.0644073486
-33.7251129150
-35.5135650634
-37.0465202331
-38.8349723815
-40.7511787414
-42.5396308898
-43.9448394775
-45.0945587158
-46.1165313720
-47.2662582397
-48.6714668273
-49.9489326477
-50.8431587219
-51.7373847961
-46.2442779541
-36.5355377197
-27.0822868347
-19.8007297515
-15.9683351516
-13.2856512069
-11.3694534301
-9.8364953994
-8.6867771148
-7.7925515174
-7.0260725021
-6.5150866508
-4.3433885574

It’s working ! \o/

On remarquera qu’au début je légèrement poussé sur la seringue au lieu de tirer, ce capteur ne mesurant pas des pressions positive il faut éviter au maximum ce genre de chose.
Par contre il peut descendre à des pression négative relativement importante (-150Kpa).

Voila voila 🙂
J’espère que cet article vous sera utile pour vos projets 😉
Le MPXV4115V est un capteur très utile si on veut mesurer une pression négative, que ce soit pour un systéme de cuve sous vide, de maintient d’objet par aspiration (comme sur les machines de « pick and place »), etc …

Je tient à remercier tout particulièrement Artouste, membre actif du forum arduino.cc, qui m’as gracieusement offert ce capteur ainsi qu’un module dallas DS1994 (horloge RTC) d’on je vais m’empresser de faire un article dessus 😉
(Il m’as aussi offert deux PIC32MX, hihihi, je vais pouvoir bricoler comme un petit fou :))

Advertisements

Discussion

9 réflexions sur “[Arduino] Utilisation d’un MPXV4115V (capteur de pression négative)

  1. Bonjour,

    J’ai fait le test, mais je n’ai pas de bonne lecture. J’ai un output plutôt bizarre. øó/ðŸÿGï/ñG÷ðŒÿ°ÿð/üðoñ/ÿGÿéÿGïGï+ðŒÿ°ÿoñ°ÿðÿ

    Est-il possible de tester le sensor afin de savoir s’il fonctionne correctement.

    Publié par Mio | 2 janvier 2014, 20 h 48 min
  2. Bonsoir, Je suis un lecteur assidu du blog.

    Le monde est petit ou vous tenez beaucoup de place : Je cherche une solution pour gérer une pompe à Vide et google me ramène à ‘do it vous même…’.

    Je passe un CAP de fonderie d’art et une pompe à vide servira à ‘tirer’ les bulles d’élastomère utilisé en moulage et peut être à tirer le métal en fusion dans un moule.

    Je ne trouve pas, à l’achat, le capteur utilisé, dommage le côté 3 fils me plaisait bien.

    Par ailleurs je serais curieux de savoir comment vous traiteriez dans vos articles un Raspberry Pi.

    Cordialement.

    Daniel Requejo

    http://www.danielrequejo.com

    Publié par Requejo | 23 février 2014, 20 h 44 min
  3. Bonjour,

    J’aimerai brancher le capteur sur un Pinoccio (Clone d’arduino avec un réseau mesh) mais le Pinoccio a seulement une source de 3.3v. Est-ce qu’il faut que je change la formule, ou je dois obligatoirement fournir du 5v ?

    Merci

    Mio

    Publié par Mio Tang | 22 février 2015, 22 h 01 min
  4. hello ! bravo pour ce tuto qui devrait me servir pour utiliser le fameux capteur à dépression mais le soucis c’est que votre ref Farnell nous mène sur un capteur sans extrémités pour tube donc difficile de le brancher sur un circuit à vide….j’aurai aimé vous envoyer la capture d’écran mais ??? bref auriez vous une ref sur le capteur que vous utilisez avec l’embout pour mettre un tube à la seringue…merci beaucoup
    Gilles

    Publié par Gilles Charles | 23 octobre 2016, 17 h 37 min
    • Bonjour, moi je vais fabriquer une pompe à vide avec un compresseur de frigo pour faire une table aspirante.
      en voyant le prix sur ebay du fameux capteur je suis allé sur le site du fabriquant : http://www.nxp.com.
      on peut y trouver le MPXV6115V6U. Et en plus, comme beaucoup de fabricants de composants, on peut leur commander des échantillons gratuitement 🙂

      Au plaisir.

      Paolo

      Publié par Paolo | 25 octobre 2016, 20 h 15 min

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Skyduino devient Carnet du Maker

Le site Carnet du Maker remplace désormais le blog Skyduino pour tout ce qui touche à l'Arduino, l'informatique et au DIY.