Подключение модуля трехосевого компаса GY-271 к Arduino
В статье детально расскажу шаги по правильному подключению модуля GY-271 к Arduino, а также продемонстрирую наглядный процесс чтения данных с датчика сразу на монитор порта. Использование данного модуля совместно с Arduino даёт возможность построить полноценный цифровой компас, способный точно определить основные направления сторон света: север, юг, восток и запад.

1. Технические параметры
- Тип модуля: GY-271;
- Использованный чип: QMC5883L;
- Источник питания: 3 – 5В;
- Режим связи: I2C;
- Габариты: 33 х 15 х 3 мм;
- Вес: 2 грамм;
2. Описание модуля GY-271
Модуль оснащён современным высокочувствительным магниторезистивным датчиком QMC5883L, которая включает в себя предусилитель сигнала, автоматический демагнетизатор, систему коррекции смещения и высокоточный 12-разрядный аналого-цифровой преобразователь, обеспечивающий высокую точность измерения направления — погрешность составляет всего 1-2 градуса. Подключение к микроконтроллеру осуществляется с помощью двухпроводной шины I²C. Подключается модуль к микроконтроллерам через стандартную интерфейс-шину I²C, упрощающую работу с датчиками.

Модуль дополнительно оснащён встроенным стабилизатором напряжения, что позволяет подавать питание от стандартных источников с выходным уровнем 3,3 или 5 В. Интерфейс I²C также поддерживает напряжение 3,3 или 5 В, обеспечивая удобство и универсальность подключения.

Конфигурация контактов:
- VCC – питание модуля 3.3В;
- GND – минус от источника;
- SDA – шины данных I2C (SPI);
- SCL – шины данных I2C (SPI).
- DRDY – Прерывающий контакт для подготовки данных.
3. Подключение модуля GY-271 к Arduino UNO
В качестве примера опишу последовательность действий по подключению 3-осевого магнитного датчика GY-271 к Arduino UNO и представлю фрагмент программы (скетч), который обеспечит вывод данных с датчика на последовательный порт.
Необходимые детали:
- Arduino UNO R3 x 1 шт.
- Модуль трехосевого цифрового компаса GY-271 x 1 шт.
- Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
- Кабель USB 2.0 A-B x 1 шт
Подключение:
Подключение GY-271 выполняется элементарно: достаточно соединить выводы согласно следующей схеме ниже. Сначала подключаем питание VCC и GND модуля присоединяется к выводу 5V и GND платы Arduino, затем контакт SCL и SDA модуля подключаем к выводу A5 и A4 Arduino.

Определение чипа:
Простейший метод идентификации модуля типа QMC5883L заключается в использовании сканера интерфейса I²C. Этот вариант отличается собственным уникальным адресом (0x0D), отличным от стандартного адреса устройства HMC5883L.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
#include <Wire.h> void setup() { Wire.begin(); Serial.begin(115200); while (!Serial) {delay(100);}; Serial.println(); Serial.println("I2C Scanner"); } void loop() { byte error, address; int nDevices; Serial.println("Scanning..."); nDevices = 0; for(address = 1; address < 127; address++ ) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address<16) { Serial.print("0"); } Serial.println(address,HEX); nDevices++; } else if (error==4) { Serial.print("Unknow error at address 0x"); if (address<16) { Serial.print("0"); } Serial.println(address,HEX); } } if (nDevices == 0) { Serial.println("No I2C devices found\n"); } else { Serial.println("done\n"); } delay(5000); } |
Получив указанный результат, можете быть уверены, что перед вами модификация QMC5883L.

Установка библиотки:
Для работы, будем использовать библиотеку «QMC5883LCompass» скачать можно используя интегрированную среду разработки Arduino IDE», для этого откройте «Скетч → Подключение библиотеки → Менеджер библиотек…», так же выложу библиотеки в конце статьи.

Калибровка:
Первым делом необходимо получить калибровочные показания датчика QMC5883L загрузите данный скетч на ваш Arduino.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <QMC5883LCompass.h> QMC5883LCompass compass; void setup() { Serial.begin(9600); compass.init(); Serial.println("This will provide calibration settings for your QMC5883L chip. When prompted, move the magnetometer in all directions until the calibration is complete."); Serial.println("Calibration will begin in 5 seconds."); delay(5000); Serial.println("CALIBRATING. Keep moving your sensor..."); compass.calibrate(); Serial.println("DONE. Copy the lines below and paste it into your projects sketch.);"); Serial.println(); Serial.print("compass.setCalibrationOffsets("); Serial.print(compass.getCalibrationOffset(0)); Serial.print(", "); Serial.print(compass.getCalibrationOffset(1)); Serial.print(", "); Serial.print(compass.getCalibrationOffset(2)); Serial.println(");"); Serial.print("compass.setCalibrationScales("); Serial.print(compass.getCalibrationScale(0)); Serial.print(", "); Serial.print(compass.getCalibrationScale(1)); Serial.print(", "); Serial.print(compass.getCalibrationScale(2)); Serial.println(");"); } void loop() { delay(1000); } |
После загрузки скетча откройте монитор последовательного порта и подвигайте модуль вперед и назад, в конце необходимо скопировать две строчки compass.setCalibrationOffsets и compass.setCalibrationScales

Программа:
Скопируйте ниже скетч и загрузите его в плату Arduino UNO вставив ваши калибровочные показания.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <QMC5883LCompass.h> QMC5883LCompass compass; void setup() { Serial.begin(9600); compass.init(); compass.setCalibrationOffsets(288.00, -160.00, 391.00); compass.setCalibrationScales(0.97, 1.75, 0.72); } void loop() { int x, y, z; // Read compass values compass.read(); // Return XYZ readings x = compass.getX(); y = compass.getY(); z = compass.getZ(); Serial.print("X: "); Serial.print(x); Serial.print(" Y: "); Serial.print(y); Serial.print(" Z: "); Serial.print(z); Serial.println(); delay(250); } |
После загрузки скетча откройте монитор последовательного порта.


