지난번에 아두이노 나노 센스 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 값을 시리얼 모니터로 확인할 수 있습니다.
시리얼 플로터를 이용하면 이렇게 그래프로도 쉽게 알 수 있죠^^. 위 내용은 모두 동영상으로도 공개됩니다.
'Hardware > Arduino and Friends' 카테고리의 다른 글
Arduino R4 WIFI 모델을 소개합니다. (4) | 2023.08.10 |
---|---|
아두이노 나노 Arduino Nano 33 BLE 세팅 (8) | 2020.10.24 |
[아두이노 연재] 서보모터 사용해보기 (10) | 2019.08.28 |
[아두이노 연재] 초음파 센서 사용해보기 (14) | 2019.07.10 |
[아두이노 연재] 아두이노 GPIO 사용하기 - LED와 버튼 (22) | 2019.06.25 |
circuito.io 아두이노 주변 회로를 손쉽게 확인하기 (10) | 2019.06.21 |
[아두이노 연재] 아두이노 시작하기 (10) | 2019.06.17 |