본문으로 바로가기

지난번에 아두이노 나노 센스 33 BLE 모델을 소개했는데요. 이번에는 그 중에서 관성센서인 지자기, 가속도, 자이로의 값을 어떻게 받아 오는지를 한 번 보겠습니다.

매우~ 심플하게 저렇게 PC와 연결하구요~

아두이노를 실행하 다음 스케치 -> 라이브러리포함하기 -> 라이브러리 매니저를 실행합니다. 그리고 LSM9DS1을 찾습니다. 그게 칩이름이거든요^^

설치를 완료한 후에 (혹시 아두이노를 다시 실행해야할 수도 있습니다.) 파일 -> 예제 -> Arduino_LSM9DS1에 가면 자이로, 가속도, 지자기 센서를 사용할 수 있는 예제들이 있습니다.

네, 가속도 센서예제이고, 간단히 실행한 다음 시리얼 모니터로 확인해보면 각각의 축별 가속도 측정값이 잘 들어온다는 것을 알 수 있습니다.

그 다음은 자이로 센서 예제를 불러옵니다.

역시 잘 들어옵니다. 자이로는 회전 각속도를 출력하는 아이이니 나노 보드를 회전시켜보면 값의 변화가 보일겁니다.

이것은 지자기 센서의 출력값입니다. 여기까지 해도 충분하지만, 조금 더 나가고 싶네요^^

아까 가속도센서의 예제를 새파일에 복사해둡니다.

그리고 z축과 y, x에 대하 arctan를 구하는 함수 중에 atan2를 사용해서 가속도센서의 중력 방향 대비 각도를 측정해 보겠습니다. 위 코드의 원리는

이렇습니다. 매우 간단한 삼각함수만으로 가속도센서의 출력을 이용해서 흔히 이야기하는 pitch, roll은 쉽게 구해집니다. 보다 상세한 이야기는 가속도센서를 이용한 각도 측정과 그 한계라는 글을 참조해주세요. 여기서 테스트한 전체 코드는 

#include <Arduino_LSM9DS1.h>
#include "math.h"

void setup() {
    Serial.begin(9600);
    while (!Serial);
    Serial.println("Started");

    if (!IMU.begin()) {
        Serial.println("Failed to initialize IMU!");
        while (1);
    }

    Serial.print("Accelerometer sample rate = ");
    Serial.print(IMU.accelerationSampleRate());
    Serial.println(" Hz");
    Serial.println();
    Serial.println("Acceleration in G's");
    Serial.println("X\tY\tZ");
}

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

    if (IMU.accelerationAvailable()) {
        IMU.readAcceleration(x, y, z);

        Serial.print("Roll : ");
        Serial.print(atan2(y, z)*180./PI);
        Serial.print('\t');
        Serial.print("Pitch : ");
        Serial.println(atan2(x, z)*180./PI);
    }
}

입니다.

이렇게 하면 쉽게 Roll 값과 Pitch 값을 시리얼 모니터로 확인할 수 있습니다.

시리얼 플로터를 이용하면 이렇게 그래프로도 쉽게 알 수 있죠^^. 위 내용은 모두 동영상으로도 공개됩니다. 



댓글을 달아 주세요

  1. BlogIcon 북두협객 2020.12.30 15:15

    프로그램에 달인 다운 솜씨입니다!
    KFX 전투기 소프트웨어에도 참여해주시면 우리나라 국방이 더욱 튼튼해질거 같습니다.

  2. BlogIcon 핑구야 날자 2020.12.31 06:54 신고

    테스트하면서 여러가지로 재미있었겠네요 올 한 해도 유익한 정보 잘 읽었습니다 새해 복 많이 받으세요