Магнитометр HMC5883L — это датчик, широко используемый в проектах Arduino благодаря своей способности измерять магнитные поля по трем осям. Это делает его отличным выбором для создания цифровых компасов, навигационных систем для дронов и других автономных транспортных средств. Помимо доступности, его интеграция проста благодаря интерфейсу I2C, что делает его идеальным для новичков.
В этой статье мы собираемся углубиться в основные особенности HMC5883L, его подключение к различным платам Arduino и практические примеры его использования. В конце концов, вы сможете реализовать свой собственный проект цифрового компаса с помощью Arduino, воспользовавшись всем потенциалом этого мощного датчика.
Что такое HMC5883L и как он работает?
HMC5883L — это трехосный магнитометр который измеряет компоненты магнитного поля Земли по осям X, Y и Z. Это не только позволяет обнаруживать наличие магнитных полей, но и позволяет определять ориентацию посредством расчетов на основе полученных измерений. Эти характеристики делают его идеальным датчиком для создания систем ориентации, таких как цифровой компас.
Датчик обычно находится в таких модулях, как модель GY-273, которая также включает в себя необходимую электронику для облегчения его прямого соединения с платами Arduino или другими микроконтроллерами. Его источник питания является гибким и может питаться как от 3.3 В, так и от 5 В, что делает его очень универсальным с точки зрения совместимости с различными системами.
Соединения Ардуино
Подключить HMC5883L к Arduino очень просто благодаря используемому интерфейсу I2C. Для этой связи требуется только два контакта: СДА и СКЛ, которые необходимо подключить к соответствующим контактам на плате Arduino.
- к Arduino Uno, Nano и Mini: SDA подключается к контакту A4, а SCL — к A5.
- Если вы используете Arduino Mega или Due: SDA необходимо подключить к контакту 20, а SCL — к контакту 21.
- В случае Arduino Leonardo: SDA подключается к контакту 2, а SCL — к контакту 3.
Не будем забывать, что магнитометр работает с фиксированным адресом I2C 0x1E, поэтому изменить его невозможно. Этот адрес уникален для этого типа датчика, а это означает, что мы не можем подключить несколько устройств HMC5883L к одной шине I2C.
Чтение магнитного поля
Основной метод работы HMC5883L — считывание значений магнитного поля по всем трем осям. Чтобы получить эти значения на Arduino, мы используем библиотеку, разработанную Джеффом Роубергом. Вы можете найти этот книжный магазин по адресу ваш репозиторий GitHub и загрузите его для использования в Arduino IDE.
После установки библиотеки датчик можно инициализировать и начать считывать значения магнитного поля. Вот простой пример, делающий именно это:
#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;
void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}
void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}
В этом коде инициализируется магнитометр и в цикле считываются значения по всем трем осям. Каждый раз, когда мы выполняем `loop()`, значения магнитного поля по X, Y и Z будут отображаться на последовательном мониторе.
Настройки диапазона и усиления
HMC5883L позволяет регулировать диапазон измерения магнитного поля от ±0.88 Гаусса до ±8.1 Гаусса с разными уровнями усиления. Диапазон по умолчанию составляет ±1.3 Гаусса, и вы можете изменить его в соответствии с потребностями вашего проекта. Это можно сделать, используя следующую строку в коде:
magnetometro.setGain(value);
где ценностное — целое число от 0 до 7, которое определяет уровень усиления. Ниже мы покажем вам таблицу с соответствующими значениями:
значение | Ранго | Усиление (LSB/Гаусс) |
---|---|---|
0 | ±0.88Ga | 1370 |
1 | ±1.3Ga | 1090 |
2 | ±1.9Ga | 820 |
3 | ±2.5Ga | 660 |
4 | ±4.0Ga | 440 |
5 | ±4.7Ga | 390 |
6 | ±5.6Ga | 330 |
7 | ±8.1Ga | 230 |
Создание цифрового компаса
Одним из наиболее распространенных применений HMC5883L является создание цифровой компас. Для этого нам необходимо рассчитать угол между датчиком и магнитным севером по показаниям осей X и Y. Это достигается по формуле:
float angulo = atan2(my, mx) * 180 / M_PI;
Это значение даст вам угол ориентации относительно магнитного севера. Чтобы отрегулировать этот угол Географический север, вы должны принять во внимание магнитное склонение вашего местоположения, с которым можно ознакомиться на различных веб-сайтах, таких как www.ign.es или www.ngdc.noaa.gov.
Правильное магнитное склонение
Как только вы узнаете магнитное склонение вашего положения, вам просто нужно вычесть его из полученного угла. Например:
angulo -= declinacion;
Если угол отрицательный, вы можете добавить 360 градусов, чтобы всегда получать положительное значение, отрегулированное между 0 и 360 градусами:
if (angulo < 0) angulo += 360;
Эта настройка даст вам компас, который всегда будет точно указывать на географический север.
На практике с этим датчиком и некоторыми библиотеками вы можете получить компас за несколько минут. Однако обратите внимание, что HMC5883L — это датчик, чувствительный к внешним помехам, таким как близлежащие металлы или поля, создаваемые сильными токами, которые могут изменить показания.