BMP180 — Датчик абсолютного давления, построенный по пьезорезистивной схеме, он имеет низкий шум и высокую линейность, а также высокую скорость установки показаний. На кристалле расположен MEMS-датчик в виде гибкой кремниевой мембраны, закрывающей камеру со стандартным давлением. На мембране расположены тензодатчики, которые включены по схеме моста, и изменяют своё сопротивление при изгибе мембраны. Изгиб мембраны зависит от разности между окружающим давлением и давлением в камере, и выходной сигнал с тензомоста зависит от давления окружающей среды. Так как параметры мембраны и резисторов зависят от температуры, то на кристалле расположен цифровой термометр, показания которого используются для компенсации данных барометра, но может использоваться и самостоятельно. Не рекомендуется использование для компенсации данных барометра данные о температуре с других датчиков. Термометр в BMP180 расположен на самом измерительном кристалле, он измеряет температуру чувствительного элемента — поэтому его показания наиболее близки к температуре барометра и точны. Барометр может работать с максимальной точностью 2 Пa (если использовать его как барометрический высотомер это соответствует погрешности измерения высоты в 17 см).
Технические характеристики:
Напряжение питания 1.62V — 3.6V.
Интерфейс подключения I2C.
Точность до 0.02hPa (17cm).
Диапазон: 300hPa to 1100hPa (+9000m to -500m).
Выходные данные: 16 бит давление и температура
разрешение по давлению 0.01hPa
разрешение по температуре 0.1 о С
Arduino Example Code
#include
#include
/***************************************************
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");
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);
}
Данный скетч выводит
- Temperature = хх.хх *C — Температура в градусах Цельсия
- Pressure = хх Pa — Атмосферное давление в Паскалях
- Altitude = хх.хх meters — Высота в метрах
- Pressure at sealevel (calculated) = хх Pa — Атмосферное давление в Паскалях (относительно уровня моря (расчетная))
- Real altitude = хх.хх meters — Реальная высота (расчетная)
Для того чтобы выводить атмосферное давление в мм ртутного столбанадо изменить несколько строк
Serial.print ("Pressure = ");
Serial.print (bmp.readPressure() / 133.322); // Полученное значение в Па делим на 133,322 и получаем мм.рт.ст.
Serial.println (" mm"); // и соответственно меняем "Pa" на "mm"
Serial.print ("Pressure at sealevel (calculated) = ");
Serial.print (bmp.readSealevelPressure() / 133.322);
Serial.println (" mm");
Настройка датчика BMP180
Атмосферное давление зависит от места измерения, температуры воздуха и погоды. На уровне моря среднегодовое атмосферное давление составляет p н = 1013.25 мбар = 101,325 кПа (нормальное давление) при среднегодовой температуре 15°С. И при подъеме на каждые 8 м атмосферное давление падает на 100 Па = 1 мбар.
Можно получить более точное измерение высоты. Если мы знаем, текущее давление над уровнем моря для наших координат. Для этого надо узнать нашу реальную высоту над уровнем моря с помощью карт от Google, для этого перейдем по ссылке . В окне с картой от Google находим наше место положение и кликаем левой кнопкой мышки, для установки метки на карте, и получаем данные по высоте над уровнем моря для нашей точки. Также не забываем учесть на каком этаже мы находимся и прибавить высоту этажей нашим данным.
Нормальное атмосферное давление на уровне моря составляет приблизительно 101,3 кПа или 101325 Па. Проще для получения нужного значения воспользоваться онлайн калькулятором - Расчёт атмосферного давления на различных высотах , а для перевода из (мм рт. ст.) в (Па) есть простая формула Па = мм рт. ст. * 133,322 . Для калибровки высоты нам потребуется внести изменения в строку
Serial . print (bmp . readAltitude (101500 ) ) ;
где вместо значения 101500 вводим своё рассчитанное значение.
Вещи, которых нужно остерегаться
Дайте ему воздух: Помните, что BMP180 необходим доступ окружающего воздуха для измерения его давления, так что не стоит его укладывать в герметичный корпус.
Но не слишком много воздуха: С другой стороны, воздействие быстро движущихся воздушных потоков или ветра могут вызвать кратковременные колебания давления, которые будут влиять ваши показания. Защетите устройство от сильных воздушных потоков.
Температурный режим: Потому что точное значение температуры необходимо для измерения давления, старайтесь не подвергать устройство резким изменениям температуры, и держите его подальше от горячих частей и других источников тепла.
Влага: BMP180 чувствителен к влаге и не должен контактировать с водой.
Свет: Удивительно, датчик BMP180 чувствителен к свету, который может войти в устройство через отверстие в верхней части чипа. Для достижения максимальной точности, следует оградить чип от окружающего света.
Апрель 2, 2015
Датчик атмосферного давления BMP180 от компании Bosch является более экономным в плане электропитания и более точным чем его предшественник .
Датчик BMP180
Основные характеристики датчика BMP180:
- Диапазон измерения давления: 300 – 1100hPa
- Напряжение питания: от 3.3 и 5V
- Низкое энергопотребление: 3 мкА (режим ультра-низкого энергопотребления)
- Точность: режим пониженного энергопотребления, разрешение 0.06hPa (0,5 м)
- Высокий линейный режим с разрешением 0.02hPa
- Подключение: протокол связи I2C
- Возможность измерения температуры в диапазоне -40 … +85 ° C
- Время отклика: 5ms
- Ток в режиме ожидания: 0,1 мкA
- VCC – для подключения 5в питания
- GND – для подключения к минусу (GND)
- SCL и SDA – для подключения к шине I2C
- 3.3 – для подключения 3.3в питания
Купить датчик BMP180:
Библиотеки для датчика BMP180:
Для работы с датчиком BMP180 используются библиотеки которые предназначены для датчика BMP085 .
Библиотека для работы с датчиком атмосферного давления BMP085 от Adafruit
Библиотека для работы с датчиком давления BMP085
Какую именно библиотеку использовать для работы с датчиком решать Вам. Обзор библиотеки BMP085 я делал ранее в статье
Для примера я буду использовать библиотеку от Adafruit. Для начала запустим тестовый скетч из библиотеки и откроем монитор порта…
Как мы видим у нас есть:
- Temperature = 27.40 *C — Температура в градусах Цельсия
- Pressure = 97726 Pa — Атмосферное давление в Паскалях
- Altitude = 303.19 meters — Высота в метрах
- Pressure at sealevel (calculated) = 97735 Pa — Атмосферное давление в Паскалях (относительно уровня моря (расчетная))
- Real altitude = 317.47 meters — Реальная высота (расчетная)
Настройка и калибровка датчика BMP180
Хочу обратить Ваше внимание на то, что расчетные данные не точные, и они задаются в скетче.
Информация
Мы можем получить более точное измерение высоты. Если мы знаем, текущее давление над уровнем моря для наших координат, которое будет меняться в зависимости от погодных условий и тому подобное. Если это 1015 миллибар, то значение равно 101 500 Па.
Теперь узнаем нашу реальную высоту над уровнем моря с помощью карт от Google, для этого перейдем по ссылке . В окне с картой от Google находим наше место пребывания и кликаем левой кнопкой мышки, для установки метки на карте.
Координаты моего местоположения с значениями высоты
Как видим высота над уровнем моря 203 м, но я нахожусь на 3 этаже, значит прибавим еще 7 м и получим высоту 210 метров (приблизительно) и запомним ее. Теперь переходим к скетчу и значение с отображением данных атмосферного давления в Pa переводим в мм.рт.ст (значение делим на 133.3) и меняем отображение “Pa” на “мм”.
code
Arduino
Serial.print("Pressure = "); Serial.print(bmp.readPressure()/133.3); Serial.println(" mm");
Serial . print ("Pressure = " ) ; Serial . print (bmp . readPressure () / 133.3 ) ; Serial . println (" mm" ) ; |
и еще тут
code
Arduino
Serial.print("Pressure at sealevel (calculated) = "); Serial.print(bmp.readSealevelPressure()/133.3); Serial.println(" mm");
Serial . print ("Pressure at sealevel (calculated) = " ) ; Serial . print (bmp . readSealevelPressure () / 133.3 ) ; Serial . println (" mm" ) ; |
Снова загружаем наш скетч в плату и смотрим что у нас в мониторе порта
Датчики атмосферного давления bmp180, bmp280, bme280 – частые гости в инженерных проектах. С их помощью можно предсказать погоду или измерить высоту над уровнем моря. Сегодня именно эту линейку можно назвать самыми популярными и недорогими сенсорами для ардуино. В этой статье мы расскажем принцип действия датчиков, схему подключения к различным платам Arduino и приведем примеры программирования скетчей.
Барометр – устройство, измеряющее атмосферное давление. Электронные барометры используются в робототехнике и различных электронных устройствах. Наиболее распространенными и доступными являются датчики давления от фирмы BOSH: это BMP085, BMP180, BMP280 и другие. Первые два очень похожи между собой, BMP280 – это более новый и усовершенствованный датчик.
Датчики давления работают на преобразовании давления в движение механической части. Состоит датчик давления из преобразователя с чувствительным элементом, корпуса, механических элементов (мембран, пружин) и электронной схемы.
Датчик BMP280 создан специально для приложений, где требуются малые размеры и пониженное потребление энергии. К таким приложениям относятся навигационные системы, прогноз погоды, индикация вертикальной скорости и другие. Датчик обладает высокой точностью, хорошей стабильностью и линейностью. Технические характеристики датчика BMP280:
- Габариты 2 х 2,5 х 0,95 мм.
- Давление 300-1100гПа;
- Температуры от 0С до 65 С;
- Поддержка интерфейсов I2C и SPI;
- Напряжение питания 1,7В – 3,6В;
- Средний ток 2,7мкА;
- 3 режима работы – режим сна, режим FORCED (проведение измерения, считывание значения, переход в спящий режим), режим NORMAL (перевод датчика в циклическую работу – то есть устройство самостоятельно через установленное время выходит из режима сна, проводит измерения, считывает показания, сохраняет измеренные значения и переходит снова в режим сна).
Датчик BMP180 – это дешевый и простой в применении сенсорный датчик, который измеряет атмосферное давление и температуру. Используется обычно для определения высоты и в метеостанциях. Состоит устройство из пьезо-резистивного датчика, термодатчика, АЦП, энергонезависимой памяти, ОЗУ и микроконтроллера.
Технические характеристики датчика BMP180:
- Пределы измеряемого давления 225-825 мм рт. ст.
- Напряжение питания 3,3 – 5В;
- Ток 0,5мА;
- Поддержка интерфейса I2C;
- Время срабатывания 4,5мс;
- Размеры 15 х 14 мм.
Датчик bme280 содержит в себе 3 устройства – для измерения давления, влажности и температуры. Разрабатывался для малого потребления тока, высокой надежности и долгосрочной стабильной работы.
Технические характеристики датчика bme280:
- Размеры 2,5 х 2,5 х 0,93 мм;
- Металлический LGA-корпус, оснащенный 8-ю выходами;
- Напряжение питания 1,7 – 3,6В;
- Наличие интерфейсов I2C и SPI;
- Потребляемый ток в режиме ожидания 0,1 мкА.
Если сравнивать все устройства между собой, то датчики очень похожи. По сравнению со своим предшественником, к которым относится BMP180, более новый датчик BMP280 заметно меньше по размерам. Его восьмиконтактный миниатюрный корпус требует аккуратности во время монтажа. Также устройство поддерживает интерфейсы I2C и SPI, в отличие от предшественников, которые поддерживали только I2C. По логике работы датчика изменений практически нет, была только усовершенствована температурная стабильность и увеличено разрешение АЦП. Датчик BME280, измеряющий температуру, влажность и давление, также похож на BMP280. Отличие между ними заключается в размерах корпуса, так как BME280 имеет датчик влажности, который немного увеличивает габариты. Количество контактов и их расположение на корпусе совпадают.
Варианты подключения к Arduino
Подключение датчика BMP180 к Ардуино. Для подключения понадобятся сам датчик BMP180, плата Ардуино UNO, соединительные провода. Схема подключения показана на рисунке ниже.
Землю с Ардуино нужно соединить с землей на датчике, напряжение – на 3,3 В, SDA – к пину А4, SCL – к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C. Сам датчик работает от напряжения 3,3 В, а Ардуино – от 5 В, поэтому на модуле с датчиком установлен стабилизатор напряжения.
Подключение BMP 280 к Ардуино. Распиновка и вид сверху платы изображены на рисунке.
Сам модуль датчика давления выглядит следующим образом:
Для соединения с Ардуино нужно подключить выходы следующим образом: соединить землю с Ардуино и на датчике, VCC – на 3,3В, SCL / SCK – к аналоговому контакту А5, SDA / SDI – к А4.
Подключение датчика BME280. Расположение контактов и распиновка у датчика BME280 такая же, как у BMP280.
Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами.
При подключении по I2C нужно соединить контакты SDA и SCL.
При подключении по SPI нужно соединить SCL с модуля и SCK (13й контакт на Ардуино), SDO с модуля к 12 выводу Ардуино, SDA – к 11 контакту, CSB (CS) – к любому цифровому пину, в данном случае к 10 контакту на Ардуино. В обоих случаях напряжение подключается к 3,3В на Ардуино.
Описание библиотеки для работы с датчиком. Пример скетча
Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.
Первый пробный скетч будет заставлять датчик считывать показания давления и температуры. Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль. В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.
Status = pressure.startTemperature();// Считываются данные с датчика о температуре if(status!=0){ delay(status); // Ожидание status = pressure.getTemperature(T); // Сохранение полученных данных о температуре if(status!=0){ Serial.print("Temperature: "); // Выведение на экран слова «Температура» Serial.print(T,2); // Вывод на экран значения температуры. Serial.println("deg C, "); //Печать символа градуса Цельсия.
Затем нужно получить информацию об атмосферном давлении.
Status = pressure.startPressure(3); // происходит считывание давления if(status!=0){ delay(status); // Ожидание status = pressure.getPressure(P,T); // получение давления, сохранение if(status!=0){ Serial.print("Absolute pressure: "); // Вывод на экран слов «Атмосферное давление» Serial.print(P,2); // Вывод на экран значения переменной mBar Serial.print(" mbar, "); // Вывод на экран текста "mBar" Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.) Serial.println(" mmHg");} // вывод на экран единицы измерения давления "mmHg" (мм. Рт.ст.).
После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.
Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.
Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.
Void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //определение температуры, вывод ее на экран в градусах Цельсия. Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //определение давления, вывод его на экран Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); //определение влажности в процентах, вывод измеренного значения на экран. Serial.println(); }
Возможные ошибки при подключении и устранение их
Наиболее часто встречающаяся ошибка – неправильные данные о давлении и температуре, которые отличаются на несколько порядков от реального значения. Причиной этого чаще всего становится неправильное подключение – например, в библиотеке указано, что нужно подключать по I2C, а датчик подключен по SPI.
Также при использовании “китайских” датчиков можно столкнуться с нестандартными I2C или SPI адресами. В этом случае рекомендуется просканировать все присоединенные устройства с помощью одного из популярных скетчей и выяснить, по какому адресу откликается ваш датчик давления.
Еще одной проблемой может стать несоответствие рабочего напряжения питания модуля базовому напряжению используемого контроллера. Так, для работы с датчиком на 3,3 В вам потребуется создать делитель напряжения или использовать один из существующих готовых модулей согласования уровней. Кстати, такие модули достаточно дешевы и начинающим рекомендуется использовать их.
Небольшие отклонения от реальной величины могут быть связаны с калибровкой сенсора. Например, для датчика BMP180 все данные рассчитываются и задаются в скетче. Для получения более точного значения высоты нужно знать текущее значение давления над уровнем моря для данных координат.
Заключение
Датчики атмосферного давления bmp180, bmp280- не самые дешевые виды сенсоров, но во многих случаев альтернативы таким сенсорам практически нет. В проекте метеостанции датчик фиксирует важный параметр – атмосферное давление, благодаря чему становится возможным предсказывать погоду. В проектах, связанных с созданием летающих аппаратов барометр используется в качестве датчика реальной высоты над уровнем моря.
Подключение датчиков не представляет какой-либо сложности, т.к. используется стандартной i2C или SPI соединение. Для программирования можно использовать одну из готовых .
Датчик абсолютного давления и температуры (последним сегодня уже никого не удивишь) Bosch BMP180 . Датчик не нов и хорошо известен, datasheet изучен вдоль и поперек, а библиотек целая куча.
Характеристики:
- Диапазон измерения давления: 300 – 1100 hPa.
- Напряжение питания: от 1.8 — 3.3 и 5V(если на плате стоит стабилизатор напряжения).
- Низкое энергопотребление: 3 мкА (режим ультра-низкого энергопотребления)
- Точность: режим пониженного энергопотребления, разрешение 0.06hPa (0,5 м).
- Высокий линейный режим с разрешением 0.02hPa (0,17 м).
- Подключение: интерфейс I2C .
- Возможность измерения температуры в диапазоне -40 … +85 ° C.
- Время отклика: 5ms — 7.5ms (standart mode).
- Ток в режиме ожидания: 0,1 мкA
Принцип действия датчика BMP180:
В датчике имеется герметичная камера, одна из стенок которой является гибкой мембраной с установленными на ней тензодатчиками. Мембрана прогибается пропорционально разности давлений внутри камеры и снаружи, что влияет на изменение сопротивления тензодатчиков электрическому току. Так же имеется термодатчик, сопротивление которого меняется пропорционально температуре. АЦП (аналого-цифровой преобразователь) переводит результаты изменений датчиков в цифровые данные «некомпенсированные результаты
», которые доступны для чтения из регистров датчика: «Out MSB», «Out LSB» и «Out xLSB». Для компенсации указанных результатов (компенсации смещения, температурной зависимости, погрешностей при изготовлении, неоднородностей материалов и т.д.) каждый датчик калибруется на заводе, и в EEPROM записываются индивидуальные для каждого датчика 11 калибровочных коэффициентов
(176 бит)
, которые доступны для чтения из регистров датчика: «AC1», «AC2», «AC3», «AC4», «AC5», «AC6», «B1», «B2», «MB», «MC», «MD».
Не допускайте попадания на датчик влаги и прямых солнечных лучей.
Алгоритм получения данных:
- Чтение калибровочных коэффициентов:
Чтение значений из одноименных регистров:
short
AC1, AC2, AC3, B1, B2, MB, MC, MD;
unsigned short
AC4, AC5, AC6;
- Чтение температуры: (некомпенсированное значение)
Записываем в регистр «Measurement Control» значение: 0x2E;
Читаем результат из регистров «Out MSB» и «Out LSB»;
- Чтение давления: (некомпенсированное значение)
Записываем в регистр «Measurement Control» значение: 0x34 + (OSS<<6);
Ожидаем спад флага состояния «CSO» в «0»;
Читаем результат из регистров «Out MSB», «Out LSB» и «Out xLSB»;
long UP = («Out MSB»<<16 + «Out LSB»<<8 + «Out xLSB») >> (8-OSS);
- Вычисление действительных значений
Код и подключение.
Датчик достаточно популярный. Чаще всего он идет уже с обвязкой в виде готового модуля. Вы без труда найдете много разных, готовых библиотек. Я остановился на BMP180_Breakout_Arduino_Library. Скачать можно с GitHub или с нашего сайта .
Подключение описано в библиотеке, но я его продублирую на всякий случай:
SCL(clock)
- Uno,Nano,Pro к А5
- Mega,Due к 21
- Leonardo к 3
SDA(Data)
- Uno,Nano,Pro к А4
- Mega,Due к 20
- Leonardo к 2
VIN — к +5 вольта.
IO — Этот вывод есть на некоторых платах, питание в обход стабилизатора. НЕ больше 3.3 вольта .
GND — подключаем к минус.
Ну вот примерочный код с пояснениями:
#include
BMP085 – это сенсор для контроля барометрического давления (кроме этого, он еще контролирует и температуру).
Датчик используется во многих проектах, в том числе и с использованием Arduino, так как у него практически нет аналогов. Кроме того, стоит он тоже недорого. Первый вопрос, который возникает: а зачем кому-то мерять атмосферное давление? На то есть две причины. Первая - контролировать высоту над уровнем моря. С увеличением высоты над уровнем моря, давление падает. Очень удобно в походах, в качестве альтернативы GPS навигаторам. Кроме того, показатель атмосферного давления используют для прогнозирования погоды.
На смену BMP085 в свое время пришел датчик BMP180, который подключается к Arduino и другим микроконтроллерам так же как и его предшественник, но при этом меньше и стоит дешевле.
Технические характеристики BMP085
- Диапазон чувствительности: 300-1100 гПа (9000 м - 500 м над уровнем моря);
- Разрешающая способность: 0.03 гПа / 0.25 м;
- Рабочая температура -40 до +85°C, точность измерения температуры +-2°C;
- Подключение по i2c;
- V1 на модуле использует 3.3 В питания и питания логики;
- V2 на модуле использует 3.3-5 В питание и питание логики;
После перезагрузки Arduino IDE, можете запустить первый скетч-пример, код которого приведен ниже:
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP085_U.h>
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
void setup(void)
Serial.begin(9600);
Serial.println("Pressure Sensor Test"); Serial.println("");
/* Инициализируем сенсор */
if(!bmp.begin())
/* Если появилась надпись: "There was a problem detecting the BMP085 ...",
Проверьте правильность подключения сенсора */
Serial.print("Ooops, no BMP085 detected ... Check your wiring or I2C ADDR!");
sensors_event_t event;
bmp.getEvent(&event);
/* отображаем результаты (барометрическое давление измеряется в гПа) */
if (event.pressure)
/* Отображаем атмосферное давление в гПа */
Serial.print("Pressure: "); Serial.print(event.pressure); Serial.println(" hPa");
Открываем окно серийного монитора (скорость передачи данных - 9600). Наш скетч должен выводить данные о давлении в гПа (гектопаскалях). Можно проверить работоспособность сенсора, нажав пальцем на сенсор. На рисунке показаны значения давления после нажатия пальцем.
Измерение высоты над уровнем моря
Вы наверняка знаете, что давление падает с увеличением высоты. То есть, мы можем рассчитать высоту, зная давление и температуру. Опять таки, математику мы оставим за кадром. Если вам интересны расчеты, можете ознакомиться с ними на этой странице Википедии .
В примере, который приведен ниже будет использована дополнительная библиотека Arduino. Для расчета высоты с помощью датчика BMP085, обновите функцию "void loop()". Необходимые изменения скетча приведены в скетче ниже. В результате вы получите значение температуры на основании уровня давления и значения температуры.
/* создаем новое событие (event) для сенсора */
sensors_event_t event;
bmp.getEvent(&event);
/* отображаем результаты (барометрическое давление в гПа) */
if (event.pressure)
/* отображаем атмосферное давление в гПа */
Serial.print("Pressure: ");
Serial.print(event.pressure);
Serial.println(" hPa");
/* для расчета высоты с определенной точностью, необходимо знать *
* среднее давление и температуру окружающей среды
* в градусах по цельсию в момент снятия показаний*
* если у вас нет этих данных, можно использовать "значение по умолчанию",
* которое равно 1013.25 гПа (это значение определено как
* SENSORS_PRESSURE_SEALEVELHPA *
* в файле sensors.h). Но в результаты будут не точными*
* необходимые значения можно найти на сайтах с прогнозами температур*
* или на ресурсах информационных центров при больших аэропортах*
* например, для Париже, Франция, можно найти текущее среднее значение давления*
* по на сайте: http://bit.ly/16Au8ol */
/* получаем текущее значение температуры с датчика BMP085 */
float temperature;
bmp.getTemperature(&temperature);
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" C");
/* конвертируем полученные данные в высоту */
/* обновляем следующую строку, отображая текущие значения */
float seaLevelPressure = SENSORS_PRESSURE_SEALEVELHPA;
Serial.print("Altitude: ");
Serial.print(bmp.pressureToAltitude(seaLevelPressure,
Serial.println(" m");
Serial.println("");
Serial.println("Sensor error");
Запускаем скетч и видим рассчитанную высоту над уровнем моря.
Точность показаний BMP085 можно значительно увеличить, уточнив среднестатистическое значение давления, которое меняется в зависимости от погоды. Каждый 1 гПа давления, который мы не учли, приводит к ошибке в 8.5 метра!
На рисунке ниже приведены значения давлений с одного из информационных ресурсов европейского аэропорта. Желтым цветом выделено значение давления, которое нам можно использовать для уточнения результатов.
Изменим в нашем скетче следующую строку, записав в ней актуальное значение (1009 гПа):
float seaLevelPressure = 1009;
В результате мы получим несколько другие результаты:
Совет: когда вы уточняете давление, не забудьте привести используемые данные к гПа.
Использование BMP085 (API v1)
Повторимся в очередной раз: для того, чтобы узнать давление и высоту над уровнем моря, надо провести некоторые расчеты. Но все они уже включены в библиотеку Adafruit_BMP085 Arduino Library (API v1), скачать которые можно ссылке .
После установки библиотек, необходимо перезагрузить Arduino IDE
После перезагрузки можете запустить первый скетч-пример:
#include <Wire.h>
Adafruit_BMP085 bmp;
Serial.begin(9600);
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.println(" Pa");
Serial.println();
После прошивки вашего Arduino, откройте серийный монитор. Установите скорость обмена данными на 9600. Скетч будет выводить температуру в градусах по Цельсию и давление в паскалях. Если вы приложите палец к чувствительному элементу датчика, температура и давление увеличатся:
Измерение высоты над уровнем моря (API v1)
Для контроля высоты над уровнем моря, достаточно просто запустить скетч, который приведен ниже:
#include <Wire.h>
#include <Adafruit_BMP085.h>
Adafruit_BMP085 bmp;
Serial.begin(9600);
Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");
// рассчитываем высоту над уровнем моря, отталкиваясь от значений
//"стандартного" барометрического давления, равного 1013.25 милибар = 101325 Паскаль
Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");
Serial.println();
Запускаем скетч для отображения результатов:
Судя по показаниям выше, мы находимся на высоте -21.5 метра относительно уровня моря. Но ведь мы знаем, что находимся над морем! Вспоминаем о той же проблеме, что и при использовании API V2. Надо учесть погоду! Ок. Предположим, мы нашли качественный метеорогический веб-сайт и давление составляет 101,964 Па. Открываем пример Examples->BMP085test в Arduino IDE и правим строку, которая выделена на рисунке ниже:
В эту строку надо ввести данные текущего давления. После нового запуска, вы обнаружите, что данные разительно поменялись и у нас получилось 29.58 метров со знаком плюс, что гораздо больше похоже на правду.
Оставляйте Ваши комментарии, вопросы и делитесь личным опытом ниже. В дискуссии часто рождаются новые идеи и проекты!