
Въведение
Сензорът BMP085 е популярен барометричен датчик, използван за измерване на температура, атмосферно налягане и височина над морското равнище. Той използва I2C комуникация, което го прави изключително лесен за интеграция с различни микроконтролери, като например Arduino. В тази статия ще покажем как да свържем BMP085 към Arduino Uno и как да съберем и обработим данни от сензора с помощта на предварително подготвен код.
Свързване
За да използвате BMP085 с Arduino Uno, е необходимо да свържете сензора правилно. Ето как се прави това:
- VCC: Свържете към 3.3V (важно е да не свързвате към 5V, защото може да повредите сензора).
- GND: Свържете към земя (GND) на Arduino.
- SCL: Свържете към аналоговия пин A5 на Arduino Uno (това е линията за тактов сигнал при I2C).
- SDA: Свържете към аналоговия пин A4 на Arduino Uno (това е линията за данни при I2C).

Статията ни с ревю на Arduino UNO, ще ви помогне за правилното свързване на компонентите.
Инсталиране на библитека за BMP085

За да инсталирате библиотеката BMP180 в средата на Arduino, следвайте следните стъпки. Отворете Arduino IDE и изберете Sketch > Include Library > Manage Libraries…. В прозореца на библиотеките въведете “BMP180” в полето за търсене. Потърсете библиотеката, разработена от Adafruit, и натиснете бутона Install. Това ще инсталира библиотеката и всички зависимости, необходими за правилната работа. Ако предпочитате, можете да изтеглите библиотеката директно от GitHub или от нашия сайт: линк. След това можете да я добавите ръчно към Arduino IDE. Ако не знаете как да направите това, ще ви насоча към нашата страница: Arduino IDE бърз преглед
BMP085 и Arduino код за измерване на температура, налягане и височина с
Примерен код, който използва библиотеката Adafruit BMP085, за да прочете и изведе стойностите за температура, налягане и височина:
#include <Adafruit_BMP085.h>
// 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
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");
Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
// 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);
}
Пълно Обяснение на Кода:
Включване на библиотеката и дефиниране на обект
#include <Adafruit_BMP085.h>
Този ред включва библиотеката Adafruit BMP085, която улеснява взаимодействието със сензора. Библиотеката съдържа всички функции, необходими за извличане на измерените стойности за температура, налягане и височина.
Създаване на обект за сензора
Adafruit_BMP085 bmp;
Създаваме обект bmp, чрез който ще комуникираме със сензора и ще четем данните от него.
Функция setup()
void setup() {
Serial.begin(9600);
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP085 sensor, check wiring!");
while (1) {}
}
}
- Serial.begin(9600): Стартираме серийната комуникация със скорост от 9600 бод, за да можем да следим данните на компютъра през серийния монитор.
- bmp.begin(): Инициализираме сензора BMP085. Ако сензорът не е открит (поради неправилно свързване или хардуерен проблем), се изписва съобщение и програмата влиза в безкраен цикъл, за да се избегнат по-нататъшни грешки.
Функция loop()
Тази функция се изпълнява многократно и извършва измерванията.
Измерване на температура
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
- bmp.readTemperature(): Тази функция чете текущата температура от сензора и я връща в градуси по Целзий.
Измерване на атмосферното налягане
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
- bmp.readPressure(): Чете атмосферното налягане и го връща в Паскали.
Изчисляване на височината
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
- bmp.readAltitude(): Изчислява височината, като използва стандартната барометрична стойност на налягането (1013.25 mbar). Тази функция изчислява височината на база текущото налягане.
Пресмятане на налягане на морското равнище
Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");
- bmp.readSealevelPressure(): Изчислява и връща налягането на морското равнище в Паскали.
По-прецизно измерване на височината
Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(101500));
Serial.println(" meters");
- Можете да получите по-прецизно измерване на височината, ако знаете текущото налягане на морското равнище. В този пример то е зададено на 101500 Паскала (или 1015 mbar).
Заключение
С помощта на този примерен проект, можем лесно да измерим температура, атмосферно налягане и височина, използвайки BMP085 сензор и Arduino. Чрез този прост код се демонстрира колко удобен е този сензор за интеграция и събиране на данни за околната среда. BMP085 е отличен избор за проекти, в които се изисква информация за атмосферните условия.