17 junho 2013

Sensor de temperatura e pressão BMP085 - Módulo GY-65

Hoje vou apresentar um outro módulo facilmente encontrado no mercado, que é o módulo de temperatura e pressão BMP085, como esse abaixo :

Módulo GY-65 com sensor BMP085

O nome BMP085 vem do nome dado ao sensor propriamente dito, conforme podemos ver no datasheet. No caso do módulo da foto acima, o código do módulo é GY-65.

O módulo funciona com uma tensão de 1.8 a 3.6v. Sua faixa de leitura de pressão é de 300 a 1100 hPa (hectoPascal), o que permite determinar altitudes desde 9000 metros acima do nível do mar, até -500m. A conexão com o controlador é feita por apenas 2 pinos, usando a interface I2C.

Vou utilizar uma biblioteca da Adafruit (www.adafruit.com), que você pode baixar nesse endereço.

Um parênteses a respeito dessa biblioteca é que, ao descompactar, o nome da pasta será "Adafruit-BMP085-Library-master". Infelizmente a IDE não aceita nome de pasta de bibliotecas com números e caracteres especiais, então renomeie a pasta apenas para "BMP085". Uso a versão 1.0.5 da IDE do Arduino, não sei se isso acontece nas outras versões.

Biblioteca baixada e instalada, vamos ao circuito :

Circuito BMP085 e Arduino Uno
 Tome cuidado para não inverter nenhuma conexão ao conectar os fios, pois geralmente a marcação dos pinos vem embaixo da placa, ficando escondida quando você a encaixa na protoboard.

O programa abaixo é baseado no programa de teste que vem junto com a biblioteca, com as devidas traduções para facilitar o entendimento :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//Programa : Teste módulo pressão BMP085
//Autor : Adafruit
//Traducoes e comentarios : Arduino e Cia


#include <Wire.h>
#include <Adafruit_BMP085.h>

// Conectar pino Vcc do BMP085 ao pino 3.3v do Arduino(NAO UTILIZAR 5.0V !)
// Conectar pino GND do módulo ao GND do Arduino
// Conectar o pino SCL do módulo ao pino analógico 5 do Arduino
// Conectar o pino SDA do módulo ao pino analógico 4 do Arduino
// Pino EOC (End of conversion) não utilizado
// Pino XCLR é um pino de reset, também não é utilizado

Adafruit_BMP085 bmp;

void setup() 
{
  Serial.begin(9600);
  if (!bmp.begin()) {
  Serial.println("Sensor BMP085 não encontrado, verifique as conexões !");
  while (1) {}
  }
}

void loop() 
{
    Serial.print("Temperatura = ");
    Serial.print(bmp.readTemperature());
    Serial.println(" *C");

    Serial.print("Pressao = ");
    Serial.print(bmp.readPressure());
    Serial.println(" Pa");

    // Calcula a altitude utilizando a pressao barometrica padrao
    // de 1013.25 milibar = 101325 Pascal
    Serial.print("Altitude = ");
    Serial.print(bmp.readAltitude());
    Serial.println(" metros");

  // É possivel extrair uma medição mais precisa se você souber 
  // a pressão ao nível do mar, que varia com o tempo/clima. 
  // Se ela for de 1015 milibars ,é igual a 101500 Pascals.

    Serial.print("Altitude real = ");
    Serial.print(bmp.readAltitude(101500));
    Serial.println(" metros");
    Serial.println();

    delay(5000);
}

Rode o programa e abra o serial monitor. De 5 em 5 segundos será apresentada a temperatura em Celsius, a pressão em Pascal e a altitude, em metros :

Dados do BMP085 no Serial Monitor

15 comentários:

  1. Otimo tutorial, porém não consegui fazer funcionar, coloquei todas as conexões corretas. A unica diferença é que é um Arduino Mega. Pode ser isso?

    ResponderExcluir
    Respostas
    1. Boa noite,

      No Arduino Uno, os pinos de ligação são o A4 (SDA) e A5 (SCL). No Arduino Mega, você deve usar os pinos 20 (SDA) e 21 (SCL).

      Provavelmente é isso. Abraço !

      Excluir
  2. olá boa tarde, estive fazendo esta conexão mas tive a seguinte linha de erro abaixo. Alguém pode ajudar?

    C:\Program Files (x86)\Arduino\libraries\Adafruit_BMP085\Adafruit_BMP085.cpp:19:24: fatal error: util/delay.h: No such file or directory
    #include
    ^
    compilation terminated.

    ResponderExcluir
    Respostas
    1. Bom dia,

      Parece que é algum erro na biblioteca. Qual versão de IDE você está usando ?

      Abraço.

      Excluir
  3. a PREssão vem em pa, transformei em hpa mas da preção de 920 hpa, não entendo, está incorreto, tem como calibrar?

    ResponderExcluir
  4. Aqui dá um erro no include do bmp, diz que falta o adafruit_sensor.h, e se eu incluo este, gera outros 1000 erros... alguma ideia?

    ResponderExcluir
    Respostas
    1. Boa noite,

      Qual versão da IDE você está usando ?

      Excluir
  5. Funcionou perfeitamente aqui. Obrigado.

    Porem quando vou utiliza-lo junto com um sensor de temperatura e umidade, o SHT15, que é digital também (SDA e SCL) dá erro. Será que tem como fazer sem a biblioteca? Ou será que posso utilizar dois sensores nas entradas SDA e SCL simultaneamente?

    ResponderExcluir
    Respostas
    1. Bom dia Thiago,

      Você pode utilizar 2 ou mais sensores no barramento I2C, sem problemas. Isoladamente eles funcionam ?

      Abraço.

      Excluir
  6. Bom dia!

    Estou tentando ligar dois sensores BPM085 no mesmo arduino mais não estou conseguindo, pois não estou conseguindo trocar, em um dos sensores, os pinos de ligação A4 e A5. Seria possivel fazer esse tipo de ligação? A possibilidade de trocar as os pinos de entrada de informação? O arduino que estou usando é o UNO.
    Abraço

    ResponderExcluir
    Respostas
    1. Boa noite Paulo,

      Esse sensor utiliza a interface I2C, que fica nos pinos A4 e A5 do Uno, logo não é possível trocar essa conexão. Uma alternativa seria mudar o endereço do módulo, mas não encontrei nenhuma informação sobre isso.

      Abraço !

      Excluir
  7. Olá, estou usando um Arduino Nano. Fiz o circuito corretamente, inclui a biblioteca no IDE, e rodei o programa sem problemas. Entretanto, quando abro o serial monitor me aparece a seguinte mensagem: "Sensor BMP085 não encontrado, verifique as conexões !".
    Pode me ajudar? Já conferia os pinos no sensor, e estão todos corretos.

    ResponderExcluir
    Respostas
    1. Bom dia Natasha,

      Parece ser algum problema de comunicação entre o Arduino e o BMP, como a própria mensagem mostra, mas para garantir que seja isso, peço que use o I2C Scanner para ver qual endereço está configurado no módulo. Eu explico como usar o I2C Scanner neste post:

      http://www.arduinoecia.com.br/2015/04/arduino-lcd-16x2-modulo-i2c-rtc-ds1307.html

      Abraço!

      Excluir
  8. boa tarde, preciso fazer uma leitura mais precisa, maior que de 5 em 5 segundos, exclusivamente da pressão, existe a possibilidade de fazer leituras como 2x por segundo ou de segundo em segundo e posteriormente coloca-los em um gráfico?

    ResponderExcluir