Upload code vào Board Arduino
/* SFE_BMP180 library example sketch
Bản phác thảo này cho thấy cách sử dụng thư viện SFE_BMP180 để đọc
Cảm biến áp suất khí quyển của BMP BMP180.
https://www.sparkfun.com/products/11824
Giống như hầu hết các cảm biến áp suất, BMP180 đo áp suất tuyệt đối.
Đây là áp suất xung quanh thực tế mà thiết bị nhìn thấy, sẽ
thay đổi theo cả độ cao và thời tiết.
Trước khi đọc áp lực, bạn phải đọc nhiệt độ.
startTemperature() and getTemperature().
kết quả độ C.
Một khi bạn có đọc nhiệt độ, bạn có thể đọc áp lực.
startPressure() and getPressure().
kết quả là millibar (mb) (hPa).
Nếu bạn đang theo dõi các kiểu thời tiết, có lẽ bạn sẽ muốn loại bỏ ảnh hưởng của độ cao. Điều này sẽ tạo ra các bài đọc có thể được so sánh với các bài đọc áp lực được công bố từ các địa điểm khác.
sealevel()
Nếu bạn muốn đo độ cao, bạn sẽ cần phải biết áp lực ở độ cao cơ sở. Đây có thể là áp lực đáy biển trung bình, hoặc
một áp lực đọc trước ở độ cao của bạn, trong trường hợp đó bài đọc độ cao tiếp theo sẽ là + hoặc - đường cơ sở ban đầu.
Điều này được thực hiện với hàm altitude().
Hardware connections:
- (GND) to GND
+ (VDD) to 3.3V
(CẢNH BÁO: không kết nối + với nguồn 5V nếu không cảm biến sẽ bị hỏng!)
Chỉ cần kết nối các chân I2C (SCL và SDA) với Arduino. Các chân khác nhau trên Arduinos khác nhau:
Bất kỳ chân Arduino có nhãn: SDA SCL
Uno, Redboard, Pro: A4 A5
Mega2560, Due: 20 21
Leonardo: 2 3
Leave the IO (VDDIO) pin unconnected. This pin is for connecting
the BMP180 to systems with lower logic levels such as 1.8V
*/
// Your sketch must #include this library, and the Wire library.
// (Wire is a standard library included with Arduino.):
#include <SFE_BMP180.h>
#include <Wire.h>
// You will need to create an SFE_BMP180 object, here called "pressure":
SFE_BMP180 pressure;
#define ALTITUDE 1655.0 // Altitude of SparkFun's HQ in Boulder, CO. in meters
void setup()
{
Serial.begin(9600);
Serial.println("REBOOT");
// Initialize the sensor (it is important to get calibration values stored on the
device).
if (pressure.begin())
Serial.println("BMP180 init success");
else
{
// Oops, something went wrong, this is usually a connection problem,
// see the comments at the top of this sketch for the proper connections.
Serial.println("BMP180 init fail\n\n");
while(1); // Pause forever.
}
}
void loop()
{
char status;
double T,P,p0,a;
// Loop here getting pressure readings every 10 seconds.
// If you want sea-level-compensated pressure, as used in weather reports,
// you will need to know the altitude at which your measurements are taken.
// We're using a constant called ALTITUDE in this sketch:
Serial.println();
Serial.print("provided altitude: ");
Serial.print(ALTITUDE,0);
Serial.print(" meters, ");
Serial.print(ALTITUDE*3.28084,0);
Serial.println(" feet");
// If you want to measure altitude, and not pressure, you will instead need
// to provide a known baseline pressure. This is shown at the end of the sketch.
// You must first get a temperature measurement to perform a pressure reading.
// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.print("nhiet do: ");
Serial.print(T,2);
Serial.print(" do C, ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" doF");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest
wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement
(T).
// (If temperature is stable, you can do one temperature measurement for a
number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.print("ap suat tuyet do: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.0295333727,2);
Serial.println(" inHg");
// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your
current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in
m.
// Result: p0 = sea-level compensated pressure in mb
p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
Serial.print("ap suat muc nuoc bien: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.0295333727,2);
Serial.println(" inHg");
// On the other hand, if you want to determine your altitude from the
pressure reading,
// use the altitude function along with a baseline pressure (sea-level or
other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.
a = pressure.altitude(P,p0);
Serial.print("tinh toan do cao: ");
Serial.print(a,0);
Serial.print(" m, ");
Serial.print(a*3.28084,0);
Serial.println(" feet");
}
else Serial.println("doc ap suat loi\n");
}
else Serial.println("doc ap suat loi\n");
}
else Serial.println("doc nhiet doloi\n");
}
else Serial.println("doc nhiet doloi\n");
delay(5000); // Pause for 5 seconds.
}
Tải về mã nguồn: https://github.com/RuiSantosdotme/Random-Nerd-Tutorials/blob/master/Projects/SFE_BMP180_example.ino