Общие сведения
Трёхосевой компас HMC5883L — электронный модуль на базе магниторезистивного датчика HMC5883L. Модуль измеряет величину и направление магнитного поля по трём осям: X, Y и Z. Полученные данные позволяют определить направление относительно магнитного севера.
Характеристики
- Микросхема датчика: HMC5883L;
- Количество измерительных осей: 3;
- Напряжение питания модуля: от 3 до 5 В;
- Потребление тока датчиком в режиме измерения: около 100 мкА (типовое значение);
- Интерфейс: I2C;
- I2C-адрес: 0x1E;
- Поддерживаемая частота шины I2C: до 400 кГц;
- Разрядность АЦП: 12 бит;
- Диапазон измеряемого магнитного поля: до ±8,1 Гс;
- Разрешение измерения магнитного поля: до 2 мГс;
- Частота обновления данных: до 75 Гц в непрерывном режиме и до 160 Гц в режиме одиночных измерений;
- Ориентировочная точность определения направления после калибровки: 1–2°;
- Диапазон рабочих температур: от −30 до +85 °C;
- Габариты модуля: 18,5 × 13,5 × 1,1 мм.
Подключение
- Вывод SDA подключается к линии данных аппаратной шины I2C управляющей платы.
- Вывод SCL подключается к линии тактирования аппаратной шины I2C управляющей платы.
- Вывод GND подключается к общему проводу питания.
- На вывод VDD подаётся напряжение питания модуля от 3 до 5 В.
- Вывод DRDY является выходом готовности данных. Его можно подключить ко входу микроконтроллера и использовать для формирования прерывания после завершения измерения. При обычном периодическом считывании данных этот вывод можно не подключать.
Подключение к Arduino UNO
- SDA — к выводу SDA или A4;
- SCL — к выводу SCL или A5;
- GND — к выводу GND;
- VDD — к выводу 3,3 В или 5 В;
- DRDY — можно оставить неподключённым.
Питание
Напряжение питания от 3 до 5 В подаётся на выводы VDD и GND модуля. При использовании нескольких устройств необходимо объединить их выводы GND.
Указанный диапазон относится к готовому модулю GY-273. Непосредственно на микросхему HMC5883L нельзя подавать напряжение 5 В.
Подробнее о компасе
Модуль GY-273 выполнен на базе трёхосевого магниторезистивного датчика HMC5883L. Датчик измеряет проекции магнитного поля по осям X, Y и Z и передаёт результаты микроконтроллеру через интерфейс I2C.
HMC5883L содержит малошумящие магниторезистивные чувствительные элементы, 12-битный аналого-цифровой преобразователь, систему компенсации смещения и функцию самодиагностики. Диапазон измерения программно настраивается.
Для точного определения направления модуль необходимо откалибровать после установки в устройство. Металлические детали, магниты, динамики, электродвигатели и провода с большим током могут искажать показания.
При вычислении направления на истинный север также необходимо учитывать магнитное склонение для места, где используется компас. Без поправки модуль показывает направление относительно магнитного севера.
Для работы с модулем можно использовать библиотеку DFRobot_QMC5883, поддерживающую датчик HMC5883L.
Пример
Считывание значений по трём осям и определение направления
Перед компиляцией установите библиотеку DFRobot_QMC5883. В примере используется I2C-адрес HMC5883L — 0x1E.
#include <Wire.h>
#include <DFRobot_QMC5883.h>
// I2C-адрес датчика HMC5883L — 0x1E.
DFRobot_QMC5883 compass(&Wire, HMC5883L_ADDRESS);
// Магнитное склонение для места использования, в радианах.
// Оставьте 0 для определения направления относительно магнитного севера.
const float DECLINATION_ANGLE = 0.0f;
void setup()
{
Serial.begin(9600);
Wire.begin();
while (!compass.begin())
{
Serial.println("HMC5883L not found. Check the wiring.");
delay(500);
}
if (!compass.isHMC())
{
Serial.println("The detected sensor is not HMC5883L.");
while (true)
{
delay(1000);
}
}
// Диапазон измерения ±1,3 Гс.
compass.setRange(HMC5883L_RANGE_1_3GA);
// Непрерывный режим измерения.
compass.setMeasurementMode(HMC5883L_CONTINOUS);
// Частота обновления данных 15 Гц.
compass.setDataRate(HMC5883L_DATARATE_15HZ);
// Усреднение по восьми измерениям.
compass.setSamples(HMC5883L_SAMPLES_8);
Serial.println("HMC5883L initialized.");
}
void loop()
{
sVector_t mag = compass.readRaw();
// Вычисляем направление в радианах.
float heading = atan2((float)mag.YAxis, (float)mag.XAxis);
heading += DECLINATION_ANGLE;
// Приводим значение к диапазону от 0 до 2*PI.
if (heading < 0)
{
heading += 2.0f * PI;
}
if (heading >= 2.0f * PI)
{
heading -= 2.0f * PI;
}
float headingDegrees = heading * 180.0f / PI;
Serial.print("X: ");
Serial.print(mag.XAxis);
Serial.print(" Y: ");
Serial.print(mag.YAxis);
Serial.print(" Z: ");
Serial.println(mag.ZAxis);
Serial.print("Heading, rad: ");
Serial.println(heading, 4);
Serial.print("Heading, deg: ");
Serial.println(headingDegrees, 1);
Serial.println();
delay(100);
}
Комплектация
- 1× трёхосевой компас HMC5883L на модуле GY-273;
- 1× штыревой соединитель типа «папа–папа».
















