Подключение датчика атмосферного давления и температуры BMP180 к Arduino

Подключение датчика атмосферного давления и температуры BMP180 к Arduino

Хотите добавить отслеживание высоты или мониторинг погоды в ваш проект на Arduino? Датчик атмосферного давления BMP180 делает это невероятно простым! Этот компактный и мощный датчик измеряет температуру и атмосферное давление, которые можно использовать для определения высоты и отслеживания погодных условий.

По мере перемещения от уровня моря к горной вершине атмосферное давление уменьшается. Измеряя это изменение, BMP180 может оценить высоту, что делает его идеальным альтиметром для дронов, метеозондов и проектов навигации на открытом воздухе. Поскольку атмосферное давление также зависит от погодных условий, этот датчик помогает обнаруживать тенденции в изменении атмосферного давления, что делает его полезным для мониторинга и прогнозирования погоды.

В этом руководстве мы покажем вам, как подключить модуль BMP180 к Arduino, установить необходимые библиотеки и написать простую программу для начала сбора данных. Давайте начнём!

Обзор оборудования

В основе модуля лежит BMP180 — цифровой датчик атмосферного давления и температуры нового поколения, созданный компанией Bosch Sensortec.

Чип BMP180

Внутри датчик BMP180 содержит три основных компонента:

  • MEMS-датчик давления

  • Аналого-цифровой преобразователь (АЦП), который преобразует показания давления в цифровые значения.

  • Блок управления с заводскими калибровочными коэффициентами, хранящимися в ROM. Эти калибровочные значения используются для вычисления точных показаний температуры и давления.

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

BMP180 измеряет атмосферное давление в диапазоне от 300 гПа до 1100 гПа (что соответствует высотам от 9000 метров над уровнем моря до 500 метров ниже уровня моря). Разрешение датчика составляет 0,01 гПа, а типичная абсолютная точность — ±1 гПа.

Датчик может измерять температуру в диапазоне от -40°C до 85°C с разрешением 0,1°C и точностью приблизительно ±1,0°C.

Требования к питанию

Модуль оснащён встроенным стабилизатором напряжения LM6206, что позволяет ему работать как с 3,3 В, так и с 5 В логикой микроконтроллеров. Это означает, что вы можете безопасно использовать его с распространёнными микроконтроллерами, такими как Arduino или Raspberry Pi, без дополнительных преобразователей напряжения.

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

BMP180 — это датчик с низким энергопотреблением, потребляющий около 3–5 мкА при нормальной работе. Благодаря такому низкому энергопотреблению он идеально подходит для проектов с батарейным питанием и портативных устройств.

Интерфейс I2C

BMP180 взаимодействует с микроконтроллерами по протоколу I2C. Обратите внимание, что I2C-адрес BMP180 фиксирован и равен 0x77, что важно при написании кода для связи с датчиком.

Технические характеристики

Вот полные технические характеристики:

Напряжение питания

3.3V to 5.5V

Потребляемый ток

~3 to 5µA

Диапазон измерения давления

300 to 1100 hPa

Абсолютная точность давления

±1 hPa

Диапазон температур

-40˚C to +85˚C

Точность температуры

±1˚C

Для получения более подробной информации вы можете ознакомиться с техническим описанием датчика.

Распиновка модуля BMP180

Модуль BMP180 имеет всего четыре вывода:

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

VCC используется для подачи питания на модуль. Он может работать с напряжением от 3,3 В до 5 В.

GND — это вывод заземления.

SCL — вывод тактирования для интерфейса I2C.

SDA — вывод данных для интерфейса I2C.

Схема подключения модуля BMP180 к Arduino

Давайте подключим модуль BMP180 к Arduino! Процесс подключения прост и требует всего нескольких шагов.

Сначала подключите вывод VIN к выходу 5V на Arduino, а вывод GND — к земле Arduino.

Далее нам нужно подключить выводы, используемые для связи по I2C. Важно знать, что разные платы Arduino имеют разные выводы I2C, и их необходимо подключать правильно. На платах Arduino с компоновкой R3 выводы SDA и SCL также расположены на штыревых разъёмах рядом с выводом AREF. Однако внутренне они являются теми же выводами A4 (SDA) и A5 (SCL).

Вот краткая справочная таблица подключений:

BMP180 ModuleArduino
VCC5V
GNDGND
SCLSCL or A5
SDASDA or A4

Пожалуйста, обратитесь к изображению ниже, чтобы увидеть правильную схему подключения.

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

Установка необходимых библиотек

Прежде чем вы сможете начать считывать данные с датчика BMP180, вам необходимо установить библиотеку Adafruit BMP180. Она доступна в менеджере библиотек Arduino.

Для установки библиотеки:

  1. Сначала откройте вашу программу Arduino IDE. Затем нажмите на значок Менеджер библиотек на левой боковой панели.

  2. Введите «bmp180» в поле поиска для фильтрации результатов.

  3. Найдите Adafruit BMP085 Library от Adafruit.

  4. Нажмите кнопку Install, чтобы добавить её в вашу Arduino IDE.

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

Поскольку библиотека Adafruit BMP085 зависит от других библиотек, вам будет предложено установить её зависимости, включающие `Adafruit Unified Sensor Driver `_ и `Adafruit Bus IO Library `_.

Когда появится это сообщение, просто нажмите INSTALL ALL, чтобы убедиться, что всё настроено правильно.

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

Код Arduino — считывание температуры и атмосферного давления

Этот базовый скетч показывает, как считывать данные с датчика BMP180. С помощью этой программы вы можете создать собственную метеостанцию, которая не только показывает температуру и атмосферное давление, но и может оценивать вашу высоту над уровнем моря!

#include <Wire.h>
#include <Adafruit_BMP085.h>
#define seaLevelPressure_hPa 1013.25

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");

  Serial.print("Altitude = ");
  Serial.print(bmp.readAltitude());
  Serial.println(" meters");

  Serial.print("Pressure at sealevel (calculated) = ");
  Serial.print(bmp.readSealevelPressure());
  Serial.println(" Pa");

  Serial.print("Real altitude = ");
  Serial.print(bmp.readAltitude(seaLevelPressure_hPa * 100));
  Serial.println(" meters");

  Serial.println();
  delay(500);
}

После загрузки этой программы на Arduino вы можете открыть монитор последовательного порта. Вы увидите показания температуры, давления и высоты, обновляющиеся каждые несколько секунд.

Interface BMP180 Barometric Pressure & Temperature Sensor with Arduino

Примечание:

Для более точных показаний высоты обязательно обновите переменную seaLevelPressure_hPa правильным значением для вашего местоположения на текущий день.

Объяснение кода:

Программа начинается с подключения двух важных библиотек: Wire.h, которая помогает Arduino взаимодействовать с модулем BMP180 по протоколу I2C, и Adafruit_BMP085.h, которая содержит функции для управления модулем BMP180.

#include <Wire.h>
#include <Adafruit_BMP085.h>

Затем мы определяем переменную seaLevelPressure_hPa и устанавливаем её значение равным 1013,25 гПа. Это стандартное атмосферное давление на уровне моря. Нам нужно это число для вычисления высоты на основе атмосферного давления. Вот что важно знать: если это число отклонится всего на 1 гПа, ваш расчёт высоты может быть неверным примерно на 8,5 метра! Для лучших результатов вам следует узнать текущее давление на уровне моря в вашем регионе и обновить это число.

#define seaLevelPressure_hPa 1013.25

Далее мы создаём объект bmp класса Adafruit_BMP085, который позволяет нам взаимодействовать с датчиком.

Adafruit_BMP085 bmp;

В функции setup() мы инициализируем последовательную связь с компьютером, чтобы видеть показания датчика в мониторе последовательного порта. Затем мы вызываем функцию begin() для инициализации датчика BMP180. Эта функция настраивает связь по I2C, проверяет идентификатор чипа датчика, выполняет программный сброс и ожидает калибровки, прежде чем датчик начнёт предоставлять точные показания. Если датчик не обнаружен, на мониторе последовательного порта отображается сообщение об ошибке, и программа останавливается.

Serial.begin(9600);

if (!bmp.begin()) {
    Serial.println("Could not find a valid BMP085 sensor, check wiring!");
    while (1) {}
}

В функции loop() мы используем следующие функции для считывания данных с датчика BMP180.

  • Функция readTemperature() возвращает температуру в градусах Цельсия.

  • Функция readPressure() возвращает атмосферное давление в Паскалях.

  • Функция readAltitude(seaLevelPressure_hPa * 100) вычисляет вашу высоту (в метрах) на основе заданного давления на уровне моря (в гПа).

  • Функция readSealevelPressure() вычисляет, каким было бы давление (в гПа) на уровне моря из вашего текущего местоположения.

Serial.print("Temperature = ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");

Serial.print("Pressure = ");
Serial.print(bmp.readPressure());
Serial.println(" Pa");

Serial.print("Altitude = ");
Serial.print(bmp.readAltitude());
Serial.println(" meters");

Serial.print("Pressure at sealevel (calculated) = ");
Serial.print(bmp.readSealevelPressure());
Serial.println(" Pa");

Serial.print("Real altitude = ");
Serial.print(bmp.readAltitude(seaLevelPressure_hPa * 100));
Serial.println(" meters");