Sensor de Pressão e Temperatura BMP180: Analisando seu funcionamento

Neste tutorial utilizaremos o sensor barométrico com arduino. Este, no que lhe concerne, é muito utilizado para construção de estações meteorológicas e aperfeiçoamento de navegação GPS. Vamos visualizar como este pequeno componente funciona e desenvolver uma aplicação para ele.

kit robotica educacional com Arduino ESP ou Microbit

O  que é o módulo Sensor de Pressão e Temperatura BMP180?

o sensor barométrico com arduino como todos os outros sensores trabalha com os conceitos físicos.

– Funcionamento do sensor barométrico com arduino

O sensor  barométrico BMP180 tem como finalidade fazer a medição de pressão atmosférica e temperatura. Além disso, as aplicações com esse sensor são diversas como em projetos com Arduino ou outras plataformas microcontroladoras em que seja necessário fazer a medição de pressão atmosférica, temperatura e altitude.

— Temperatura, sensor barométrico com arduino

Primeiramente, a temperatura é a grandeza física que mede o grau de agitação térmica, ou energia cinética e vibracional dos átomos que constituem um corpo. Além disso, quanto mais agitadas as moléculas, maior será a sua temperatura. Então, o sensor barométrico justamente mede e identifica essas agitações e nos fornece a temperatura em que ele esta exposto. Uma das aplicações para o sensor é claramente na meteorologia, pois como observamos na imagem abaixo existem vários graus de agitações entre as moléculas de água.

Imagem dos vários estados atmosféricos

— Pressão, sensor barométrico com arduino

Pressão é a grandeza física a qual é podemos obtê-la pela razão entre a força aplicada e sua área de contato. Vale ressaltar que a unidade de pressão no sistema internacional de unidades é o pascal. Sendo assim, o sensor barométrico irá realizar o cálculo da razão entre força aplicada a ele por sua área de contato e nos informar o resultado de tal calculo

– Os terminais do sensor barométrico com arduino:

  • Vin(+) – Tensão de entrada, entre 3,3 a 5 volts
  • GND(-) – O pino de O V do módulo
  • SCL – I2C Serial Clock (SCL);
  • SDA – I2C Serial Data (SDA);

Módulo do sensor de Pressão e Temperatura BMP180

 

Mãos à obra — Configurando um sensor barométrico BMP180

Componentes Necessários

– Montando o projeto:

Precipuamente, conecte o sensor na protoboard. Logo depois, o pino Vin será conectado ao 5V do arduino, e o pino GND no GND do arduino. Logo após, conecte o pino SCL ao pino analógico A5 do Arduíno e o pino SCA  é conectado ao pino analógico A4, como mostra o diagrama abaixo:

Diagrama de montagem do sensor barométrico BMP180

– Biblioteca “Wire.h”:

Neste tutorial utilizaremos a biblioteca Wire.h a qual é responsável por conter as funções necessárias para gerenciar a comunicação entre os dispositivos através do protocolo I2C. Para baixar a biblioteca click no link e depois no quadrado verde escrito código.

– Biblioteca “Adafruit-BMP085”:

A outra biblioteca que utilizaremos será a Adafruit-BMP085. Logo Após o download do arquivo zip, abra a IDE e adicione a biblioteca em forma zip ao seu programa. Caso não entenda nada de biblioteca ou como prosseguir,veja o tutorial COMO INSTALAR UMA BIBLIOTECA NO ARDUINO IDE” no portal vida de silício.

– Programando o Arduino:

Neste instante vamos conectar o arduino no computador e abrir a IDE arduino. Desta forma iremos escrever o programa abaixo na IDE e compile o programa para o seu arduino.

Em contrapartida antes de carregar o programa, você precisa selecionar qual porta você deseja usar para fazer o carregamento do seu programa no Arduino (upload). Dentro do Arduino IDE, clique no menu Ferramentas (tools) e abra o submenu Porta(Port). Clique na porta que seu Arduino está conectado, tal como COM3 ou COM4. Geralmente aparece o nome da placa Arduino : “COM3 (Arduino/Genuino Uno)”.

#include <Wire.h> //INCLUSÃO DE BIBLIOTECA
#include <Adafruit_BMP085.h> //INCLUSÃO DE BIBLIOTECA
 
Adafruit_BMP085 bmp; //OBJETO DO TIPO Adafruit_BMP085 (I2C)
   
void setup(){
  Serial.begin(9600); //INICIALIZA A SERIAL
  if (!bmp.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
  Serial.println("Sensor BMP180 não foi identificado! Verifique as conexões."); //IMPRIME O TEXTO NO MONITOR SERIAL
  while(1){} //SEMPRE ENTRE NO LOOP
  }
}
   
void loop(){
    
    Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readTemperature()); //IMPRIME NO MONITOR SERIAL A TEMPERATURA
    Serial.println(" *C (Grau Celsius)"); //IMPRIME O TEXTO NO MONITOR SERIAL
        
    Serial.print("Pressão: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO
    Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL
     
    Serial.print("Altitude: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readAltitude()); //IMPRIME NO MONITOR SERIAL A ALTITUDE APROXIMADA
    Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
    
    Serial.print("Pressão a nível do mar (calculada): "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readSealevelPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO A NÍVEL DO MAR
    Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL

    Serial.print("Altitude real: "); //IMPRIME O TEXTO NO MONITOR SERIAL
    Serial.print(bmp.readAltitude(101500)); //IMPRIME NO MONITOR SERIAL A ALTITUDE REAL
    Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
     
    Serial.println("-----------------------------------"); //IMPRIME UMA LINHA NO MONITOR SERIAL
    delay(2000); //INTERVALO DE 2 SEGUNDOS
}

 

ATENÇÃO: não esqueça de definir a placa e a porta que esta utilizando para carregar o programa.

 

Imagem do circuito do sensor barométrico BMP180

– Testando o funcionamento:

Em seguida podemos visualizar o sensor funcionando através do monitor serial já que nos inicializamos ele com a função Serial.begin(9600). Basta clicar na lupa no canto direito superior da IDE arduino como na imagem abaixo:

Monitor serial

 

Entendendo a fundo:

Software

– Definições e variáveis utilizadas no projeto do sensor barométrico com arduino

Inicialmente a instrução #include <> serve para incluirmos bibliotecas ao nosso código, facilitando assim a escrita do mesmo, incluímos as bibliotecas Wire.h e Adafruit_BMP085.h. Logo depois, definimos um objeto do tipo Adafruit_BMP085 bmp.

#include <Wire.h> //INCLUSÃO DE BIBLIOTECA
#include <Adafruit_BMP085.h> //INCLUSÃO DE BIBLIOTECA 

Adafruit_BMP085 bmp; //OBJETO DO TIPO Adafruit_BMP085 (I2C)

– Função Setup – Definindo pinos do sensor barométrico com arduino

A função setup é aquela que ira rodar apenas uma vez quando nosso programa for iniciado. Ela é do tipo void, ou seja, não tem retorno e também não tem parâmetros de entrada. Em princípio, inicializamos a comunicação serial. Logo depois, temos uma estrutura de decisão if na qual a condição de que se o sensor não for inicializado “!bmp.begin()” for verdadeira ele executara imprimindo no serial monitor o texto “Sensor BMP180 não foi identificado! Verifique as conexões.”. Então, en seguida temos a estrutura de repetição “while(1)” formando um loop.

Serial.begin(9600); //INICIALIZA A SERIAL
if (!bmp.begin()){ //SE O SENSOR NÃO FOR INICIALIZADO, FAZ
Serial.println("Sensor BMP180 não foi identificado! Verifique as conexões."); //IMPRIME O TEXTO NO MONITOR SERIAL
while(1){} //SEMPRE ENTRE NO LOOP

– Função Loop – Leitura do nosso sensor barométrico com arduino e Estruturas de decisão

A função loop ao contrário da setup roda tudo que estiver dentro dela varias vezes em um loop constante até que seja reiniciado ou parado o programa. A função serial.print imprime primeiro um texto em que esta entre coxetes e depois entre aspas e depois imprime a leitura feita no sensor. Neste instante, na função loop temos uma série de Serial.print a qual vai imprimir no monitor serial textos entre aspas, a temperatura, a altitude e pressão. A função “bmp.readTemperature()” serve justamente para ler a temperatura neste caso, no sensor e nos retornar o resultado, A função “bmp.readPressure()” serve para ler a pressão no sensor e nos retornar o resultado e A função “bmp.readAltitude()” serve para ler a altitude no sensor e nos retornar o resultado. Logo depois, irá imprimir no serial monitor o resultado. Temos no final uma espera de 2000 milissegundos de espera para depois executar toda a função loop novamente.

Serial.print("Temperatura: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readTemperature()); //IMPRIME NO MONITOR SERIAL A TEMPERATURA
   Serial.println(" *C (Grau Celsius)"); //IMPRIME O TEXTO NO MONITOR SERIAL
       
   Serial.print("Pressão: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO
   Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL
    
   Serial.print("Altitude: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readAltitude()); //IMPRIME NO MONITOR SERIAL A ALTITUDE APROXIMADA
   Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
   
   Serial.print("Pressão a nível do mar (calculada): "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readSealevelPressure()); //IMPRIME NO MONITOR SERIAL A PRESSÃO A NÍVEL DO MAR
   Serial.println(" Pa (Pascal)"); //IMPRIME O TEXTO NO MONITOR SERIAL

   Serial.print("Altitude real: "); //IMPRIME O TEXTO NO MONITOR SERIAL
   Serial.print(bmp.readAltitude(101500)); //IMPRIME NO MONITOR SERIAL A ALTITUDE REAL
   Serial.println(" m (Metros)"); //IMPRIME O TEXTO NO MONITOR SERIAL
    
   Serial.println("-----------------------------------"); //IMPRIME UMA LINHA NO MONITOR SERIAL
   delay(2000); //INTERVALO DE 2 SEGUNDOS

Considerações finais:

Neste tutorial mostramos como funciona e como utilizar o Sensor de Pressão e Temperatura BMP180. Esperamos que você continue nos acompanhando e sinta-se à vontade para nos dar sugestões, críticas ou elogios. Lembre-se de deixar suas dúvidas nos comentários abaixo.