Подключение модуля трехосевого компаса 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 В, обеспечивая удобство и универсальность подключения.

Модуль GY-271 поставляется с микросхемами HMC5883L или QMC5883L и библиотеки отличаются. Для точного определения вашего варианта выполните сканирование шины I²C.

Конфигурация контактов:

  • 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.

#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.


#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 вставив ваши калибровочные показания.

#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);
}

После загрузки скетча откройте монитор последовательного порта.

Купить Arduino UNO
Купить модуль трехосевого цифрового компаса GY-271

Вам может также понравиться...

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *