Primeiros Passos com o BMP180

Introdução
Você já viajou de carro para algum lugar mais alto ou mais baixo que sua cidade natal? Você deve ter sentido a pressão em seus ouvidos alterar conforme você estava subindo ou descendo a serra. Isso se deve ao fato que a pressão atmosférica varia conforme a altitude de sua localização aumenta ou diminui. É possível realizar a leitura da pressão que está sendo imposta ao seu corpo através de um barômetro. O sensor BMP180 é capaz de realizar leituras de pressão, como um barômetro, e de temperatura, como um sensor DHT11. O BMP180 utiliza a comunicação I2C para enviar os dados de suas leituras para o Arduino.
Neste tutorial, você vai aprender a realizar leituras das variáveis do sensor barométrico através da comunicação I2C do módulo com a BlackBoard UNO.
Lista de Materiais

Lista completa de produtos
comprar
BlackBoard UNO R3

Cabo USB AB 1.50m

Sensor De Pressão e Temperatura BMP280

Conversor de Nível Lógico RC

Protoboard 400 Pontos

WorkPlate 400 - Preta

Jumpers Macho-Macho x40 Unidades
Teoria
Oversample
Controladores AVR da Atmel, como o ATmega328 de placas da plataforma Arduino UNO, possuem conversores ADC (Analog to Digital Converter) com uma resolução de 10 bits. Na maioria dos casos, uma resolução de 10 bits é o bastante para obter leituras precisas de sensores, porém, em alguns casos específicos é necessário aumentar a resolução do conversor ADC ou utilizar outro conversor ADC externo. "Oversample and decimation" é o método utilizado para aumentar a resolução do conversor ADC interno dos processadores da Atmel, sem a necessidade de utilizar um conversor externo. Esse método, basicamente, aumenta consideravelmente a frequência de amostragem da porta utilizada para aumentar a resolução do conversor e reduzir possíveis ruídos a leitura. A biblioteca utilizada por este tutorial utiliza comandos de oversampling para adquirir leituras mais precisas e seu parâmetros.
Circuito
Para realizar leituras de pressão e temperatura através do sensor BMP180, monte o circuito a seguir.

Código
Para esse tutorial, é necessário realizar a instalação da biblioteca SFE_BMP180 da Low Power Lab. Caso você não saiba como realizar a instalação da biblioteca, você pode aprender através do tutorial Adicionando Bibliotecas na IDE Arduino. Com a biblioteca adicionada à Arduino IDE, carregue o código a seguir para sua placa.
Para este código, é necessário alterar o valor da variável ALTITUDE
para o valor, em metros, da altitude de seu local de teste do sensor, em relação ao nível do mar. É possível pesquisar o seu endereço atual no Google Earth para obter essa informação.
Entendendo o Código
O comando SFE_BMP180 modulo
inicia o objeto modulo
em função da biblioteca "SFE_BMP180", e esse objeto é utilizado posteriormente para realizar leituras através do sensor e imprimir os valores no monitor serial. Já dentro do laço setup()
, a função modulo.begin()
inicializa o objeto modulo
para ser usado em seguida.
O conjunto de comandos acima é responsável por inicializar a leitura de temperatura (startTemperature()
) e medir o valor de temperatura (getTemperature(temperatura)
). O comando status = modulo.startTemperature()
utiliza a variável auxiliar status
como um resultado para verificação. Essa verificação é feita através da condição if(status != 0)
, que verifica se o valor atribuído à variável é diferente de zero (ou seja, sem erro). O comando delay(status)
realiza uma pequena pausa para garantir que a leitura seja finalizada. Caso a verificação seja feita com sucesso, o valor é medido e gravado na variável temperatura
, que é impressa em seguida no monitor serial.
Assim como o conjunto descrito anteriormente, o conjunto de comandos acima é responsável pela inicialização e medição de pressão do sensor, isso devido às funções startPressure()
e getPressure()
, respectivamente. O conjunto também realiza uma verificação sobre a leitura feita através da variável auxiliar status
. A função getPressure(pressao,temperatura)
atribui o valor medido de pressão à variável pressao
, em função da variável temperatura
.
O conjunto de comandos acima é responsável pela conversão para a pressão relativa ao nível do mar, em função das variáveis pressao
e ALTITUDE
, além de imprimir o resultado obtido no monitor serial. A conversão é feita com a função sealevel()
, que utiliza a altitude informada e a pressão lida previamente.
O Que Deve Acontecer
Após carregar o código à placa com o circuito montado e abrir o monitor serial com a velocidade de 9600 bps, é possível observar as leituras retornadas pelo sensor, como na imagem abaixo.
