Différences entre versions de « BMP085-Utiliser-APIv2 »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 23 : Ligne 23 :
 
#include <Adafruit_Sensor.h>
 
#include <Adafruit_Sensor.h>
 
#include <Adafruit_BMP085.h>
 
#include <Adafruit_BMP085.h>
 
+
 
 +
/* Traduction des commentaires par MCHobby.be */
 +
 
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
 
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);
  
Ligne 29 : Ligne 31 :
 
{
 
{
 
   Serial.begin(9600);
 
   Serial.begin(9600);
   Serial.println("Pressure Sensor Test"); Serial.println("");
+
   Serial.println("Test de pression du senseur"); Serial.println("");
 
    
 
    
   /* Initialise the sensor */
+
   /* Initialiser le senseur */
 
   if(!bmp.begin())
 
   if(!bmp.begin())
 
   {
 
   {
     /* There was a problem detecting the BMP085 ... check your connections */
+
     /* Il y a eu un probleme lors de la détection du BMP085/180 ... vérifier les connexions */
     Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");
+
     Serial.print("Ooops, pas de BMPxxx détecté ... vérifier le cablage ou l adresse I2C!");
 
     while(1);
 
     while(1);
 
   }
 
   }
Ligne 42 : Ligne 44 :
 
void loop(void)  
 
void loop(void)  
 
{
 
{
   /* Get a new sensor event */  
+
   /* Obtenir un nouvel événement 'event' senseur */  
 
   sensors_event_t event;
 
   sensors_event_t event;
 
   bmp.getEvent(&event);
 
   bmp.getEvent(&event);
 
   
 
   
   /* Display the results (barometric pressure is measure in hPa) */
+
   /* Afficher les résultats (pression barométrique est mesurée en hPa) */
 
   if (event.pressure)
 
   if (event.pressure)
 
   {
 
   {
     /* Display atmospheric pressure in hPa */
+
     /* Afficher la pression atmosphérique en hPa */
     Serial.print("Pressure: "); Serial.print(event.pressure); Serial.println(" hPa");
+
     Serial.print("Pression: "); Serial.print(event.pressure); Serial.println(" hPa");
 
   }
 
   }
 
   else
 
   else
 
   {
 
   {
     Serial.println("Sensor error");
+
     Serial.println("Erreur senseur");
 
   }
 
   }
 
   delay(250);
 
   delay(250);
Ligne 61 : Ligne 63 :
 
Ouvrez ensuite la console série (dans Arduino IDE) configuré sur 9600 bauds. Le croquis/sketch affichera continuellement la pression en hPa (hectoPascals). Vous pouvez tester le senseur en mesurant une variation de pression simplement en placant votre doigt au dessus du petit trou sur le dessus du senseur.  
 
Ouvrez ensuite la console série (dans Arduino IDE) configuré sur 9600 bauds. Le croquis/sketch affichera continuellement la pression en hPa (hectoPascals). Vous pouvez tester le senseur en mesurant une variation de pression simplement en placant votre doigt au dessus du petit trou sur le dessus du senseur.  
  
Comme vous pouvez le constater ci-dessous, la pression s'accroit:  
+
Comme vous pouvez le constater ci-dessous, la pression s’accroît:  
  
 
{{ADFImage|BMP085-Utiliser-APIv2-01.png|640px}}
 
{{ADFImage|BMP085-Utiliser-APIv2-01.png|640px}}
Ligne 72 : Ligne 74 :
 
La bibliothèque Arduino du BMP prend tout cela en charge pour nous! Il faut simplement faire une mise-à-jour de '''la fonction 'void loop()' avec le code ci-dessous pour obtenir l'altitude correspondant à la pression et à la température''':
 
La bibliothèque Arduino du BMP prend tout cela en charge pour nous! Il faut simplement faire une mise-à-jour de '''la fonction 'void loop()' avec le code ci-dessous pour obtenir l'altitude correspondant à la pression et à la température''':
  
  <nowiki>void loop(void)  
+
  <nowiki>void loop(void) {
{
+
  /* Traduction des commentaires par MCHobby.be */
   /* Get a new sensor event */  
+
 
 +
   /* Obtenir un nouvel événement senseur 'event' */  
 
   sensors_event_t event;
 
   sensors_event_t event;
 
   bmp.getEvent(&event);
 
   bmp.getEvent(&event);
 
   
 
   
   /* Display the results (barometric pressure is measure in hPa) */
+
   /* Afficher les résultats (la pression barometrique est mesurée en hPa) */
 
   if (event.pressure)
 
   if (event.pressure)
 
   {
 
   {
     /* Display atmospheric pressue in hPa */
+
     /* Afficher la pression atmosphérique en hPa */
     Serial.print("Pressure:    ");
+
     Serial.print("Pression:    ");
 
     Serial.print(event.pressure);
 
     Serial.print(event.pressure);
 
     Serial.println(" hPa");
 
     Serial.println(" hPa");
 
      
 
      
     /* Calculating altitude with reasonable accuracy requires pressure    *
+
     /* Calculer l'altitude avec une précision raisonnable nécessite de connaître  *
     * sea level pressure for your position at the moment the data is    *
+
     * la pression au niveau de la mer pour votre adresse au moment ou les données *
     * converted, as well as the ambient temperature in degress          *
+
     * sont convertie, ainsi que la température ambiante en degré Celcius.        *
     * celcius.  If you don't have these values, a 'generic' value of     *
+
     * Si vous n'avez ces valeurs, vous pouvez utiliser la valeur générique de     *
     * 1013.25 hPa can be used (defined as SENSORS_PRESSURE_SEALEVELHPA   *
+
     * 1013.25 hPa (défine sous SENSORS_PRESSURE_SEALEVELHPA dans sensors.h) mais  *
     * in sensors.h), but this isn't ideal and will give variable         *
+
     * cela n'est pas idéal et peut fournir un résultat variable d'un jour à      *
     * results from one day to the next.                                 *
+
     * l'autre.                                                                   *
     *                                                                   *
+
     *                                                                             *
     * You can usually find the current SLP value by looking at weather   *
+
     * Vous pouvez trouvez trouver la valeur de Pression Atmosphérique au niveau   *
     * websites or from environmental information centers near any major  *
+
     * de la mer en consultant les sites météo de votre région ou centre d'inform- *
     * airport.                                                           *
+
     * ation environnemental près des aéroports principaux.                       *  
     *                                                                   *
+
     *                                                                             *
     * For example, for Paris, France you can check the current mean      *
+
     * Par exemple, pour Paris (France) vous pouvez trouver la pression moyenne    *
     * pressure and sea level at: http://bit.ly/16Au8ol                   */
+
     * au niveau de la mer sur: http://bit.ly/16Au8ol                             */
 
      
 
      
     /* First we get the current temperature from the BMP085 */
+
     /* Commençons par obtenir la température actuelle depuis le BMP085 */
 
     float temperature;
 
     float temperature;
 
     bmp.getTemperature(&temperature);
 
     bmp.getTemperature(&temperature);
Ligne 108 : Ligne 111 :
 
     Serial.println(" C");
 
     Serial.println(" C");
  
     /* Then convert the atmospheric pressure, SLP and temp to altitude   */
+
     /* Ensuite, convertir la pression atmospherique, SLP (pression au */
     /* Update this next line with the current SLP for better results      */
+
    /* niveau de la mer) et la température en altitude.              */
 +
     /* Modifiez la ligne suivante avec une valeur connue de SLP pour  */
 +
    /*  un résultat plus précis                                      */
 
     float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
 
     float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
 
     Serial.print("Altitude:    ");  
 
     Serial.print("Altitude:    ");  
Ligne 120 : Ligne 125 :
 
   else
 
   else
 
   {
 
   {
     Serial.println("Sensor error");
+
     Serial.println("Erreur senseur");
 
   }
 
   }
 
   delay(1000);
 
   delay(1000);
Ligne 139 : Ligne 144 :
 
  <nowiki>float seaLevelPressure = 1009;</nowiki>
 
  <nowiki>float seaLevelPressure = 1009;</nowiki>
  
{{ambox-stop|text=If you don't know the current mean pressure at sea level for your current weather conditions and location, SENSORS_PRESSURE_SEALEVELHPA is still a safe starting point: }}
+
{{ambox-stop|text=Si vous ne connaissez la pression moyenne au niveau de la mer pour votre emplacement et conditions météo, vous pouvez toujours utiliser la valeur de SENSORS_PRESSURE_SEALEVELHPA qui sera un bon point de départ: }}
  
This now gives us the following results, which shows that calibrating for your local conditions is often worthwhile when working with low altitudes!  
+
Cela fournit maintenant le résultat suivant, indiquant que l'étalonnage correspondant aux conditions locales est souvent utilise lorsque l'on travaille avec de faibles altitudes!  
  
 
{{ADFImage|BMP085-Utiliser-APIv2-05.png}}
 
{{ADFImage|BMP085-Utiliser-APIv2-05.png}}
  
Just be careful looking for local mean pressure at sea level values, since the functions in the driver are expecting hPa units, not one of the dozens of other values you may encounter, but you should be able to [http://www.engineeringtoolbox.com/pressure-units-converter-d_569.html convert anything you find to hPa] which is a standard SI unit.  
+
Soyez juste attentif lorsque vous relevez la pression moyenne de référence au niveau de la mer, la fonction du pilote attend une valeur en hPa... et pas l'une des nombreuses unités que vous pouvez rencontrer. Vous devriez néanmoins être capable de [http://www.engineeringtoolbox.com/pressure-units-converter-d_569.html convertir presque tout ce que vous trouverez en hPa] qui est une unité standard du système international (''standard SI unit'').  
  
 
{{BMP085-TRAILER}}
 
{{BMP085-TRAILER}}

Version actuelle datée du 17 février 2014 à 21:10

Utiliser l'API v2

Cette page est basée sur la nouvelle API unifiée utilisée avec le pilote BMP085/BMP180. Le pilote unifié fournir un meilleur support pour le calcul d'altitude, et permet de remplacer plus facilement le BMP085/BMP180 dans vos projets par un autre senseur prenant en charge la mesure de pression.

Si vous ne l'avez pas encore fait, il sera nécessaire d'installer la bibliothèque Adafruit_Sensor sur votre ssystème, la bibliothèque Adafruit_BMP085 utilisant cette dernière pour générer les données senseurs d'une façon universelle.

Utiliser le BMP085/BMP180

Le calcul de l'altitude et de la pression barométrique, nécessite beaucoup d'opérations mathématique... ce qui n'est pas franchement plaisant. Vous pouvez prendre connaissance de ces opérations dans la fiche technique mais cela n'est ni vraiment intuitive ni très pédagogique - cela indique juste comment le senseur fonctionne.

Heureusement, la bibliothèque Arduino prend en charge toute cette complexité.

Vous pouvez trouver cette bibliothèque Arduino sur ce dépôt GitHub puis l'installer. Pour installer la bibliothèque, cliquez sur le bouton "Download" pour télécharger le l'archive ZIP et pour l'installer. Vous pouvez trouver plus d'information notre tutoriel sur l'installation de bibliothèque .

N'oubliez pas de redémarrer votre IDE.

Vous pouvez maintenant utiliser ce premier croquis/sketch d'exemple et le téléverser sur votre Arduino:

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085.h>
  
/* Traduction des commentaires par MCHobby.be */
 
Adafruit_BMP085 bmp = Adafruit_BMP085(10085);

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("Test de pression du senseur"); Serial.println("");
  
  /* Initialiser le senseur */
  if(!bmp.begin())
  {
    /* Il y a eu un probleme lors de la détection du BMP085/180 ... vérifier les connexions */
    Serial.print("Ooops, pas de BMPxxx détecté ... vérifier le cablage ou l adresse I2C!");
    while(1);
  }
}

void loop(void) 
{
  /* Obtenir un nouvel événement 'event' senseur */ 
  sensors_event_t event;
  bmp.getEvent(&event);
 
  /* Afficher les résultats (pression barométrique est mesurée en hPa) */
  if (event.pressure)
  {
    /* Afficher la pression atmosphérique en hPa */
    Serial.print("Pression: "); Serial.print(event.pressure); Serial.println(" hPa");
  }
  else
  {
    Serial.println("Erreur senseur");
  }
  delay(250);
}

Ouvrez ensuite la console série (dans Arduino IDE) configuré sur 9600 bauds. Le croquis/sketch affichera continuellement la pression en hPa (hectoPascals). Vous pouvez tester le senseur en mesurant une variation de pression simplement en placant votre doigt au dessus du petit trou sur le dessus du senseur.

Comme vous pouvez le constater ci-dessous, la pression s’accroît:

BMP085-Utiliser-APIv2-01.png
Crédit: AdaFruit Industries www.adafruit.com

Evaluer l'altitude

Puisque nous savons que la pression chute lorsque que l'altitude augmente (c'est pour cela que l'air est si ténu en haut des montages), il est possible de calculer l'altitude si nous connaissons la pression et la température. Encore une fois, cela met en scène des opérations mathématiques complexes (voyez ces notes de calcul sur Wikipedia anglais d'où provient le graphe ci-dessous).

BMP085-Utiliser-APIv2-02.png
Crédit: AdaFruit Industries www.adafruit.comGraphique de la Pression Atmosphérique (kPa) en fonction de l'altitude

La bibliothèque Arduino du BMP prend tout cela en charge pour nous! Il faut simplement faire une mise-à-jour de la fonction 'void loop()' avec le code ci-dessous pour obtenir l'altitude correspondant à la pression et à la température:

void loop(void) {
  /* Traduction des commentaires par MCHobby.be */

  /* Obtenir un nouvel événement senseur 'event' */ 
  sensors_event_t event;
  bmp.getEvent(&event);
 
  /* Afficher les résultats (la pression barometrique est mesurée en hPa) */
  if (event.pressure)
  {
    /* Afficher la pression atmosphérique en hPa */
    Serial.print("Pression:    ");
    Serial.print(event.pressure);
    Serial.println(" hPa");
    
    /* Calculer l'altitude avec une précision raisonnable nécessite de connaître   *
     * la pression au niveau de la mer pour votre adresse au moment ou les données *
     * sont convertie, ainsi que la température ambiante en degré Celcius.         *
     * Si vous n'avez ces valeurs, vous pouvez utiliser la valeur générique de     *
     * 1013.25 hPa (défine sous SENSORS_PRESSURE_SEALEVELHPA dans sensors.h) mais  *
     * cela n'est pas idéal et peut fournir un résultat variable d'un jour à       *
     * l'autre.                                                                    *
     *                                                                             *
     * Vous pouvez trouvez trouver la valeur de Pression Atmosphérique au niveau   *
     * de la mer en consultant les sites météo de votre région ou centre d'inform- *
     * ation environnemental près des aéroports principaux.                        * 
     *                                                                             *
     * Par exemple, pour Paris (France) vous pouvez trouver la pression moyenne    *
     * au niveau de la mer sur: http://bit.ly/16Au8ol                              */
     
    /* Commençons par obtenir la température actuelle depuis le BMP085 */
    float temperature;
    bmp.getTemperature(&temperature);
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.println(" C");

    /* Ensuite, convertir la pression atmospherique, SLP (pression au */ 
    /* niveau de la mer) et la température en altitude.               */
    /* Modifiez la ligne suivante avec une valeur connue de SLP pour  */
    /*   un résultat plus précis                                      */
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    Serial.print("Altitude:    "); 
    Serial.print(bmp.pressureToAltitude(seaLevelPressure,
                                        event.pressure,
                                        temperature)); 
    Serial.println(" m");
    Serial.println("");
  }
  else
  {
    Serial.println("Erreur senseur");
  }
  delay(1000);
}

Exécutez le croquis/sketch pour voir l'altitude calculée par le programme.

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

La donnée ci-dessus est raisonnablement proche de la valeur attendue ici (où je me trouve). Il est possible d'améliorer la précision en modifiant la pression de référence au niveau de la mer, pression qui varie en fonction des conditions climatiques. Chaque 1 hPa de décalage par rapport à la pression de référence réelle au niveau de la mer produit une erreur de calcul d'altitude d'environ 8.5m!

De nombreux sites météorologiques (particulièrement près des aéroports importants) offrent des informations sur la pression. Si vous êtes près de Paris (France), vous devriez consulter les conditions de pression d'air actuel de l'aéroport Charles de Gaulle, qui est de 1009 hPa comme vous pouvez le voir (sacrément différent de la pression générique de 1013.25 hPa que vous trouverez dans la macro SENSORS_PRESSURE_SEALEVELHPA, SEALEVELHPA signifiant SEA LEVEL HPA, soit pression en hectoPascal au niveau de la mer):

BMP085-Utiliser-APIv2-04.png
Crédit: AdaFruit Industries www.adafruit.com

Modifiez la ligne suivante pour indiquer la pression de 1009 pour obtenir une altitude plus précise:

float seaLevelPressure = 1009;

Cela fournit maintenant le résultat suivant, indiquant que l'étalonnage correspondant aux conditions locales est souvent utilise lorsque l'on travaille avec de faibles altitudes!

{{{2}}}
Crédit: AdaFruit Industries www.adafruit.com

Soyez juste attentif lorsque vous relevez la pression moyenne de référence au niveau de la mer, la fonction du pilote attend une valeur en hPa... et pas l'une des nombreuses unités que vous pouvez rencontrer. Vous devriez néanmoins être capable de convertir presque tout ce que vous trouverez en hPa qui est une unité standard du système international (standard SI unit).


Source: Bosch BMP085 Breakout Board réalisé par LadyAda pour AdaFruit Industries

Créé par LadyAda pour AdaFruit Indrustries.

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.