
В мире современных технологий сенсоры и датчики играют важную роль в создании устройств, способных воспринимать и анализировать окружающую среду. Одним из таких датчиков является компас-магнитометр GY-273, который позволяет измерять магнитное поле в трех измерительных осях. В данной статье мы рассмотрим, как подключить GY-273 к плате Arduino UNO и использовать его для получения ориентации в пространстве.
15 комментариев. Оставить новый
Ругается на строку 20 при компиляции
error = compass.setScale(1.3); // Установка диапазона измерения компаса
Здравствуйте! Какая конкретно ошибка возникает на этой строчке? Приложите, пожалуйста, лог из консоли.
// Формула для преобразования: (градусы + (минуты / 60.0)) / (180 / M_PI);
Проще как в школе учили 😉 градусы * Пи / 180 и не будут нужны скобки
// Формула для преобразования: (градусы + (минуты / 60.0)) * M_PI / 180;
заходит в режим калибровки и тишина…
Здравствуйте, опишите проблему подробнее. Что значит тишина, не выводятся данные в Serial порт?
Проверьте, правильный ли выбран COM порт. Также проверьте baudrate в настройке монитора порта, он должен быть 115200.
У меня то же самое, всегда вываливается по
if ((fabs(value.XAxis) > 600) || (fabs(value.YAxis) > 600) || (fabs(value.ZAxis) > 600)) {
continue;
}
Основные причины "тишины" после запуска калибровки:
1. Неправильное питание модуля
2. Проблемы с I²C (SCL/SDA)
3. Неверная инициализация или сбойный датчик
Добрый день! Компиляция не проходит:
c:\Users\…….\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp: In member function ‘short int HMC5883L::setMeasurementMode(uint8_t)’:
c:\Users\…….\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp:173:1: error: no return statement in function returning non-void [-Werror=return-type]
173 | }
| ^
In file included from c:\Users\……..\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp:27:
c:\Users\………\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp: In member function ‘char* HMC5883L::getErrorText(short int)’:
c:\Users\…….\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.h:44:21: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
44 | #define ERRORCODE_1 “Entered scale was not valid, valid gauss values are: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\Users\……..\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.h:44:21: note: in definition of macro ‘ERRORCODE_1’
44 | #define ERRORCODE_1 “Entered scale was not valid, valid gauss values are: 0.88, 1.3, 1.9, 2.5, 4.0, 4.7, 5.6, 8.1”
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
c:\Users\……..\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp:211:12: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
211 | return “Error not defined.”;
| ^~~~~~~~~~~~~~~~~~~~
c:\Users\………\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp: In member function ‘short int HMC5883L::setScale(float)’:
c:\Users\………\Documents\Arduino\libraries\Grove_3-Axis_Digital_Compass_HMC5883L\HMC5883L.cpp:167:10: error: control reaches end of non-void function [-Werror=return-type]
167 | write(CONFIGURATION_REGISTERB, regValue);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cc1plus.exe: some warnings being treated as errors
exit status 1
Compilation error: exit status 1
Ваша ошибка связана с несовместимой библиотекой. Вот как подключить GY-273 (HMC5883L) к Arduino Uno правильно:
Шаг 1: Удалите проблемную библиотеку
Шаг 2: Установите правильную библиотеку
В статье рекомендуется HMC5883L от jarzebski (она стабильна и работает без ошибок).
Способ 1: Установка через ZIP (рекомендуется)
→ GitHub: jarzebski/HMC5883L
(Зелёная кнопка "Code" → "Download ZIP")
Скетч → Подключить библиотеку → Добавить .ZIP библиотеку…
Arduino-HMC5883L-master.zip
.Библиотека jarzebski не содержит ошибок компиляции (в отличие от Grove). В статье используется именно она, а не “Grove_3-Axis_Digital_Compass”. Код из статьи заведомо рабочий.
Спасибо за библиотеку! Она компилируется, но работают только скетчи из архива, а скетч из статьи при компиляции выдает ещё больше ошибок. И в инструкции к статье описано, что нужно устанавливать именно “Grove_3-Axis_Digital_Compass” (на картинке).
Также можете попробовать использовать библиотеку Adafruit_HMC5883_Unified. Она более современная и удобная в работе. Пример кода для работы с ней:
На моем датчике написано HMC5883L, но по адресу (0x1E) он не откликается. Выбираю адрес QMC5883 (0x0D) – работает. Использую библиотеку DFRobot_QMC5883.h, с библиотеками Adafruit_HMC5883_Unified и HMC5883L от jarzebski датчик не отвечает, хотя всё компилируется. Есть способ, используя эти библиотеки, настроить нужный адрес датчика? Уж очень хочется испытать процесс калибровки, данные очень шумные поступают.
Похоже, у вас не HMC5883L, а его клон QMC5883 (который работает на адресе 0x0D вместо стандартного 0x1E). Это частая ситуация, так как многие китайские модули используют чипы QMC5883, но маркируют их как HMC5883L.
Если датчик откликается только на адресе 0x0D, значит это QMC5883 (или GY-273 с этим чипом).
Код с калибровкой для QMC5883
Как калибровать:
min
иmax
значений.У меня после всех калибровок данные с датчика всё-равно сильно “плавают” – разбег +/- 5 градусов получается при неподвижном датчике. Что это может быть: некачественный датчик или магнитные поля не дают стабильных показаний? С таким разбросом ни о какой автоматизации не может идти речь!
Мы не можем однозначно ответить на ваш вопрос. Купите второй такой же модуль и сверьте показания, если разброс будет такой же значительный, значит где-то присутствуют электромагнитные наводки.