Подключение барометрического датчика давления MS5611 к Arduino

Подключение барометрического датчика давления MS5611 к Arduino

Хотите узнать, на какую высоту поднялся ваш радиоуправляемый самолёт, какова высота горного перевала, через который вы проезжаете, или как высоко вы и ваши друзья забрались во время последнего похода? Недорогой датчик атмосферного давления/высотомер MS5611 может удовлетворить ваши потребности.

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

В основе модуля лежит очень маленький, молниеносно быстрый, точный, маломощный датчик атмосферного давления с низким уровнем шума от компании MEAS Switzerland — MS5611.

Подключение барометрического датчика давления MS5611 к Arduino

MS5611 может измерять атмосферное давление от 10 мбар до 1200 мбар с абсолютной точностью ±1,5 мбар в диапазоне давлений от 450 до 1100 мбар. За пределами этого диапазона гарантированная точность составляет ±2,5 мбар.

Этот датчик атмосферного давления оптимизирован для высотомеров и вариометров с разрешением по высоте 0,012 мбар, что соответствует примерно 10 см (4″) высоты.

MS5611 имеет встроенный датчик температуры, который может использоваться для компенсации изменений окружающей среды и калибровки измерений. Это достаточно точный датчик температуры, измеряющий «температуру кристалла» в диапазоне от -40˚C до +85˚C с точностью ±0,8˚C.

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

Модуль поставляется с прецизионным стабилизатором напряжения 3,3 В MIC5205 и преобразователем уровня напряжения, поэтому вы можете использовать его с вашим любимым 3,3 В или 5 В микроконтроллером без каких-либо опасений.

Подключение барометрического датчика давления MS5611 к Arduino

MS5611 потребляет менее 1,4 мА во время измерений и менее 0,15 мкА в режиме ожидания. Это низкое энергопотребление позволяет использовать датчик в устройствах с батарейным питанием, таких как мобильные телефоны, носимые устройства или смарт-часы.

Цифровые интерфейсы

MS5611 обменивается данными по интерфейсу I2C или SPI. Вывод PS (выбор протокола) определяет, какой интерфейс активен.

Подключение барометрического датчика давления MS5611 к Arduino

Подключение вывода PS к LOW выбирает интерфейс SPI, подключение PS к HIGH выбирает интерфейс I2C. Подтягивающий резистор 1 кОм на модуле подтягивает этот вывод к HIGH, поэтому интерфейс I2C выбран по умолчанию.

Датчик использует интерфейс I2C для связи с Arduino. Он поддерживает два отдельных адреса I2C: 0x77 (Hex) и 0x76 (Hex). Это позволяет использовать два модуля MS5611 на одной шине или избежать конфликтов адресов с другим устройством на шине.

Подключение барометрического датчика давления MS5611 к Arduino

Вывод CSB определяет адрес I2C модуля. Этот вывод имеет встроенный стягивающий резистор 2,2 кОм. Поэтому, когда вывод CSB не подключён, адрес I2C по умолчанию — 0x77 (Hex), а когда вы подключаете его к VCC, линия подтягивается к HIGH, и адрес I2C становится 0x76 (Hex).

Датчик также способен обмениваться данными по SPI! Чтобы включить интерфейс SPI, подключите вывод PS (выбор протокола) к земле.

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

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

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

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

Давайте рассмотрим распиновку.

Подключение барометрического датчика давления MS5611 к Arduino

Выводы питания:

VCC — это вывод питания. Вы можете подключить его к выходу 5 В вашего Arduino.

GND — общий вывод заземления для питания и логики.

Выводы логики SPI:

SCL — это вывод тактирования SPI, входной сигнал для микросхемы.

SDA — это вывод последовательных данных (MOSI), для передачи данных от вашего микроконтроллера к MS5611.

CSB — это вывод выбора кристалла. Если вы хотите подключить несколько MS5611 к одному микроконтроллеру, используйте общие выводы SDA, SDO и SCL, назначив каждому модулю уникальный вывод CSB.

SDO — это вывод выходных данных (MISO), для передачи данных от MS5611 к вашему микроконтроллеру.

PS — это вывод выбора протокола. Подтяните его к LOW, чтобы включить связь по SPI.

Выводы логики I2C:

SCL — это также вывод тактирования I2C, подключите к линии тактирования I2C вашего микроконтроллера.

SDA — это также вывод данных I2C, подключите к линии данных I2C вашего микроконтроллера.

Вывод CSB определяет адрес I2C модуля. Когда вывод CSB не подключён, адрес I2C по умолчанию — 0x77 (Hex), а когда вы подключаете его к VCC, линия подтягивается к HIGH, и адрес I2C становится 0x76 (Hex).

PS — это вывод выбора протокола. Оставьте его неподключённым, чтобы включить связь по I2C.

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

Теперь, когда мы знаем всё о модуле, можно приступить к его подключению к Arduino!

Начните с подключения вывода VCC к источнику питания — подойдёт напряжение от 3 В до 5 В. Используйте то же напряжение, на котором работает логика вашего микроконтроллера. Для большинства плат Arduino это 5 В. Для устройств с логикой 3,3 В используйте 3,3 В. Теперь подключите GND к общей земле.

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

На следующей иллюстрации показана схема подключения.

Подключение барометрического датчика давления MS5611 к Arduino

После подключения модуля к Arduino пора писать код!

Установка библиотеки

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

Для установки библиотеки перейдите в Sketch > Include Library > Manage Libraries… Дождитесь, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Подключение барометрического датчика давления MS5611 к Arduino

Отфильтруйте поиск, набрав „ms5611“, и установите библиотеку.

Подключение барометрического датчика давления MS5611 к Arduino

ВНИМАНИЕ — ЭКСПЕРИМЕНТАЛЬНО:

Роб Тиллаарт также написал MS5611_SPI (экспериментальную SPI-версию библиотеки) для связи с MS5611 через интерфейс SPI. Но, к сожалению, он обнаружил, что выбор SPI в качестве протокола вызывает внутренний нагрев, что приводит к некорректным показаниям температуры. Поэтому в нашем руководстве мы рассмотрим только интерфейс I2C.

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

Ниже приведён базовый скетч Arduino. Загрузите его на ваш Arduino. Вы должны увидеть давление и температуру в мониторе последовательного порта.

#include "MS5611.h"

MS5611 MS5611(0x77);

void setup() {
  Serial.begin(115200);
  while(!Serial);

  if (!MS5611.begin()) {
    Serial.println("MS5611 not found, check wiring!");
    while (1);
  }
}

void loop() {
  MS5611.read();
  Serial.print("Temperature: ");
  Serial.print(MS5611.getTemperature(), 2);
  Serial.print("\tPressure: ");
  Serial.print(MS5611.getPressure(), 2);
  Serial.println();
  delay(1000);
}

Обратите внимание, что для работы со скетчем необходимо установить скорость монитора последовательного порта 115200 бод.

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

Подключение барометрического датчика давления MS5611 к Arduino

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

Код довольно прост. В начале подключается библиотека MS5611.h и создаётся объект в глобальной области видимости MS5611 MS5611(0x77). Обратите внимание, что объект создаётся с адресом I2C в качестве параметра.

#include <Wire.h>

MS5611 MS5611(0x77);

В функции setup мы инициализируем последовательную связь с ПК и вызываем функцию begin().

Функция MS5611.begin() инициализирует интерфейс I2C и проверяет корректность идентификатора микросхемы. Затем она выполняет программный сброс микросхемы и ожидает калибровки датчика после пробуждения.

void setup() {
  Serial.begin(115200);
  while(!Serial);

  if (!MS5611.begin()) {
    Serial.println("MS5611 not found, check wiring!");
    while (1);
  }
}

В цикле loop мы вызываем функцию MS5611.read() для выполнения считывания. После этого мы можем обращаться к методам объекта (MS5611) через оператор точки.

MS5611.getTemperature() возвращает показания температуры.

MS5611.getPressure() возвращает показания атмосферного давления.

void loop() {
  MS5611.read();
  Serial.print("Temperature: ");
  Serial.print(MS5611.getTemperature(), 2);
  Serial.print("\tPressure: ");
  Serial.print(MS5611.getPressure(), 2);
  Serial.println();
  delay(1000);
}