Capteur de pression barométrique numérique BMP180 I2C
L'appareil BMP180 est un capteur de pression barométrique numérique. Celui-ci est disponible sur un petit module qui permet d'accéder au capteur via l'interface I2C. Cela nous permet de le connecter facilement au Raspberry Pi avec un minimum de câblage.
Mon module est un petit PCB mesurant 15x13mm avec un en-tête à 5 broches. L'ordre des broches peut varier sur d'autres modules, alors gardez un œil sur les étiquettes afin de connecter les bons fils du Pi.
Le BMP180 est fabriqué par Bosch et la fiche technique officielle du BMP180 comprend tous les détails techniques.
Configurer l'interface I2C
Pour utiliser ce module, vous devez activer l'interface I2C sur le Raspberry Pi car elle n'est pas activée par défaut. Il s'agit d'un processus assez simple qui est décrit dans mon didacticiel Activation de l'interface I2C sur le Raspberry Pi.
Matériel de connexion
Le tableau ci-dessous montre comment le module est connecté à l'en-tête GPIO du Raspberyr Pi (P1). Veuillez vous référer à mon guide d'en-tête GPIO pour un diagramme.
Module PCB | Description | Broches d'en-tête GPIO |
---|---|---|
VCC | 3,3 V | P1-01 |
GND | Sol | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3,3 V | – | – |
Voici un schéma d'une configuration de maquette. Si vous connectez les quatre broches du module directement au Pi, vous n'avez besoin que de quatre fils femelle-femelle.
Le schéma de la maquette utilise une pièce personnalisée que j'ai définie dans Fritzing. D'autres modules sont disponibles qui ont des dispositions de broches différentes, alors assurez-vous de connecter les bonnes broches au Pi si la vôtre est différente de celle illustrée dans ce didacticiel.
Avec l'appareil connecté et le Pi sous tension, la commande "i2cdetect" devrait afficher l'appareil avec l'adresse 0x77.
Exemple de script Python
Voici un exemple de script Python pour lire les données de pression et de température du capteur :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748484950515253545565657585960616263646566768767677870798730812109698110911091110d95051525354556565758596061626364656676869787079873081210969811099109990 | #!/usr/bin/python import smbus import heure de ctypes import c_short APPAREIL = 0x77 # Adresse I2C de l'appareil par défaut #bus =smbus.SMBus(0) # La rév 1 Pi utilise 0 bus = smbus.SMBus( 1 ) # Rev 2 Pi utilise 1 def convertToString(data) : # Fonction simple pour convertir des données binaires en # une chaîne retour str ((data[ 1 ] + ( 256 * données[ 0 ])) / 1.2 ) def getShort(données, index) : # renvoie deux octets des données sous la forme d'une valeur signée de 16 bits retour c_short((data[index]<< 8 ) + données[index + 1 ]).value def getUshort(data, index) : # renvoie deux octets des données sous la forme d'une valeur 16 bits non signée retour (data[index]<< 8 ) + données[index + 1 ] def readBmp180Id(addr = APPAREIL : # Adresse d'inscription REG_ID = 0xD0 (chip_id, chip_version) = bus.read_i2c_block_data(addr, REG_ID, 2 ) retour (chip_id, chip_version) def readBmp180(addr = APPAREIL : # Enregistrer les adresses REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 # Adresse du registre de contrôle CRV_TEMP = 0x2E CRV_PRES = 0x34 # paramètre de suréchantillonnage SUR ÉCHANTILLON = 3 # 0 - 3 # Lire les données d'étalonnage # Lire les données d'étalonnage de l'EEPROM cal = bus.read_i2c_block_data(addr, REG_CALIB, 22 ) # Convertir les données d'octets en valeurs de mots AC1 = getShort(cal, 0 ) AC2 = getShort(cal, 2 ) AC3 = getShort(cal, 4 ) AC4 = getUshort(cal, 6 ) AC5 = getUshort(cal, 8 ) AC6 = getUshort(cal, 10 ) B1 = getShort(cal, 12 ) B2 = getShort(cal, 14 ) Mo = getShort(cal, 16 ) MC = getShort(cal, 18 ) MD = getShort(cal, 20 ) # Lecture de la température bus.write_byte_data(addr, REG_MEAS, CRV_TEMP) time.sleep( 0.005 ) (msb, lsb) = bus.read_i2c_block_data(addr, REG_MSB, 2 ) UT = (msb << 8 ) + lsb # Pression de lecture bus.write_byte_data(addr, REG_MEAS, CRV_PRES + (OVERSAMPLE << 6 )) time.sleep( 0.04 ) (msb, lsb, xsb) = bus.read_i2c_block_data(addr, REG_MSB, 3 ) UP = ((msb << 16 ) + (lsb << 8 ) + xsb)>> ( 8 - SUR ÉCHANTILLON) # Affiner la température X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 température = (B5 + 8 )>> 4 # Affiner la pression B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3) < B4 X1 = (P>> 8 ) * (P>> 8 ) X1 = (X1 * 3038 )>> 16 X2 = ( - 7357 * P)>> 16 pression = P + ((X1 + X2 + 3791 )>> 4 ) retour (température / 10.0 ,pression / 100.0 ) def main() : (chip_id, chip_version) = readBmp180Id() imprimer "ID de puce :" , chip_id imprimer "Version :" , chip_version imprimer (température,pression) = readBmp180() imprimer "Température :" , température, "C" imprimer "Pression :" , pression, "mbar" if __name__ = = "__main__" : main() |
Il est recommandé de télécharger ce script directement sur votre Pi en utilisant la commande suivante :
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
ou utilisez ce lien dans un navigateur.
Pour l'exécuter vous pouvez utiliser la commande suivante :
Pour plus de détails : Capteur de pression barométrique numérique BMP180 I2C
Processus de fabrication
- Infineon :capteur de pression barométrique ultra-compact
- Infineon lance un capteur Turbo MAP numérique très précis
- Principes de base des capteurs magnétiques numériques
- Kit de conception mesure la tension artérielle avec capteur optique
- Le capteur de pression barométrique offre une précision accrue
- Enregistreur de température Raspberry Pi
- Capteur de thermomètre numérique Raspberry Pi à 1 fil (DS18B20)
- Capteur Hall numérique Raspberry Pi en JAVA
- Capteur de lumière numérique