domingo, 5 de maio de 2013

Utilizando o sensor barométrico BMP085 com o Arduino

O sensor BMP085 fornece medida de pressão entre 300 e 1100 hPa (aproximadamente 9000m a -500m de altura) com uma resolução de 0.03hPa / 0.25m,  o componente também inclui um sensor de temperatura com aproximadamente +-2°C de precisão.
A comunicação com o Arduino é através do I2C e o dispositivo trabalha com 3.3v, alguns sites falam em 5v, mas por garantia é melhor utilizar 3.

Para facilitar o uso vamos utilizar a biblioteca Adafruit_BMP085, assim não cobriremos o I2C que são encapsulados pela biblioteca Wire e a Adafruit_BMP085.

Para instalar a biblioteca basta descompactar o conteúdo na pasta libraries do IDE do Arduino, clique aqui para fazer o download.
A biblioteca irá disponibilizar um código de exemplo no seu IDE.


Requisitos de hardware.
1 Arduino
1 BMP085


Circuito.
O circuito é muito simples, basta conectar o VCC do sensor aos 3.3v do Arduino, GND ao GND, SDA a porta analógica 4 e SCL a porta analógica 5.



Imagem desenvolvida com o Fritzing

Código.
#include <Wire.h>
#include <Adafruit_BMP085.h>

// A biblioteca da Adafruit utiliza a comunição I2C para se comunicar com o sensor

//Conexões BMP085 / Arduino
//VCC - 3.3v
//GND - Ground
//SCL - Analógica 5
//SDA - Analógica 4

//Declaração do sensor
Adafruit_BMP085 bmp;
  
void setup(){
  Serial.begin(9600);
  if(!bmp.begin()){
Serial.println("Não encontrei o sensor BMP085, verifique as ligações!");
while(1){}
  }
}
  
void loop() {
  // Calcula a temperatura
  Serial.print("Temperatura = ");
  Serial.print(bmp.readTemperature());
  Serial.println(" *C");

  // Calcula a pressão atmosférica
  Serial.print("Pressão = ");
  Serial.print(bmp.readPressure());
  Serial.println(" Pa");
   
  // Calcula a altitude assumindo a pressão barométricca padrão
  // de 1013.25 millibar = 101325 Pascal
  Serial.print("Altitude = ");
  Serial.print(bmp.readAltitude());
  Serial.println(" metros");

  // Você pode obter uma altitude mais precisa se souber
  // a pressão atual ao nível do mar
  // Ex. Se for 1018.7 millibars = 101870 Pascal
  Serial.print("Altitude real = ");
  Serial.print(bmp.readAltitude(101870));
  Serial.println(" metros");

  Serial.println();
  delay(10000);
}


Referências.