최신 DIY 프로젝트에서는 가속도계나 자력계와 같은 고급 센서가 마이크로 컨트롤러와 인터페이스되는 것을 흔히 볼 수 있습니다. 휴대폰에서 이러한 센서를 사용해 본 적이 있더라도 이러한 모듈이 어떻게 작동하는지 상상하기 어렵지만 의외로 간단합니다.
GY-271 나침반 자력계 센서는 다양한 애플리케이션에서 방향 감지를 가능하게 합니다. 여기에서는 GY-271 센서를 아두이노 마이크로컨트롤러와 인터페이스하는 과정과 보정하는 방법을 살펴보고 이 과정에서 발생할 수 있는 문제를 살펴봅니다.
GY-271 나침반 모듈이란?
GY-271 나침반 모듈은 3차원으로 자기장을 측정할 수 있는 고감도 자력계입니다. 지구의 자기장을 감지하고 내비게이션 시스템, 로봇 공학, 드론과 같은 애플리케이션에서 기기의 방향이나 방향을 결정하는 데 사용됩니다. 매우 정밀한 디지털 나침반이라고 생각하면 됩니다. 이 센서는 작고 견고한 디자인으로 다양한 프로젝트에 쉽게 설치하여 사용할 수 있습니다.
GY-271 나침반 모듈은 어떻게 작동하나요?
GY-271 HCM5883L 나침반 모듈에는 이방성 자기 저항(AMR) 기술을 기반으로 하는 3축 자력계 센서가 포함되어 있습니다. 이 센서는 내부 AMR 소자의 저항 변화를 감지하여 지구 자기장의 강도와 방향을 측정합니다.
센서가 자기장에 노출되면 AMR 소자의 저항이 변화하여 자기장의 세기와 방향에 비례하는 전압을 생성합니다. 그러면 센서의 디지털 신호 프로세서가 이 전압을 디지털 신호로 변환하여 마이크로컨트롤러가 읽을 수 있습니다. 세 축 모두에서 전압을 측정함으로써 센서는 자기장의 강도와 방향을 3차원으로 매우 정확하게 판독할 수 있습니다.
GY-271을 아두이노 Uno에 연결하기
이 모듈을 아두이노에 연결하는 것은 매우 간단합니다. 또한 향후 프로젝트 확장에 도움이 될 수 있는 다른 사용하기 쉬운 아두이노 모듈에 대해서도 다루었습니다. GY-271 모듈에는 VCC, GND, 3개의 신호 핀(SDA, SCL, DRDY)을 포함하여 총 5개의 핀이 있습니다.
다음 구성품이 필요합니다:
⭐ GY-271 HMC5883L 나침반 모듈
⭐ 아두이노 우노(또는 기타 모델)
⭐ 점퍼 와이어(수-남 및 수-여)
⭐ 브레드보드(옵션)
먼저, GY-271 모듈의 VCC 핀과 GND 핀을 각각 아두이노 우노의 5V 핀과 GND 핀에 연결합니다.
다음으로, 모듈의 SDA 및 SCL 핀을 각각 Arduino Uno의 A4 및 A5 아날로그 핀에 연결합니다.
필요한 라이브러리 설치
GY-271 나침반 모듈 및 아두이노로 작업을 시작하기 전에 센서와 통신하는 데 필요한 라이브러리를 설치해야 합니다.
스케치에 포함해야 하는 첫 번째 라이브러리는 아두이노와 센서 간의 I2C 통신에 사용되는 와이어 라이브러리입니다. 와이어 라이브러리는 아두이노 IDE와 함께 사전 설치되어 제공되므로 별도로 다운로드할 필요가 없습니다. 두 번째 라이브러리인 HMC5883L 라이브러리를 설치하려면 다음 단계를 따라야 합니다:
아두이노 IDE를 열고 스케치 & 라이브러리 포함 & 라이브러리 관리로 이동합니다.
라이브러리 관리자의 검색창에서 HMC5883L을 검색합니다.
Adafruit에서 특별히 HMC5883L 라이브러리를 선택합니다. 라이브러리가 설치되면 스케치 > 라이브러리 포함 > HMC5883L로 이동하여 아두이노 스케치에 라이브러리를 포함할 수 있습니다.
코드 이해
센서를 초기화하고, 데이터를 읽고, 지구 자기장의 세기와 방향을 계산하는 프로그램을 작성해야 합니다. 전체 코드는 공식 GitHub 리포지토리에서 다운로드할 수 있습니다.
코드 시작 부분에 방금 다운로드한 필요한 라이브러리를 포함해야 합니다.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>
센서에 고유 ID를 할당하는 것을 잊지 마세요. 이를 위해 이 줄을 사용하세요:
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);
설정 코드에서 직렬 모니터를 시작하고 센서가 응답하는지 확인합니다. 모니터에 메시지를 인쇄하여 센서의 상태를 업데이트할 수 있습니다:
void setup(void)
{
Serial.begin(9600);
Serial.println("HMC5883 Magnetometer Test"); Serial.println("");
/* Initialise the sensor */
if(!mag.begin())
{
Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
while(1);
}
}
루프에서 먼저 새 센서 이벤트를 가져옵니다:
sensors_event_t event;
mag.getEvent(&event);
그런 다음 센서의 판독값을 직렬 모니터에 표시합니다. 전송 속도를 9600으로 설정하는 것을 잊지 마세요.
Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print(" ");
Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print(" ");
Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print(" ");Serial.println("uT");
Z가 “위”를 가리키도록 모듈을 잡고 X와 Y로 제목을 측정합니다. 이렇게 하면 자력계가 수평을 이룰 때 방향을 계산할 수 있습니다. 이 코드 줄이 도움이 됩니다:
float heading = atan2(event.magnetic.y, event.magnetic.x);
방향이 정해지면 해당 위치의 자기장 오차, 즉 편각(decinationAngle)을 추가해야 합니다.
float declinationAngle = 0.663;
heading += declinationAngle;
자기 편각 웹사이트 에서 해당 지역의 편각은 편리하게 찾을 수 있습니다. 어떤 이유로 편각 각도를 찾을 수 없는 경우 코드에서 두 줄을 주석 처리하세요.
코드의 두 줄을 주석 처리하면 센서 판독값에 오류가 발생할 수 있습니다. 사용하기 전에 최선을 다해 센서를 보정하세요.
마지막으로 직렬 모니터에 제목을 인쇄하고 지연 시간을 추가하여 0.5초 동안 기다린 후 다시 읽습니다.
Serial.print("Heading (degrees): ");
Serial.println(headingDegrees);
delay(500);
여기에서 프로젝트의 필요에 맞게 코드를 사용자 지정하고 데이터 로깅과 같은 추가 기능을 추가할 수 있습니다.
Adafruit 라이브러리를 사용하려면 Adafruit의 GitHub 리포지토리 에서 소싱하는 것이 좋습니다.
나침반 데이터 읽기 및 해석
직렬 모니터에 표시되는 센서 데이터는 자력계에서 측정한 자기장 벡터 값을 각각 X, Y 및 Z 축에 대해 마이크로테슬라(μT) 단위로 표시합니다. 이 값은 자기장의 방향과 크기를 결정하는 데 사용할 수 있습니다.
도 단위로 표시되는 방향 값도 중요하며 센서의 위치에 대한 자북극의 방향을 나타냅니다. 이 수치는 로봇 공학, 내비게이션 및 위치 정보 시스템과 같이 움직이는 물체의 방향을 결정해야 하는 프로젝트에서 사용할 수 있습니다.
센서 보정
HMC5883L 모듈에 대해 다른 라이브러리를 이미 설치한 경우 해당 라이브러리를 제거하거나 삭제해야 합니다. 그렇지 않으면 캘리브레이션 중에 컴파일 오류가 발생하거나 직렬 모니터에 경고가 표시될 수 있습니다. 이 섹션에 필요한 모든 캘리브레이션 리소스가 포함된 Jarzebski의 라이브러리 을 GitHub에서 사용하는 것이 좋습니다.
먼저 코드 > ZIP 다운로드 를 클릭하여 리포지토리에서 zip 파일을 다운로드합니다.
다음으로, Arduino IDE를 열고 스케치 > 라이브러리 포함 > 라이브러리 추가를 클릭합니다.
방금 다운로드한 Arduino-HMC5883 zip 파일을 선택하면 Arduino IDE가 라이브러리를 자동으로 설치합니다.
업로드 후 센서를 평평한 표면에서 움직이면서 저장소에서 제공되는 캘리브레이션 스케치를 실행합니다. 직렬 모니터에서 얻은 값은 센서의 오프셋 값으로, 프로젝트 중에 나침반을 사용하는 동안 판독값을 수정하는 데 사용할 수 있습니다.
발생할 수 있는 문제
나침반 모듈을 아두이노와 인터페이스할 때 발생할 수 있는 몇 가지 오류가 있습니다. 다음은 몇 가지 예와 해결 방법입니다:
컴파일 오류: 필요한 라이브러리가 포함되어 있지 않거나 코드에 구문 오류가 있는 경우 발생할 수 있습니다. 이 문제를 해결하려면 올바른 라이브러리를 설치했는지 확인하고 코드에 구문 오류가 있는지 확인하세요. 여러 번 보았듯이 실수로 여러 개의 HCM5883L 라이브러리를 설치했을 수 있습니다.
Compilation error: 'Adafruit_HMC5883_Unified' does not name a type
통신 오류: 나침반 모듈과 통신할 수 없는 경우 나침반 모듈을 아두이노의 올바른 핀에 연결했는지, 배선이 올바른지 확인하세요. 또한 코드에서 모듈의 I2C 주소가 기본값(0x1E)과 다른 경우 이를 조정해야 할 수도 있습니다.
Error using hmc5883l/testDevice (line 246) Error communicating with the HMC5883L sensor. The value read from ID_A, ID_B and ID_C registers do not match expected values.
자기 간섭: 나침반 판독값이 불안정하거나 변동하는 경우 주변 물체의 자기 간섭으로 인한 것일 수 있습니다. 보다 안정적인 수치를 얻으려면 모듈을 자석이나 기타 자기 간섭원으로부터 멀리 떨어뜨려 놓으세요.
GY-271 나침반 모듈로 프로젝트의 완성도를 높여보세요
GY-271 HCM5883L 나침반 모듈을 사용할 수 있게 되면 GPS 유도 로버, DIY 드론 등 아두이노를 이용해 더 복잡한 DIY 프로젝트를 만들 수 있는 길이 열리게 됩니다. 특히 다른 센서를 추가하면 가능성은 무궁무진합니다.