아두이노에서 지자기센서 사용하기 [HMC5883L]
아두이노

아두이노에서 지자기센서 사용하기 [HMC5883L]

반응형

HMC5883L는 자이로/가속도센서와 유사하게 생겼지만 지구의 자기장의 방향을 측정한다는 점에서 그 쓰임새가 다르다. 간단하게는 나침반을 만들수있으며, GPS 시스템과 연동하면 내비게이션 시스템을 구축할 수도있다. 그렇다면 이 센서를 간단하게 아두이노에서 사용해보자.



출처 : http://fusion94.org/2012-11-29-arduino-plus-compass-module-3-axis-hmc5883l/


우선 아두이노와 HMC5883L를 위와 같이 연결하자. (핀배치의 순서를 모듈마다 조금씩 다를수 있으므로 주의하자.)



필자도 동일하게 꾸며보았다. (참고로 아두이노 우노는 아두이노를 처음 배웠을때 구입했었던 kocoafab의 오렌지보드이다.) 이제 아래의 라이브러리를 다운받아 아두이노에 추가시켜준다.


HMC5883L Library For Arduino.rar


라이브러리를 추가하면 해당 라이브러리에 예제파일이 하나 있다. 이걸 열어도 되고 아래의 코드를 업로드 해도 된다.


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
#include <Wire.h>
 
#define Addr 0x1E               // 7-bit address of HMC5883 compass
 
void setup() {
  Serial.begin(9600);
  delay(100);                   // Power up delay
  Wire.begin();
  
  // Set operating mode to continuous
  Wire.beginTransmission(Addr); 
  Wire.write(byte(0x02));
  Wire.write(byte(0x00));
  Wire.endTransmission();
}
 
void loop() {
  int x, y, z;
 
  // Initiate communications with compass
  Wire.beginTransmission(Addr);
  Wire.write(byte(0x03));       // Send request to X MSB register
  Wire.endTransmission();
 
  Wire.requestFrom(Addr, 6);    // Request 6 bytes; 2 bytes per axis
  if(Wire.available() <=6) {    // If 6 bytes available
    x = Wire.read() << 8 | Wire.read();
    z = Wire.read() << 8 | Wire.read();
    y = Wire.read() << 8 | Wire.read();
  }
  
  // Print raw values
  Serial.print("X=");
  Serial.print(x);
  Serial.print(", Y=");
  Serial.print(y);
  Serial.print(", Z=");
  Serial.println(z);
  
  delay(500);
}
cs

 

이제 업로드 후 시리얼 모니터를 확인해보면 센서의 x,y,z 축 기준으로 측정된 자기장의 세기가 출력될 것이다.



반응형
    # 테스트용