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