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.

10 comentários:

  1. cara vlw me ajudou muito
    mais e as outras 2 coneccoes ficam de fora ?

    ResponderExcluir
    Respostas
    1. Oi amigo, valeu por ter comentado.
      O I2C utiliza apenas 4 pinos sendo o suficiente para a leitura do sensor.
      O XCLR serve para você enviar um comando de reset ao sensor.
      No EOC o sensor coloca um sinal quando acaba de fazer a medição.
      Por isso você só utilizará esses pinos se realmente necessitar desses controles adicionais.
      Abraços.

      Excluir
    2. estou tentando gravar no Pro Mini atmega328 3.3V 8M
      mais não ta indo
      no caso nao teria como ligar um transmissor de 433mhz direto no sensor e usam no receptor um Pro Mini atmega328 3.3V 8M ?

      Excluir
    3. Acho que ligar o sensor direto no tx não dá, você terá que utilizar um microcontrolador como arduino no meio.
      Aí o arduino lê o sensor e envia via tx.
      Abs.

      Excluir
    4. sta dando esta mensagem
      avrdude: Version 5.11, compiled on Sep 2 2011 at 19:38:36
      Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
      Copyright (c) 2007-2009 Joerg Wunsch

      System wide configuration file is "C:\Program Files (x86)\Arduino\hardware/tools/avr/etc/avrdude.conf"

      Using Port : \\.\COM4
      Using Programmer : arduino
      Overriding Baud Rate : 57600
      avrdude: Send: 0 [30] [20]
      avrdude: Send: 0 [30] [20]
      avrdude: Send: 0 [30] [20]
      avrdude: Recv:
      avrdude: stk500_getsync(): not in sync: resp=0x00

      avrdude done. Thank you.

      estou olhando o arquivo avrdude.conf pra achar onde baixar a velocidade da serial para 9600bps

      Excluir
    5. como ei se o codigo foi gravado no Arduino ?

      Excluir
  2. Este comentário foi removido pelo autor.

    ResponderExcluir
  3. Boa tarde!

    Estou precisando instalar dois sensores bmp085 no mesmo arduino. O problema é que não consigo modificar as entradas analógicas A4 e A5. Você pode me ajudar!
    Estou desenvolvendo um experimento e esse problema se mostrou uma pedra no caminho.
    Agradeço antecipadamente

    ResponderExcluir
  4. Alguém por favor me ajude?
    Até agora não tive uma resposta!

    ResponderExcluir