KY-052 Capteur de pression BMP180

De SensorKit X40 Wiki

Aller à : navigation, rechercher

Photo

KY-0052.png

Données techniques / Description sommaire

Ce capteur mesure la pression atmosphérique (élément de mesure au niveau du petit trou sur le boitier argenté) et communique via le bus I2C.

Une librairie spécifique est nécessaire à l'utilisation de ce capteur.

Brochage

5 5V G SCL SDA 3V.png

L'alimentation du capteur se fait soit par la broche 1 en 5V, soit par la broche 5 en 3,3V suivant qu'on le connecte à un Arduino (5V) ou un Raspberry Pi (3,3V). 

Attention : ne pas connecter les deux broches 5 en même temps.

Exemple de code pour Arduino

Ce capteur ne donne pas sa mesure sur une broche analogique, mais via le bus I2C.

Il y a plusieurs façon d'utiliser le capteur, mais l'utilisation de la bibliothèque Adafruit_BMP085 permet une utilisation simplifiée et est disponible via ce lien sous licence BSD OpenSource.

L'exemple ci-dessous utilise cette bibliothèque, elle se télécharge via Github et est à décompresser dans le dossier libraries de votre dossier Arduino (par défaut C:\Program Files\Arduino\libraries).

// Les bibliothèques requises sont définies et configurées
#include 
#include 
#include 
Adafruit_BMP085_Unified BMPSensor = Adafruit_BMP085_Unified(10085);
 
void setup(void) 
{
  Serial.begin(9600);
  
  Serial.println("KY-052 Test du capteur:");
  
  // Si le capteur ne détecte rien, une erreur s'affiche
  if(!BMPSensor.begin())
  {
    Serial.println("KY-052-Capteur non reconnu!");
    Serial.print("Verifier la connexion");
    while(1);
  }
}
 
void loop(void) 
{
  // Initialisation de la bibliothèque Adafruit BMP
  sensors_event_t event;
  BMPSensor.getEvent(&event);
 
  // Initialisation de la mesure quand le capteur est prêt
  if (event.pressure)
  {
    Serial.println("------------------------");
    
    // Mesure de la pression de l'air
    Serial.print("Pression atmospherique:    ");
    Serial.print(event.pressure);
    Serial.println(" hPa");
    
    // Mesure de la température
    float temperature;
    BMPSensor.getTemperature(&temperature);
    Serial.print("Temperature: ");
    Serial.print(temperature);
    Serial.write(176); // Code Unicode pour le symbole "°"
    Serial.println(" C");
 
    // Calcul de la hauteur au-dessus du niveau de la mer,
    // à partir des données enregistrées (SLP=1013.25 hPa)
    float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
    Serial.print("Hauteur par rapport au niveau de la mer:    "); 
    Serial.print(BMPSensor.pressureToAltitude(seaLevelPressure,
                                        event.pressure,
                                        temperature)); 
    Serial.println(" m");
    Serial.println("------------------------");
    Serial.println("");
  }
  // Message d'erreur si le capteur est inaccessible 
  else
  {
    Serial.println("Erreur de capteur");
  }
  delay(1000);
}

Exemple de programme à télécharger:

KY-052.zip

Affectation des broches Arduino:

VCC = [Pin 5V]
GND = [Pin GND]
SCL = [Pin SCL]
SDA = [Pin SDA]
3,3 = [N.C.]

Exemple de code pour Raspberry Pi

Le programme utilise les bibliothèques Python BMP085/180 et I2C de la société Adafruit. Elles sont disponibles via ce lien sous licence MIT.

Ces bibliothèques doivent être installées au préalable comme suit :

D'abord installer le logiciel GitHub (si ce n'est pas encore fait) :

sudo apt-get install git

Pour ce faire, le Raspberry Pi doit être connecté à internet.

Avec la commande...

git clone https://github.com/adafruit/Adafruit_Python_BMP.git

... vous pouvez télécharger et décompresser la dernière version de la bibliothèque Adafruit_BM085.

Ensuite, on accède au dossier téléchargé...

cd Adafruit_Python_BMP/

... on vérifie que les dernières mises à jours sont effectuées...

sudo apt-get update
sudo apt-get install build-essential python-dev python-openssl

... et on installe la bibliothèque.

sudo python setup.py install

On peut alors utiliser la bibliothèque.

Ainsi, la Raspberry Pi peut communiquer avec la capteur via le bus I2C, à condition que la fonction I2C soit activée sur le Raspberry Pi.

Pour l'activer, il suffit d'ajouter la ligne suivante à la fin du fichier "/boot/config.txt" :

    dtparam=i2c_arm=on

Ce fichier peut être modifié avec la commande :


sudo nano /boot/config.txt

Enregistrer et fermer le fichier en utilisant la séquence de touches [Ctrl+X -> Y -> Enter].

A ce stade, des bibliothèques supplémentaires sont nécessaires pour pouvoir utiliser I2C en Python. Pour les installer, entrez la commande suivante dans la console :

sudo apt-get install python-smbus i2c-tools -y

Enfin, l'exemple de code python suivant peut être utilisé.

Ce programme initialise le capteur et récupère les mesures de la pression de l'air, la température et la hauteur au-dessus du niveau de la mer.

#!/usr/bin/python
# coding=utf-8

# Les bibliothèques requises sont importées et configurées
import Adafruit_BMP.BMP085 as BMP085
import time

# L'intervalle entre les prises de mesures peut se régler ici
sleeptime = 1

try:
    # Initialisation du capteur
    BMPSensor = BMP085.BMP085()
# Vérifie que le capteur est bien connecté
# Sinon, on retourne un message d'erreur
except IOError:
    print("------------------------------")
    print ("KY-052 Capteur non reconnu!")
    print ("Vérifiez les connexions")
    print("------------------------------")
    while(True):
        time.sleep(sleeptime)
except KeyboardInterrupt:
    GPIO.cleanup()


# Boucle principale
# Le programme démarre les mesures du capteur et 
# les affiche dans la console
try:
    while(1):
        print("------------------------------")
        # Température
        print('Temperature = {0:0.2f}°C'.format(BMPSensor.read_temperature()))
        # Pression atmosphérique
        print('Pression atmospherique = {0:0.0f}hPa'.format(BMPSensor.read_pressure()/100))
        # Hauteur au-dessus de la mer
        print('Hauteur au-dessus de la mer = {0:0.2f}m'.format(BMPSensor.read_altitude()))    #Entrer en argument la pression au niveau de la mer (voir note ci-dessous)
        print("------------------------------")
        print("")
        time.sleep(sleeptime)

# Nettoyage de la console après la fin du programme
except KeyboardInterrupt:
    GPIO.cleanup()

Brochage Raspberry Pi:

VCC = - [N.C]
GND = Masse [Pin 06]
SCL = GPIO03 / SCL [Pin 05]
SDA = GPIO02 / SDA [Pin 03]
3.3 = 3,3V [Pin 01]

Exemple de programme à télécharger

KY-052_RPi_TempPress.zip

Commande pour lancer le programme:

sudo python KY-052_RPi_TempPress.py

Note

Pour un calcul plus précis de la hauteur au-dessus du niveau de la mer, il faut spécifier manuellement la pression au niveau de la mer (pression de référence) spécifique à l'endroit où on se trouve. Cette pression est indiquée en temps réel sur la plupart des sites météorologiques (p.ex. www.meteociel.com). 

Par exemple, pour une pression de 1044hPa au niveau de la mer :

Pour Arduino :

La variable SENSORS_PRESSURE_SEALEVELHPA, initialisée par défaut à 1013.25hPa, sera remplacée par la valeur de la pression de référence (en Pa). La ligne 46 sera donc :

    float seaLevelPressure = 104400;

Pour Raspberry :

Il suffit d'entrer la valeur de référence comme argument à la fonction "BMPSensor.read_altitude()" en ligne 38 :

    print('Hauteur au-dessus de la mer = {0:0.2f}m'.format(BMPSensor.read_altitude(104400)))