k3ng_rotator_controller/libraries/Mecha_QMC5883L/README_KO.md
Anthony Good 050aa62ab9 2018.05.16.01
Added FEATURE_AZ_POSITION_MECHASOLUTION_QMC5883 - QMC5883 digital compass support using Mechasolution library at https://github.com/keepworking/Mecha_QMC5883L
      Modified MechaQMC5883.cpp to get rid of compiler warning about ::read
2018-05-16 19:35:50 -04:00

2.6 KiB
Executable File

Mechasolution QMC5883 Library

HMC5883 지자기 나침반 센서의 수명 만료(EOL)로인해 그동안의 HMC5883 센서는 생산이 중단 되었고, 대체 상품인 QMC5883으로 변경이 되었습니다.

Arduino Code

해당 라이브러리를 이용하기 위한 몇가지 간단한 규칙이 있습니다. 아래 정리된 내용을 읽어주시고 사용하시는 프로젝트에 적용해 주세요

기본 요소

필수적으로 필요한 헤더파일(#include...)과 Setup 쪽 코드 입니다.

#include <Wire.h>
#include <MechaQMC5883.h>

void setup(){
  Wire.begin();
}

객체 선언

객체 선언 방식입니다. setup문 밖에서 사용이 되며 qmc와 같은 이름은 사용자가 원하는 다른 이름으로 변경이 가능합니다.

#include <Wire.h>
#include <MechaQMC5883.h>

MechaQMC5883 qmc;

사용 설정

QMC5883 센서의 설정 함수 입니다.

init 함수를 사용하면 기본 설정으로 QMC5883센서의 기능을 이용할 수 있습니다.

void setup(){
    Wire.begin();
    qmc.init();
}

좀더 세세한 설정을 원한다면 다음과 같이 사용이 가능합니다.

void setup(){
  Wire.begin();
  qmc.init();
  qmc.setMode(Mode_Standby,ODR_200Hz,RNG_8G,OSR_512);
}

setMode에 사용되는 값들은 다음 값들을 이용할 수 있습니다.

Mode : Mode_Standby / Mode_Continuous

ODR : ODR_10Hz / ODR_50Hz / ODR_100Hz / ODR_200Hz
ouput data update rate

RNG : RNG_2G / RNG_8G
magneticfield measurement range

OSR : OSR_512 / OSR_256 / OSR_128 / OSR_64
over sampling rate

값 읽기

측정한 센서의 값을 읽는 법은 다음과 같습니다.

void loop(){
  int x,y,z;

  qmc.read(&x,&y,&z);
}

방위각에 대한 값입니다.

void loop(){
  int x,y,z;
  int a;
  //float a; //float 형도 지원됩니다.

  qmc.read(&x,&y,&z,&a);
}

별도로 원하는 방위각도 구할 수 있습니다.

void loop(){
  int x,y,z;
  int a;

  qmc.read(&x,&y,&z);
  a = qmc.azimuth(&y,&x);
}

기본 예제

다음은 라이브러리 기본 예제인 raw입니다.

위에 소개된 내용의 총집합으로 볼 수 있습니다.

#include <Wire.h>
#include <MechaQMC5883.h>

MechaQMC5883 qmc;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  qmc.init();
  //qmc.setMode(Mode_Continuous,ODR_200Hz,RNG_2G,OSR_256);
}

void loop() {
  int x,y,z;
  qmc.read(&x,&y,&z);

  Serial.print("x: ");
  Serial.print(x);
  Serial.print(" y: ");
  Serial.print(y);
  Serial.print(" z: ");
  Serial.print(z);
  Serial.println();
  delay(100);
}