Arduino BMP180 барометр (датчик давления)


Датчик давления BMP180 позволяет сделать простой барометр с платой Ардуино Нано или Уно. С помощью данного датчика можно создать погодную метеостанцию для дома, добавив к схеме датчик температуры и дисплей 1602 I2C. Рассмотрим, как правильно подключить датчик давления к Arduino bmp180 (bmp080) и вывести данные об атмосферном давлении на монитор порта Arduino IDE и LCD дисплей 1602.

BMP180 I2C подключение к Arduino

Датчик давления Ардуино BMP180 (GY-68)

Барометр — это устройство, измеряющее атмосферное давление. Современные электронные барометры GY-68 и BMP180 основаны на пьезорезистивном или тензометрическом методе, т.е. в датчиках происходит изменение сопротивления материала под действием деформирующих сил. Обратите внимание, что датчик атмосферного давления GY-68 подключается к питанию 3,3 Вольт Arduino.

Распиновка датчиков давления GY 68 и BMP 180
Распиновка датчиков давления GY 68 и BMP 180

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

  • Напряжение питания: 5 Вольт
  • Рабочий ток: 0.5 мАмпер
  • Диапазон измерения: 300 гПа – 1100 гПа
  • Интерфейс подключения: I2C
  • Время срабатывания: 4.5 мс.
  • Точность измерения давления: 0,1 гПа.
  • Диапазон измерения температуры: 0 — 65 °C.

Подключение датчика bmp180 к Ардуино

Для этого занятия потребуется:

  • Arduino Uno / Arduino Nano / Arduino Mega;
  • датчик давления BMP180 (GY-68);
  • дисплей LCD 1602;
  • провода «папа-мама».
Как подключить датчик давления bmp180 к Arduino
Как подключить датчик давления bmp180 к Arduino
BMP180 (GY-68) Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VIN 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

Подключение к микроконтроллеру Ардуино осуществляется по интерфейсу I2C. Контакты SCL / SDA и питание модуля выведены на группу контактов. Кроме того, для работы с датчиком потребуется установить библиотеку BMP180 Breakout Arduino Library, которая позволяет упросить работу с модулем. Команды для bmp180 (bmp080) и gy-68 одинаковые, так что библиотека подойдет для всех перечисленных барометров.

Барометр на Ардуино своими руками

#include "Wire.h"
#include "SFE_BMP180.h"

SFE_BMP180 pressure; // создаем объект pressure
#define ALTITUDE 1655.0 // высота офиса SparkFun, штат Колорадо, в метрах

void setup(){
   Serial.begin(9600);  // запускаем монитор порта
   pressure.begin();     // запускаем датчик давления
}

void loop(){
   char status;
   double T,P,p0,a;

   // для точного измерения, следует знать высоту, на которой производятся замеры
   // в этом примере используется константа ALTITUDE
   Serial.println();
   Serial.print("provided altitude: ");
   Serial.print(ALTITUDE,0);
   Serial.println(" meters");
  
   // перед измерением давления, следует узнать температуру
   // если запрос успешен, то возвращается время ожидания в миллисекундах
   // если запрос на измерение температуры не успешен, то возвращается 0
   status = pressure.startTemperature();
   if (status != 0){
      delay(status);

      // результат измерения температуры сохраняется в переменной T
      status = pressure.getTemperature(T);
      if (status != 0){
         Serial.print("temperature: ");
         Serial.print(T,2);
         Serial.println(" deg C");

         // запускаем измерение давления
         // если запрос успешен, возвращается время ожидания в миллисекундах
         // если запрос на измерение давления не успешен, возвращается 0
         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);
               Serial.print(" mb, ");
               Serial.print(P*0.0295333727,2);
               Serial.println(" inHg");

              // датчик bmp180 возвращает абсолютное давление, которое зависит от высоты
              // параметры: P = абсолютное давление в мб, ALTITUDE = текущая высота в м.
              // результат: p0 = давление с компенсацией на уровне моря в мбар
              p0 = pressure.sealevel(P,ALTITUDE);
              Serial.print("relative (sea-level) pressure: ");
              Serial.print(p0,2);
              Serial.print(" mb, ");
              Serial.print(p0*0.0295333727,2);
              Serial.println(" inHg");
           }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);
}

Пояснения к коду:

  1. чтобы убрать влияние высоты при измерении атмосферного давления, используйте функцию уровня моря и текущую высоту;
  2. скачать библиотеку SFE_BMP180.h для работы с датчиком атмосферного давления BMP180 Arduino можно на нашем сайте здесь.



Барометр на Ардуино BMP180 LCD1602

Барометр на Ардуино Уно bmp180 lcd 1602
Схема барометра на Ардуино Уно — bmp180 + lcd 1602

В следующем примере данные температуры и давления выводятся на текстовый экран (на дисплей не входит вся информация), при этом к шине i2c два устройства сразу подключено. Всего к шине i2c можно подключать до 127 устройств. Подключите к микроконтроллеру текстовый экран (согласно схеме, размещенной выше) и загрузите следующий пример программы для датчика давления GY-68 Arduino Uno.

#include "Wire.h"
#include "SFE_BMP180.h"

SFE_BMP180 pressure; // создаем объект pressure
#define ALTITUDE 1655.0 // высота офиса SparkFun, штат Колорадо, в метрах

#include <LiquidCrystal_I2C.h> // подключаем библиотеку для QAPASS 1602
LiquidCrystal_I2C LCD(0x27,16,2); // присваиваем имя LCD для дисплея

void setup(){
   pressure.begin();     // запускаем датчик давления
   LCD.init(); // инициализация LCD дисплея
   LCD.backlight(); // включение подсветки дисплея
}

void loop(){
   char status;
   double T,P,p0,a;
 
   // выводим значение температуры на дисплей
   status = pressure.startTemperature();
   if (status != 0){
      delay(status);

      status = pressure.getTemperature(T);
      if (status != 0){
         LCD.setCursor(0, 0);     // ставим курсор на 1 строку
         LCD.print("Temp: ");
         LCD.print(T,2);
         LCD.print(" *C");

         // выводим значение давления на дисплей
         status = pressure.startPressure(3);
         if (status != 0){
            delay(status);

            status = pressure.getPressure(P,T);
            if (status != 0){

              p0 = pressure.sealevel(P,ALTITUDE);
              LCD.setCursor(0, 1);     // ставим курсор на 2 строку
              LCD.print("Pres: ");
              LCD.print(p0,2);
              LCD.print(" mb, ");
           }
        else Serial.println("error retrieving pressure measurement\n");
      }
      else Serial.println("error starting pressure measurement\n");
    }
    else Serial.println("error retrieving temperature measurement\n");
  }
  else Serial.println("error starting temperature measurement\n");

  delay(5000);
}

Пояснения к коду:

  1. изменив программу, вы можете выводить на экран не значение температуры, а абсолютное и относительное атмосферное давление;
  2. при изменении температуры воздуха, происходит корректировка давления.

Заключение. Датчик давления воздуха bmp180 очень прост в подключении к плате, а библиотека SFE_BMP180 позволяет без труда использовать этот модуль во многих DIY проектах для начинающих. Надеемся, что этот обзор был для вас полезен, а если у вас остались вопросы по работе с модулем bmp180 (gy-68) — оставляйте их в комментариях к этой записи. Мы стараемся отвечать на все вопросы пользователей.



Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.