Mesure de température, pression et altitude avec le capteur BMP085

Descriptif du projet

Ce projet explique l’utilisation du capteur BMP085 par le biais d’une liaison série.

Branchement du capteur

Attention : l’alimentation de ce capteur se fait avec une tension de 3.3V !

// ATTENTION : Brancher le Vcc du BMP085 au pin 3.3v d’Arduino.
// Brancher le SDA au A4 d’Arduino.
// Brancher le SCL au A5 d’Arduino.
// XCLR (reset) non utilise.
// EOC (End of conversion) non utilise.
// Brancher le GND du BMP085 ao GND d’Arduino.

Pour en savoir plus, lire cet article (en portugais).

Librairies utilisées

Ce programme utilise les librairies :
– Wire
Adafruit_BMP085

Programme

/* 
 Sur demande de l'utilisateur via la liaison serie,
 le programme mesure la temperature en degre Celsius, la pression 
 en millibares, ou calcule l'altitude en metres, en fonction d'une 
 pression de reference (niveau de la mer) a fixer.
 */

//------------------------------------------------------------
// Librairies
//------------------------------------------------------------

#include <Wire.h>
#include <Adafruit_BMP085.h>

// pour le traitement du message recu sur la liaison serie
#include <SerialDLF.h>

//------------------------------------------------------------
// Constantes
//------------------------------------------------------------

// Classe de SerialDLF
SerialString messageRecu;



// ATTENTION : Brancher le Vcc du BMP085 au pin 3.3v d'Arduino.
// Brancher le SDA au A4 d'Arduino.
// Brancher le SCL au A5 d'Arduino.
// XCLR (reset) non utilise.
// EOC (End of conversion) non utilise.
// Brancher le GND du BMP085 ao GND d'Arduino.




Adafruit_BMP085 bmp;

float pressionNiveauMer=1013.25; // en mb

//------------------------------------------------------------
// Setup
//------------------------------------------------------------

void setup()
{
  // Initialisation de la liaison serie
  Serial.begin(9600); 
  Serial.flush();
  Serial.println("Liaison serie operationnelle !");
  Serial.println("------------------------------");
  Serial.println();
  delay(1000);
  Serial.println("Descriptif du programme :");
  Serial.println("--------------------------");
  Serial.println("Ce programme mesure la temperature, la pression et l'altitude a la demande.");
  Serial.println("--------------------------");
  Serial.println("Pour connaitre les commandes, taper sur h ou H.");
  Serial.println("--------------------------");


  // Autres initilisations

  if (!bmp.begin()) 
  {
    Serial.println("Le capteur BMP085 n'a pas ete trouve. Verifier les branchements.");
    while (1) {
    }
  }

} // fin setup

//------------------------------------------------------------
// Loop
//------------------------------------------------------------

void loop()
{ 
  messageRecu.renew();  // on lit un eventuel message.
  if (messageRecu.empty()==false) // Si le message est non vide ...
  {
    //Serial.println(messageRecu.get());
    traitement();
    Serial.flush();
  }
} //fin loop


//------------------------------------------------------------
// Fonction traitement()
//------------------------------------------------------------
/*
Execute le traitement des caracteres recus par la liaison serie
 qui sont stockes dans messageRecu.
 */

void traitement()
{
  float pressionReference;

  if ((messageRecu.equals("Descriptif")) || (messageRecu.equals("d")))
  {
    Serial.println("--------------------------");
    Serial.println("Descriptif du programme :");
    Serial.println("--------------------------");
    Serial.println("Ce programme mesure la temperature, la pression et l'altitude a la demande.");
    Serial.println("--------------------------");   
  }
  else if  ((messageRecu.equals("Help")) || (messageRecu.equals("h")))
  {
    Serial.println("--------------------------");
    Serial.println("Liste des commandes :");
    Serial.println("--------------------------");
    Serial.println("--> Descriptif ou d : affiche le descriptif du programme.");
    Serial.println("--> Help ou h : affiche la liste des commandes.");
    Serial.println("--> Altitude ou a : Calcule l'altitude.");
    Serial.println("                On peut passer en parametres la pression au niveau de la mer en mb.");
    Serial.println("                Exemple : a 1012");
    Serial.println("--> Pression ou p : demande la pression.");
    Serial.println("--> Temperature ou t : demande la temperature.");
    Serial.println("--------------------------");
  }
  else if  ((messageRecu.equals("Altitude")) || (messageRecu.equals("a")))
  {
    if (messageRecu.withParameter()==true)
    {
      pressionReference=messageRecu.parameter();
      Serial.println(pressionReference);
      if (pressionReference > 900)
      {
        Serial.print("Pression donnee en parametres : ");
        Serial.println(pressionReference);
        pressionNiveauMer=pressionReference;
      }
    }
    Serial.print("Altitude en metres : ");
    Serial.println(bmp.readAltitude(pressionNiveauMer*100));
    Serial.print("pour une pression au niveau de la mer de ");
    Serial.print(pressionNiveauMer);
    Serial.println(" mb.");
  }

  else if  ((messageRecu.equals("Pression")) || (messageRecu.equals("p")))
  {
    Serial.print("Pression en millibares : ");
    Serial.println(bmp.readPressure()/100);
  }

  else if  ((messageRecu.equals("Temperature")) || (messageRecu.equals("t")))
  {
    Serial.print("Temperatures en degres Celsius : ");
    Serial.println(bmp.readTemperature());
  }

  else
  {
    Serial.println("Erreur de saisie !");
  }


} // fin traitement