Capteur de pression atmosphérique BMP85 + Arduino

Utilisation de capteurs et composants électroniques avec Arduino.
Une fiche de tutoriel pour chaque.

Capteur de pression atmosphérique BMP85 + Arduino

Messagepar tiptop » Ven 6 Sep 2013 18:07

Capteur de pression atmosphérique BMP85 avec Arduino.
Baromètre et altimètre de grande précision

Image.Image

Composants utilisés

Principe de fonctionnement
Ce capteur de haute précision à basse consommation peut mesurer la pression atmosphérique de 300 à 1100 hPa avec une précision absolue de 0.03 hPa.
Ceci correspond à des altitudes de -500 m à +9000 m.
Ce module mesure également la température.

Il fonctionne avec une technologie de mesure piezzo-résistive. Une E²PROM stocke 176 bits de calibrage, chaque capteur étant calibré individuellement en usine. Un convertisseur analogique/numérique retourne la pression (16 à 19 bits) et la température (16 bits).

L'interfaçage se fait sur un bus I2C vers un micro contrôleur, avec 2 fils.
Alimentation entre 1.8 et 3.6V.


Calcul de l'altitude à partir de la pression
Une baisse de pression de 1 hPa correspond à un changement de 8.43m d'altitude au niveau de la mer.
Réciproquement, 10 m de dénivelée correspondent à 1.2 hPa.
La relation pression / altitude n'est pas linéaire.
On utilise la formule suivante
Altitude = 44330 *[1-(p/p0)^(1/5.255)] en m
Image
Ceci permet d'utilise ce module en altimètre.

Quelques ordres de grandeur usuels
La pression normale au niveau de la mer est de p0=1013.245 hPa (soit environ 1000 mBar = 1 bar)..
Dans un parapente, la sur-pression est d'environ 5kg/m2 soit 0.5 mbar (= 50 Pa).

1 Pa = 0.01 hPa = 1 N/m2 ( = 0.01 mBar ) ( = 8.43 cm d'altitude)

1 Bar = 10^5 Pascal = 100 kPa =100 kN/m2 = 10 N/cm2
1 bar correspond environ à 1 kgf/cm2 (à 2% près).

Tableau de conversion des unités de pression
Image
http://www.atomer.fr/1/1_Unites-de-pression.html

Caractéristiques techniques
  • Basse consommation 5 µA avec 1 mesure/sec en mode standard
  • Forte précision (calibrage en usine) :
    0.06 hPa (0.5m) en mode très basse consommation (6 PA)
    0.03 hPa (0.25m) en mode très haute résolution (3 PA)
  • Durée de conversion de la température 3ms, de la pression de 4.5 à 25.5 ms selon la résolution demandée.
  • Résolution d'affichage de 0.01 mPa et 0.1°C

Réglage du mode
Image

On peut échantillonner à 128 /sec (mode standard), mais une mesure de température par seconde suffit.

Commande du module
lire : 0xEF , ou écrire : 0xEE.

Utilisations
Dans les GPS (altimètre), téléphones mobiles, sports de plein air, stations météorologiques, baromètres, altimètres et variomètres de parapente

Image.Image

Branchements
- Résistances de pull up de 4.7k pour l'I2C (SDA bidirectionnel, et SCL entrée horloge).
- Le reset XCLR est low active (pull up interne 120k), il peut être laissé flottant si non utilisé. Il peut servir à éteindre un capteur si on utilise deux en même temps (leur adresse i2c étant fixe).
- La broche de sortie EOC (End Of Conversion) passe à 1 quand c'est prêt.

Image.Image

  • VCC --> Alimentation 1.8 à 3.6V (attention, pas en 5V !)
  • GND --> Gnd
  • EOC Output, End Of Conversion -->nc
  • XCLR master clear, low active --> nc
  • SCL Serial Clock I/O --> pin A5
  • SDA Serial Data I/O --> pin A4
Image

Image

Code de programmation
Ce programme mesure la pression et la température et les affiche (utilisation fixe en baromètre)
Il convertit en altitude les données (utilisation mobile en altimètre)
Code: Tout sélectionner
//************************************************
// Demo du capteur de pression BMP085
// Mesure de pression et de température (baromètre)
// Conversion en altitude (altimètre)
// Rolland - tiptopboards.com mars 2013
// modif 06 09 2013
//************************************************

#include "Wire.h"
#include "Adafruit_BMP085.h"
 
Adafruit_BMP085 bmp;
//==== Branchements du module BMP085 avec 4 fils :
// GND sur la masse de l'Arduino
// +3.3 sur le +3.3 de l'Arduino
// SDA (=data) vers AnalogPin4
// SCL (=clock) vers AnalogPin5
//
// Pas besoin de brancher CLR (reset) ni OEC (end of conversion)
// Mais EOC peut servir si on cherche à accélérer son code Arduino
 
void setup() {
  Serial.begin(9600);  //Port série
  bmp.begin(); 
 
}
 
void loop() {
    Serial.print("Temperature = ");   //En degrés Celsius (SI)
    Serial.print(bmp.readTemperature());
    Serial.print(" *C");
 
    Serial.print("   Pression = ");  //En Pascal (SI)
    //Serial.print(bmp.readPressure());
    // Serial.print(" Pa ");
   
    //Pour convertir vers d'autres unités de pression voir
    //http://www.engineeringtoolbox.com/pressure-units-converter-d_569.html
    // 1 Pa = 10-5 bar = 0.0075 mm Hg = 9.87.10-6 atm
    float PressionPascal;
    float PressionAtm;
    float PressionHg;
    PressionPascal = bmp.readPressure();  //Lire le capteur
    PressionAtm = PressionPascal*9.81*0.000001;
    PressionHg = PressionPascal*0.0075;
   
    Serial.print(PressionPascal);
    Serial.print(" Pa     ");
    Serial.print(PressionAtm);
    Serial.print(" Atm     ");
    Serial.print(PressionHg);
    Serial.print(" mm Hg     ");     
   
   
    Serial.print("  Altitude = "); 
    //On présume avoir 1013,25 hPa au niveau de la mer
    Serial.print(bmp.readAltitude(101325));
    Serial.println(" metres");
   
    delay(500);  //2 mesures par seconde
}


Exemple de mesures
Dans le serial monitor, on affiche pression et altitude:
Image

Grande précision de ce capteur
Dans cet exemple le capteur est utilisé en altimètre.
Il est posé sur un tabouret, puis tenu en hauteur, puis posé au sol, puis remis en hauteur, et reposé au sol.
Image
On voit qu'il mesure très précisément ces micro-changements d'altitude (la hauteur du tabouret 46 cm est clairement distinguée du niveau du sol !)

Références
Le datasheet du BMP085 (fabriquant Bosh)
http://dlnmh9ip6v2uc.cloudfront.net/dat ... 000-06.pdf

Le tuto de sparkfun (en anglais)
https://www.sparkfun.com/tutorials/253

Exemple (en anglais)
http://bildr.org/2011/06/bmp085-arduino/
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38

Re: Capteur de pression atmosphérique BMP85 + Arduino

Messagepar guiraud » Mer 1 Jan 2014 14:31

Bonjour
Je viens d'acheter mon premier module chez tiptop, bmp85.
J'ai installe les librairies et pourtant je bloqque sur les erreurs ci dessous.
Avez vous une idée?
Merci d'avance
erreur arduino.jpg
erreur arduino.jpg (201 Kio) Vu 29720 fois


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

Adafruit_BMP085 bmp = Adafruit_BMP085;


J'ai le message d'ereur suivant


Arduino : 1.5.5 (Windows 7), Carte : "Arduino Uno"

In file included from sketch_dec31a.ino:1:
C:\Users\michel\Documents\Arduino\libraries\Adafruit_BMP085v2/Adafruit_BMP085.h:94: error: expected class-name before '{' token
C:\Users\michel\Documents\Arduino\libraries\Adafruit_BMP085v2/Adafruit_BMP085.h:102: error: 'sensors_event_t' has not been declared
C:\Users\michel\Documents\Arduino\libraries\Adafruit_BMP085v2/Adafruit_BMP085.h:103: error: 'sensor_t' has not been declared
sketch_dec31a:9: error: 'Adafruit_BMP085' does not name a type
sketch_dec31a.ino: In function 'void setup()':
sketch_dec31a:16: error: 'bmp' was not declared in this scope
sketch_dec31a.ino: In function 'void loop()':
sketch_dec31a:27: error: 'sensors_event_t' was not declared in this scope
sketch_dec31a:27: error: expected `;' before 'event'
sketch_dec31a:28: error: 'bmp' was not declared in this scope
sketch_dec31a:28: error: 'event' was not declared in this scope

Ce rapport contiendrait plus d'informations si l'option
"Montrer les informations de sortie pendant la compilation"
était activée dans Fichier > Préférences.
guiraud
 
Messages: 2
Inscription: Mer 1 Jan 2014 10:39

Re: Capteur de pression atmosphérique BMP85 + Arduino

Messagepar guiraud » Mer 1 Jan 2014 15:11

Finalement, j ai reussi (il manquait la librairie sensor
Helas
apres telechargement, sur le moniteur serie,
Pressure Sensor Test

Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!

I check my wiring and install a soft to see i2c addr; it says no i2c devices...

What to do?

Best regards
guiraud
 
Messages: 2
Inscription: Mer 1 Jan 2014 10:39

Re: Capteur de pression atmosphérique BMP85 + Arduino

Messagepar tiptop » Jeu 2 Jan 2014 19:01

Avec ce scanner, voit on une adresse I2C ? viewtopic.php?f=2&t=4
tiptopboards - admin
Avatar de l’utilisateur
tiptop
Administrateur du site
 
Messages: 93
Inscription: Mar 13 Aoû 2013 20:38
Localisation: 38


Retourner vers Capteurs et composants

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 6 invités

cron