Sensor de presión barométrica digital BMP180 I2C
El dispositivo BMP180 es un sensor de presión barométrica digital. Está disponible en un pequeño módulo que proporciona acceso al sensor a través de la interfaz I2C. Esto nos permite conectarlo fácilmente a la Raspberry Pi con un cableado mínimo.
Mi módulo es un pequeño PCB que mide 15x13 mm con un encabezado de 5 pines. El orden de los pines puede variar en otros módulos, así que esté atento a las etiquetas para conectar los cables correctos del Pi.
El BMP180 está fabricado por Bosch y la hoja de datos oficial del BMP180 incluye todos los detalles técnicos.
Configurar la interfaz I2C
Para utilizar este módulo, debe habilitar la interfaz I2C en la Raspberry Pi, ya que no está habilitada de forma predeterminada. Este es un proceso bastante fácil y se describe en mi tutorial Habilitar la interfaz I2C en la Raspberry Pi.
Conexión de hardware
La siguiente tabla muestra cómo se conecta el módulo al encabezado GPIO de Raspberyr Pi (P1). Consulte mi guía de encabezado GPIO para ver un diagrama.
Módulo PCB | Desc | Pines de encabezado GPIO |
---|---|---|
VCC | 3,3 V | P1-01 |
GND | Suelo | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3,3 V | - | - |
Aquí hay un diagrama de la configuración de una placa de pruebas. Si está conectando los cuatro pines del módulo directamente al Pi, solo necesita cuatro cables hembra-hembra.
El diagrama de tablero usa una parte personalizada que definí en Fritzing. Hay otros módulos disponibles que tienen diferentes disposiciones de pines, así que asegúrese de conectar los pines correctos al Pi si el suyo es diferente al que se muestra en este tutorial.
Con el dispositivo conectado y el Pi encendido, el comando "i2cdetect" debería mostrar el dispositivo con la dirección 0x77.
Ejemplo de secuencia de comandos de Python
Aquí hay un ejemplo de secuencia de comandos de Python para leer datos de presión y temperatura del sensor:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | #! / usr / bin / python importar smbus importar tiempo de ctypes importar c_short DISPOSITIVO = 0x77 # Dirección I2C predeterminada del dispositivo # bus =smbus.SMBus (0) # Rev 1 Pi usa 0 bus = smbus.SMBus ( 1 ) # Rev 2 Pi usa 1 def convertToString (datos): # Función simple para convertir datos binarios en # una cadena return str ((datos [ 1 ] + ( 256 * datos [ 0 ])) / 1.2 ) def getShort (datos, índice): # devuelve dos bytes de los datos como un valor firmado de 16 bits return c_short ((datos [índice] << 8 ) + datos [índice + 1 ]). valor def getUshort (datos, índice): # devuelve dos bytes de los datos como un valor de 16 bits sin firmar return (datos [índice] << 8 ) + datos [índice + 1 ] def readBmp180Id (addr = DISPOSITIVO): # Dirección de registro REG_ID = 0xD0 (chip_id, chip_version) = bus.read_i2c_block_data (addr, REG_ID, 2 ) return (chip_id, chip_version) def readBmp180 (addr = DISPOSITIVO): # Registrar direcciones = 0xAA REG_MEAS = 0xF4 = 0xF6 REG_LSB = 0xF7 # Dirección de registro de control CRV_TEMP = 0x2E CRV_PRES = 0x34 # Configuración de sobremuestra SOBREMEMPLO = 3 # 0 - 3 # Leer datos de calibración # Leer datos de calibración de EEPROM cal = bus.read_i2c_block_data (addr, REG_CALIB, 22 ) # Convertir datos de bytes en valores de palabras 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 ) MB = getShort (cal, 16 ) MC = getShort (cal, 18 ) MD = getShort (cal, 20 ) # Temperatura de lectura 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 # Presión de lectura bus.write_byte_data (addr, REG_MEAS, CRV_PRES + (SOBREMEMPLO << 6 )) time.sleep ( 0.04 ) (msb, lsb, xsb) = bus.read_i2c_block_data (addr, REG_MSB, 3 ) ARRIBA = ((msb << 16 ) + (lsb << 8 ) + xsb)>> ( 8 - SOBREMEMPLO) # Refine la temperatura X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 temperatura = (B5 + 8 )>> 4 # Refinar la presión B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3) < |
Se recomienda que descargue este script directamente a su Pi usando el siguiente comando:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
o utilice este enlace en un navegador.
Para ejecutarlo, puede usar el siguiente comando:
Para más detalles:Sensor de presión barométrica digital BMP180 I2C
Proceso de manufactura
- Infineon:sensor de presión barométrica ultrapequeño
- Infineon lanza el sensor Turbo MAP digital de alta precisión
- Fundamentos de los sensores magnéticos digitales
- El kit de diseño mide la presión arterial con un sensor óptico
- El sensor de presión barométrica ofrece una mayor precisión
- Registrador de temperatura Raspberry Pi
- Sensor de termómetro digital de 1 cable Raspberry Pi (DS18B20)
- Sensor de pasillo digital Raspberry Pi en JAVA
- Sensor de luz digital
- Sensor de presión portátil de metal líquido
- ¿Qué es un sensor piezorresistivo?