Магнитометр/компас (Troyka-модуль)

Магнитометр/компас (Troyka-модуль) позволяет определять углы между собственными осями сенсора X, Y, Z и силовыми линиями магнитного поля Земли.

Видеообзор

Подключение и настройка

Компас общается с управляющей электроникой по протоколу I²C / TWI. Для подключения используется два 3-проводных шлейфа. При подключении модуля к Arduino удобно использовать Troyka Shield. Для получения данных с компаса мы написали библиотеку TroykaIMU. Она скрывает в себе все тонкости протокола, через который передаются данные c компаса и предоставляет простые и понятные функции для вывода значений.

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

Пример работы

В качестве примера выведем в Serial порт значения азимута.

compass.ino
// библиотека для работы I²C
#include <Wire.h>
// библиотека для работы с модулями IMU
#include <TroykaIMU.h>
 
// создаём объект для работы с компасом
Compass compass;
 
// калибровочные значения, полученные в калибровочной матрице
// из примера compass_cal_matrix
const double compassCalibrationBias[3] = {
  524.21,
  3352.214,
  -1402.236
};
 
const double compassCalibrationMatrix[3][3] = {
  {1.757, 0.04, -0.028},
  {0.008, 1.767, -0.016},
  {-0.018, 0.077, 1.782}
};
 
void setup()
{
  // открываем последовательный порт
  Serial.begin(115200);
  // пока не появились данные с USB
  // выводим сообщение о начале инициализации
  Serial.println("Begin init...");
  // инициализация компаса
  compass.begin();
  // устанавливаем чувствительность компаса
  // ±4 gauss — по умолчанию, ±8 gauss, ±12 gauss, ±16 gauss
  compass.setRange(RANGE_4_GAUSS);
  // калибровка компаса
  compass.calibrateMatrix(compassCalibrationMatrix, compassCalibrationBias);
  // выводим сообщение об удачной инициализации
  Serial.println("Initialization completed");
}
 
void loop()
{
  // выводим азимут относительно оси Z
  Serial.print(compass.readAzimut());
  Serial.println(" Degrees");
  delay(100);
}

Элементы платы

Компас на LIS3MDL

Общение компаса с управляющей электроникой осуществляется по протоколу I²C / TWI.Адрес устройства равен 0b0011100.

Обвязка для согласования уровней напряжения

Необходима для сопряжения устройств с разными питающими напряжениями. В нашем случае это управляющее устройство Arduino с 5 вольтовой логикой и модуль компаса LIS3MDL с 3,3 вольтовой логикой.

Контакты подключения 3-проводных шлейфов

Контакты питания:

  • Земля (G) — чёрный провод. Соедините с пином GND Arduino.
  • Питание (V) — красный провод. Соедините с пином 5V Arduino.
  • Не используется.

Контакты шины I²C:

  • Сигнальный (D) — Подключите к SDA пину Arduino.
  • Сигнальный (С) — Подключите к SCL пину Arduino.
  • Не используется.

Принципиальная схема

Характеристики

  • Напряжение питания: 3.3–5 В
  • Диапазон измерения: ±4/±8/±12/±16 Гаусс
  • Выходной интерфейс: I²C
  • Частота обновления сигнала: 0.625…80 Гц
  • Температурный диапазон: −40…+85 °C
  • Габариты: 25×25 мм