Подключение датчика атмосферного давления и температуры BMP180 к Arduino
Хотите добавить отслеживание высоты или мониторинг погоды в ваш проект на Arduino? Датчик атмосферного давления BMP180 делает это невероятно простым! Этот компактный и мощный датчик измеряет температуру и атмосферное давление, которые можно использовать для определения высоты и отслеживания погодных условий.
По мере перемещения от уровня моря к горной вершине атмосферное давление уменьшается. Измеряя это изменение, BMP180 может оценить высоту, что делает его идеальным альтиметром для дронов, метеозондов и проектов навигации на открытом воздухе. Поскольку атмосферное давление также зависит от погодных условий, этот датчик помогает обнаруживать тенденции в изменении атмосферного давления, что делает его полезным для мониторинга и прогнозирования погоды.
В этом руководстве мы покажем вам, как подключить модуль BMP180 к Arduino, установить необходимые библиотеки и написать простую программу для начала сбора данных. Давайте начнём!
Обзор оборудования
В основе модуля лежит BMP180 — цифровой датчик атмосферного давления и температуры нового поколения, созданный компанией Bosch Sensortec.
Чип BMP180
Внутри датчик BMP180 содержит три основных компонента:
MEMS-датчик давления
Аналого-цифровой преобразователь (АЦП), который преобразует показания давления в цифровые значения.
Блок управления с заводскими калибровочными коэффициентами, хранящимися в ROM. Эти калибровочные значения используются для вычисления точных показаний температуры и давления.
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, без дополнительных преобразователей напряжения.
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 имеет всего четыре вывода:
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 Module | Arduino | |
| VCC | 5V | |
| GND | GND | |
| SCL | SCL or A5 | |
| SDA | SDA or A4 |
Пожалуйста, обратитесь к изображению ниже, чтобы увидеть правильную схему подключения.
Установка необходимых библиотек
Прежде чем вы сможете начать считывать данные с датчика BMP180, вам необходимо установить библиотеку Adafruit BMP180. Она доступна в менеджере библиотек Arduino.
Для установки библиотеки:
Сначала откройте вашу программу Arduino IDE. Затем нажмите на значок Менеджер библиотек на левой боковой панели.
Введите «bmp180» в поле поиска для фильтрации результатов.
Найдите Adafruit BMP085 Library от Adafruit.
Нажмите кнопку Install, чтобы добавить её в вашу Arduino IDE.
Поскольку библиотека Adafruit BMP085 зависит от других библиотек, вам будет предложено установить её зависимости, включающие `Adafruit Unified Sensor Driver `_ и `Adafruit Bus IO Library `_.
Когда появится это сообщение, просто нажмите INSTALL ALL, чтобы убедиться, что всё настроено правильно.
Код 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 вы можете открыть монитор последовательного порта. Вы увидите показания температуры, давления и высоты, обновляющиеся каждые несколько секунд.
Примечание:
Для более точных показаний высоты обязательно обновите переменную 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");