Датчик атмосферного давления BMP085 и Arduino
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 В питание и питание логики; .
Подключение BMP085 к Arduino
BMP085 подключается к Arduino очень легко, так как на подобных модулях предусмотрен i2c. Для начала, необходимо распаять рельсы на модуле BMP085.
Установите рельсу на беспаечную монтажную плату таким образом, чтобы короткая сторона контактов была сверху. Установите модуль BMP085 на рельсу.
После этого припаяйте контакты к датчику:
Результат распайки показан выше. Теперь мы можем подключать BMP085 к Arduino:
Контакт VCC подключается к источнику питания - пин 3.3 V на Arduino. Если у вас BMP085 V1, нельзя использовать источник питания более 3.3 В, так что не используйте 5 В! На модулях BMP085 V2 есть регулятор 3.3 В, так что этот датчик давления можно подключать к питанию 5 В.
Контакт GND подключается к земле (GND на Arduino).
Контакт i2c SCL clock подключается к i2c clock пину на контроллере. На классических моделях Arduino (Arduino Uno/Duemilanove/Diecimila/и т.д.), это аналоговый пин Analog #5.
Контакт i2c SDA data подключается к i2c data контакту на контроллере. На классических моделях Arduino (Arduino Uno/Duemilanove/Diecimila/и т.д.), это аналоговый пин Analog #4.
К сожалению, пины под i2c на большинстве микроконтроллеров привязаны к конкретным пинам, так что придется использовать именно их.
Нет необходимости подключать пины XCLR (перезагрузка) или EOC (окончание конверсии). Если вам надо ускорить конверсию, вы можете использовать пин EOC в качестве индикатора - в нашем скетче мы просто будем ждать.
Использование BMP085 (API v2)
Эта часть статьи написана на базе новой версии драйверов v2 для датчика BMP085. Для работы вам понадобится Unified Sensor Driver, написанный командой Adafruit. Новая версия драйверов обеспечивает более точные показания высоты над уровнем моря, позволяет легче реализовывать переключение между BMP085 и другими датчиками давления, которые используются в вашем проекте.
Вам надо скачать и установить библиотеку Adafrut_Sensor library. Если у вы устанавливаете библиотеку для Arduino впервые, ознакомьтесь с инструкцией сайте Arduino-diy.com.
Особенности использования BMP085Для того, чтобы рассчитать высоту над уровнем моря и барометрическое давление на основании показаний сенсора, надо прописать достаточно запутанный кусок математических зависимостей. Кому интересно, можете заглянуть в даташит BMP085. Особой пользы, с точки зрения самообразования, в этих преобразованиях нет. Это просто особенности работы датчика. Так что этот кусок кода предусмотрительно прописан в библиотеке для Arduino.
Библиотека для работы сенсора BMP085 с Arduino, можно скачать на github.
После перезагрузки Arduino IDE, можете запустить первый скетч-пример, код которого приведен ниже:
Adafruit_BMP085_Unified bmp = Adafruit_BMP085_Unified(10085);
Serial.println("Pressure Sensor Test"); Serial.println("");
/* Если появилась надпись: "There was a problem detecting the BMP085 . ",
Проверьте правильность подключения сенсора */
Serial.print("Ooops, no BMP085 detected . Check your wiring or I2C ADDR!");
/* отображаем результаты (барометрическое давление измеряется в гПа) */
/* Отображаем атмосферное давление в гПа */
Serial.print("Pressure: "); Serial.print(event.pressure); Serial.println(" hPa");
Открываем окно серийного монитора (скорость передачи данных - 9600). Наш скетч должен выводить данные о давлении в гПа (гектопаскалях). Можно проверить работоспособность сенсора, нажав пальцем на сенсор. На рисунке показаны значения давления после нажатия пальцем.
Измерение высоты над уровнем моряВы наверняка знаете, что давление падает с увеличением высоты. То есть, мы можем рассчитать высоту, зная давление и температуру. Опять таки, математику мы оставим за кадром. Если вам интересны расчеты, можете ознакомиться с ними на этой странице Википедии.
В примере, который приведен ниже будет использована дополнительная библиотека Arduino. Для расчета высоты с помощью датчика BMP085, обновите функцию 'void loop()'. Необходимые изменения скетча приведены в скетче ниже. В результате вы получите значение температуры на основании уровня давления и значения температуры.
/* создаем новое событие (event) для сенсора */
/* отображаем результаты (барометрическое давление в гПа) */
/* отображаем атмосферное давление в гПа */
/* для расчета высоты с определенной точностью, необходимо знать *
* среднее давление и температуру окружающей среды
* в градусах по цельсию в момент снятия показаний*
* если у вас нет этих данных, можно использовать 'значение по умолчанию',
* которое равно 1013.25 гПа (это значение определено как
* в файле sensors.h). Но в результаты будут не точными*
* необходимые значения можно найти на сайтах с прогнозами температур*
* или на ресурсах информационных центров при больших аэропортах*
* например, для Париже, Франция, можно найти текущее среднее значение давления*