Sensor de pressão barométrica digital BMP180 I2C
O dispositivo BMP180 é um sensor digital de pressão barométrica. Isso está disponível em um pequeno módulo que fornece acesso ao sensor por meio da interface I2C. Isso nos permite conectá-lo facilmente ao Raspberry Pi com um mínimo de fiação.
Meu módulo é um pequeno pcb medindo 15x13mm com um conector de 5 pinos. A ordem dos pinos pode variar em outros módulos, portanto, fique de olho nas etiquetas para conectar os fios corretos do Pi.
O BMP180 é feito pela Bosch e a folha de dados oficial do BMP180 inclui todos os detalhes técnicos.
Configurar interface I2C
Para usar este módulo, você deve habilitar a interface I2C no Raspberry Pi, pois ela não é habilitada por padrão. Este é um processo bastante fácil e é descrito em meu tutorial Habilitando a interface I2C no Raspberry Pi.
Hardware de conexão
A tabela abaixo mostra como o módulo está conectado ao cabeçalho GPIO do Raspberyr Pi (P1). Consulte meu guia de cabeçalho GPIO para obter um diagrama.
Módulo PCB | Desc | Pinos de cabeçalho GPIO |
---|---|---|
VCC | 3,3 V | P1-01 |
GND | Terrestre | P1-06 |
SCL | I2C SCL | P1-05 |
SDA | I2C SDA | P1-03 |
3,3 V | - | - |
Aqui está um diagrama de uma configuração de breadboard. Se você estiver conectando os quatro pinos do módulo diretamente ao Pi, você só precisa de quatro fios fêmea-fêmea.
O diagrama breadboard usa uma parte personalizada que defini no Fritzing. Outros módulos estão disponíveis com diferentes arranjos de pinos, portanto, certifique-se de conectar os pinos corretos ao Pi se o seu for diferente do mostrado neste tutorial.
Com o dispositivo conectado e o Pi ligado, o comando “i2cdetect” deve mostrar o dispositivo com o endereço 0x77.
Exemplo de script Python
Aqui está um exemplo de script Python para ler dados de pressão e temperatura do sensor:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | #! / usr / bin / python importação smbus importação hora de ctypes importação c_short DISPOSITIVO = 0x77 # Endereço I2C do dispositivo padrão # bus =smbus.SMBus (0) # Rev 1 Pi usa 0 ônibus = smbus.SMBus ( 1 ) # Rev 2 Pi usa 1 def convertToString (dados): # Função simples para converter dados binários em # uma string return str ((dados [ 1 ] + ( 256 * dados [ 0 ])) / 1.2 ) def getShort (dados, índice): # retornar dois bytes de dados como um valor assinado de 16 bits return c_short ((dados [índice] << 8 ) + dados [índice + 1 ]). valor def getUshort (dados, índice): # retornar dois bytes de dados como um valor não assinado de 16 bits return (dados [índice] << 8 ) + dados [índice + 1 ] def readBmp180Id (addr = DEVICE): # Registrar endereço REG_ID = 0xD0 (chip_id, chip_version) = bus.read_i2c_block_data (addr, REG_ID, 2 ) return (chip_id, chip_version) def readBmp180 (addr = DEVICE): # Registrar endereços REG_CALIB = 0xAA REG_MEAS = 0xF4 REG_MSB = 0xF6 REG_LSB = 0xF7 # Control Register Endereço CRV_TEMP = 0x2E CRV_PRES = 0x34 # Configuração de Oversample OVERSAMPLE = 3 # 0 - 3 # Ler dados de calibração # Leia os dados de calibração da EEPROM cal = bus.read_i2c_block_data (addr, REG_CALIB, 22 ) # Converter dados de bytes em valores de palavras 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 leitura 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 # Pressão de leitura 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 - OVERSAMPLE) # Refinar a temperatura X1 = ((UT - AC6) * AC5)>> 15 X2 = (MC << 11 ) / (X1 + MD) B5 = X1 + X2 temperatura = (B5 + 8 )>> 4 # Refine a pressão B6 = B5 - 4000 B62 = B6 * B6>> 12 X1 = (B2 * B62)>> 11 X2 = AC2 * B6>> 11 X3 = X1 + X2 B3 = (((AC1 * 4 + X3) < |
Recomenda-se que você baixe este script diretamente para o seu Pi usando o seguinte comando:
wget https://bitbucket.org/MattHawkinsUK/rpispy-misc/raw/master/python/bmp180.py
ou use este link em um navegador.
Para executá-lo, você pode usar o seguinte comando:
For more detail:BMP180 I2C Digital Barometric Pressure Sensor
Processo de manufatura
- Infineon:sensor de pressão barométrica ultrapequeno
- Infineon lança sensor digital Turbo MAP de alta precisão
- Fundamentos de sensores magnéticos digitais
- O kit de design mede a pressão arterial com sensor óptico
- O sensor de pressão barométrica oferece maior precisão
- Registrador de temperatura Raspberry Pi
- Sensor de termômetro digital de 1 fio Raspberry Pi (DS18B20)
- Sensor digital Hall Raspberry Pi em JAVA
- Sensor de luz digital
- Sensor de pressão vestível de metal líquido