Finalmente pudemos testar o recém adquirido sensor de pressão atmosférica. Nas nossas pesquisas iniciais encontrei o excelente blog "Arduino & Cia" (http://www.arduinoecia.com.br/2013/06/sensor-de-temperatura-e-pressao-bmp085.html). O autor desse blog tem a mesma filosofia do Solucionática e compartilha seu conhecimento de forma muito didática, vale à pena conferir. Outra fonte excelente de informações é o site da Adafruit, da genial Limor Fried (http://www.adafruit.com/about/), engenheira do MIT.
E afinal, o que é um sensor de pressão atmosférica? Quem disse que pela foto dá pra saber do que se trata? Vamos, primeiramente, apresentar o sensor BMP085, que dá nome ao módulo da Itead Studio. O fabricante é bem conhecido - a Bosch Sensortec- e sua função principal é medir pressão barométrica, mas mede também temperatura. A comunicação com o Arduino é feita pelo barramento I2C. A faixa de tensão de alimentação vai de 1.8 V a 3.6V. Logo, cuidado ao alimentar o dispositivo! O BMP085 é um barômetro eletrônico, construído com uma técnica especial denominada microelectromechanical system (MEMS).
Trata-se de um cristal de quartzo microscópico acoplado a uma membrana exposta à pressão atmosférica. As variações de tensão do cristal, para mais ou para menos, são amplificadas por um circuito dentro do sensor, que além disso faz o condicionamento do sinal usando técnicas de Processamento Digital de Sinais (DSP) e, por fim, transmite os valores de temperatura e pressão via I2C. Para decodificar esse barramento e exibir os dados obtidos, usamos um Arduino Mega 2560.
O sensor, propriamente dito, é o quadradinho metálico com um furo no centro. O restante dos componentes do módulo são um regulador de tensão, resistores de pullup e capacitores de desacoplamento. Na nossa montagem não foi necessário nenhum componente externo. No entanto, como se pode notar pela foto, soldamos uma barrinha de terminais. Depois foi só ligar aos pinos do Arduino +3V3, gnd, scl e sda,. Note que os pinos EOC e XCLR não deixados livres. As imagens foram retiradas de http://imall.iteadstudio.com/im130710002.html e http://www.ifixit.com/blog/2011/11/.
#include <Wire.h>
#include <Adafruit_BMP085.h>
/***************************************************
This is an example for the BMP085 Barometric Pressure & Temp Sensor
Designed specifically to work with the Adafruit BMP085 Breakout
----> https://www.adafruit.com/products/391
These displays use I2C to communicate, 2 pins are required to
interface
Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!
Written by Limor Fried/Ladyada for Adafruit Industries.
BSD license, all text above must be included in any redistribution
****************************************************/
// Connect VCC of the BMP085 sensor to 3.3V (NOT 5.0V!)
// Connect GND to Ground
// Connect SCL to i2c clock - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 5
// Connect SDA to i2c data - on '168/'328 Arduino Uno/Duemilanove/etc thats Analog 4
// EOC is not used, it signifies an end of conversion
// XCLR is a reset pin, also not used here
Adafruit_BMP085 bmp;
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
void loop() {
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
// Calculate altitude assuming 'standard' barometric
// pressure of 1013.25 millibar = 101325 Pascal
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
// you can get a more precise measurement of altitude
// if you know the current sea level pressure which will
// vary with weather and such. If it is 1015 millibars
// that is equal to 101500 Pascals.
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(101500));
Serial.println(" meters");
Serial.println();
delay(500);
}