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.
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.