Датчик барометр/термометр GY-68 BMP180

Данный датчик очень высокоточен и экономичен в расходе энергии.  Степень точности измерения можно выставлять программно, однако следует понимать, что чем выше точность измерений датчика GY-68, тем выше будет и его энергопотребление.

Помимо всего прочего, модуль обладает встроенным альтиметром и может определить высоту над уровнем моря с погрешностью до 17 см.

Барометр/термометр GY-68 BMP180 имеет собственную температурную компенсацию проводимых измерений.

Схема подключения датчика барометра/термометра GY-68 BMP180

На изображении ниже представлена схема подключения датчика.

Код для подключения датчика барометра/термометра GY-68 BMP180

В примере ниже показано, как подключить вывод датчика барометра/термометра GY-68 BMP180 к монитору последовательного порта платы (вывод можно посмотреть в мониторе порта Arduino IDE). Для корректной работы кода нужно подключить библиотеки SFE_BMP180.h и Wire.h.


#include <SFE_BMP180.h>
#include <Wire.h>

SFE_BMP180 pressure; // Объявляем переменную для доступа к SFE_BMP180

void setup()
{
  Serial.begin(9600); // Задаем скорость передачи данных
  Serial.println("REBOOT"); // Печать текста "Перезагрузка"

  if (pressure.begin()) // Инициализация датчика
    Serial.println("BMP180 init success"); // Печать текста "BMP180 подключен"
  else { // В противном случаи, датчик не подключен
    Serial.println("BMP180 init fail\n\n"); // Печать текста "BMP180 не подключен"
    while (1); // Пауза.
  }
}

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

  /* Так как давление зависит от температуры, надо сначала узнать температуру
    Считывание температуры занимает какое-то время.
    Если все хорошо, функция pressure.startTemperature вернет status с количеством миллисекунд
    которые нужно подождать. Если какая-то то проблема, то функция вернет 0.
  */

  status = pressure.startTemperature(); // Считывание показания
  if (status != 0) { // Если значение status не 0, выполняем следующую команду.
    delay(status); // Ждем
    status = pressure.getTemperature(T); // Полученные показания, сохраняем в переменную T
    if (status != 0) { // Если все хорошо, функция вернет 1, иначе вернет 0
      Serial.print("Temperature: "); // Печать текста "Температура"
      Serial.print(T, 2); // Печать показания переменной "Т"
      Serial.println(" C, "); // Печать текста "С"

      /* Определяем показания атмосферного давления
        Параметр указывает расширение, от 0 до 3 (чем больше расширение, тем больше точность, тем дольше ждать)
        Если все хорошо, функция pressure.startTemperature вернет status с количеством миллисекунд
        которые нужно подождать. Если какая-то то проблема, то функция вернет 0.
      */

      status = pressure.startPressure(3); // Считывание показания
      if (status != 0) { // Если значение status не 0, выполняем следующую команду.
        delay(status); // Ждем
        status = pressure.getPressure(P, T); // Полученные показания, сохраняем в переменную P
        if (status != 0) { // Если все хорошо, функция вернет 1, иначе вернет 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"

        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); // Пауза в 5с
}

Скачать файл с кодом, формат .INO: Датчик BMP180