МЭМС барометры часто используются в самодельных погодных станциях для измерения атмосферного давления и в беспилотных летательных аппаратах для определения высоты полета. И если для первого варианта с лихвой хватает точности даже устаревшего BMP085, то для стабилизации полета квадрокоптера нужен барометр как можно более точный.
В любительских беспилотниках для ориентации в пространстве используют сразу несколько датчиков: акселерометр, гиротахометр, магнитометр и барометр. Такая сборка размещается на универсальных полетных контроллерах, типа Ardupilot или MultiWii. Распространены и сборки на отдельной плате, которые еще называют — IMU с указанием степеней свободы. Например, IMU 6DOF означает, что в устройстве есть два трехосевых датчика. На рисунке изображена типичная 10DOF сборка.
В моем квадрокоптере, который базируется в нашем хакспейсе и периодически претерпевает модификации, тоже есть IMU с барометром. Во второй модификации квадрокоптера был установлен модуль со следующим набором датчиков:
- гиротахометр L3G4200D;
- акселерометр ADXL345;
- магнитометр HMC5883L;
- барометр BMP085.
В принципе, такого набора вполне достаточно для уверенного полета в ручном режиме. Однако, этот беспилотник был создан не для управления с пульта, а прежде всего для автоматического полета. Включая автоматический взлет и посадку на базовую станцию. И как показала практика, именно для автоматических маневров по высоте барометр BMP085 совсем не годится. Его точность по паспорту — 0.5 метра.
В этой статье мы рассмотрим три популярных МЭМС барометра: BMP085, BMP180 и MS5611. Сравним их точность в различных условиях.
Барометр BMP085
На момент когда я собирал первую версию квадрокоптера был распространен именно этот датчик фирмы Bosch. Его характеристики:
- измеряемое давление: от 300гПа до 1100 гПа (от 9000 до -500 метров над уровнем моря);
- напряжение питания: от 1.8 до 3.6В;
- рабочий ток: 5мкА при 1 опросе в секунду;
- точность: 0.5м в самом быстром режиме и 0.25м в самом точном;
- время измерения: до 3мс;
- встроенный термометр;
- интерфейс i2c.
Барометр BMP180
Барометр BMP180 является улучшенной версией BMP085. Его часто используют в современных полетных контроллерах. Основные характеристики этого датчика совпадают с BMP085, за исключением повышенной точности — до 0.17м.
Барометр MS5611
Самый продвинутый барометр, который не очень распространен из-за своей цены. Разработчиком датчика является компания MEAS Switzerland. Характеристики:
- измеряемое давление: от 10гПа до 1200 гПа;
- напряжение питания: от 1.8В до 3.6В;
- рабочий ток: 1мкА при 1 опросе в секунду;
- точность: до 0.1м в самом точном режиме;
- время измерения: до 1мс;
- встроенный термометр;
- интерфейс i2c.
Как мы видим, заявленная точность составляет аж 10см, и это очень здорово. Время измерения 1мс в самом быстром режиме, и всего 9мс в самом точном. Еще и диапазон измеряемого давления больше, чем у BMP180 — можно летать в стратосферу 🙂
Измерительный стенд
Для правильного сравнения показаний нам потребуется синхронизировать показания всех датчиков. Несмотря на то, что все три датчика имеют интерфейс i2c, подключить их на одну шину не получится. У всех барометров один общепринятый i2c адрес — 0x77. Эту беду я решил победить при помощи трех контроллеров, синхронизированных во времени.
Arduino Mega 256 имеет целых 4 аппаратных UART интерфейса. К ним подключены два Arduino Uno. Каждый из контроллеров соединен со своим барометром по шине i2c. Для длительного сбора дополнительно установлен модуль SD карты, который цепляется к шине SPI.
Взаимодействие всех контроллеров устроено достаточно просто. Arduino Mega выступает в роли мастера, отправляя в заданные промежутки времени сигнал всем остальным о начале сбора данных. Затем измеряет давление сам и ждет ответа от подчиненных.
Полученные таким образом показания барометров выводятся через последовательный порт на экран ПК, либо сохраняются на SD-карту.
Использованные библиотеки: Arduino-MS5611 и SFE_BMP180
Результаты
Я провел несколько тестов, наиболее характерных для полета квадрокоптера, а также длительный тест на 1 сутки. Измерения проводились в помещении нашего хакспейса.
Тест №1: время измерений — 1м, период опроса — 100мс, минимальная точность
Видно, что BMP085 шумит сильнее всех, а MS5611 показывает странное поведение. Но надо заметить, что в самом быстром режиме время опроса MS5611 занимает всего 1мс, а то время как остальным требуется 3мс.
Также следует отметить, что графики сильно сдвинуты по абсолютным значениям. Причиной этого может быть неверная температурная коррекция датчика, но для нас это не играет особой роли.
Тест №2: время измерений — 1м, период опроса — 100мс, максимальная точность
А вот на максимальной точности MS5611 раскрывает все свои преимущества. Видно, что точность BMP180 немного выше, чем у BMP085. А MS5611 значительно превосходит оба датчика от BOSCH.
Тест №3: время измерений — 15м, период опроса — 1с, максимальная точность
На графике можно наблюдать небольшие флуктуации давления в течение 15 минут. Разница давления порой составляла 30-33 Па, что соответствует примерно 2.5 метрам высоты (1 метр = 12Па).
Тест №4: время измерений — 45с, период опроса — 100мс, максимальная точность
Во время этого теста измерительный стенд опускался с высоты стола — 81см на пол. Это изменение четко выражено в середине графика, в период с 16 до 25 секунды. Опять, датчика MS5611 показывает самый точный результат — 10 Па, а это и есть те самые 80см.
Тест №5: время измерений — 22ч, период опроса — 1м, максимальная точность
А вот, что происходит в течение суток. Измерение началось примерно в 6 часов вечера. Давление поднималось непрерывно до следующего утра, а затем начало падать, не достигнув значения предыдущего дня.
Заключение
Для новой версии квадрокоптера я разумеется установил новую 10DOF сборку с MS5611. Это самый лучший из доступных по цене датчиков. Точность 10см позволит мне, наконец, доделать процедуру автоматического взлета.
Однако, для проекта погодной станции вполне достаточно датчика BMP180 или BMP085. О том как его подключить к Arduino читайте в нашем уроке: Датчик давления BMP180 (BMP085).
Дополнение. Время не стоит на месте и датчики bmp180 и тем более bmp085 устарели. На смену им пришли более точные bmp280 и комплексные датчики давления и влажности — bme280. Изучаем как с ними работать на уроке про bmp280 и уроке про bme280.