본문 바로가기

Arduino/응용 프로젝트(1학기)

Arduino 기울기 센서 ADXL345의 활용

아두이노에서 ADXL345 3축 기울기센서를 이용해 기울기를 알아내는 방법을 알아보자.



기울기센서는 크게 분류해서 2종류로 나눌 수 있다.

  • 3축 기울기 정보 x, y, z를 따로따로 받는 센서

  • SDO, SDA, SDL을 이용해 하나의 정보로 받는 센서

x, y, z 축의 정보를 따로따로 받는 센서는 센서의 연결부분에 x, y, z라고 명시적으로 표현되어 있다. 대표적으로 ADXL335가 있는데, 이 센서가 ADXL345보다 쓰기 편해서 인터넷에서 찾을 수 있는 기울기 센서 관련 많은 문서들이 이 기울기 센서를 사용하고 있다. 반면 SDO, SDA, SDL을 사용하는 센서는 위의 센서보다 훨씬 빠른 속도로 기울기를 측정할 수 있는 장점이 있으나, 비교적 사용이 어려운 점이 있다. ADXL345는 3축의 정보를 하나의 값으로 받아 다른 방법이 필요하다. ADXL345를 사용하기 위해서는 다음 사이트의 예제 코드가 필요하다.

https://www.sparkfun.com/tutorials/240

위의 사이트에서 기본적인 센서 제어 코드를 받을 수 있다. 이번 글에서는 이를 약간 응용하여 시각적으로 기울기를 표현하는 것을 최종 목표로 하도록 하겠다. 


먼저 아두이노와 센서를 연결해 기울기를 읽어들이는 작업을 해보자.

ADXL345는 3축의 가속도를 센서에서 읽어 아두이노로 정보를 전송한다. 센서의 CS핀에 일정한 전압을 걸어주게 되면 센서가 활성화되어서 SDO, SDA, SDL 핀을 이용해 x, y, z축 기울기의 정보를 보내주게 된다. 다음 예제를 통해 이 방법을 알아보겠다.


1. 필요 부품

아두이노 보드, ADXL345 3축 가속도 센서, 케이블...

 

2. 회로도

센서와 보드를 다음과 같이 연결한다.

센서 - 아두이노 보드

GND - GND

VCC - 3.3V

CS   - 10

SDO - 12

SDA - 11

SCL - 13





3. 아두이노 코드


4. 실행 결과

위 코드에서 보았듯이 ADXL345는 받아들인 센서값을 16진수 6자리로 받아들이게 된다. 이를 앞에서부터 2자리씩 잘라 각 성분을 x, y, z에 대입하면 0~255 사이의 정수로 된 성분값을 얻어낼 수 있다. 이 코드를 실행시킨 결과는 다음과 같다.

이 결과를 보면 센서에서 읽어들인 x, y, z 기울기 성분값이 ','를 경계로 차례대로 출력되고 있는 것을 볼 수 있다.

 그럼 두번째로 이를 보다 시각적으로 알아보기 쉽게 하기 위해 Processing을 이용해 정육면체가 기우는 것으로 표현해보자. 

 Processing은 Arduino가 시리얼 모니터에 출력한 값을 읽어들여 사용하는 방식으로 서로 연결해 사용할 수 있다. 이를 코드로 표현해보자.


5. Processing 코드


ADXL345에서 받은 x, y, z의 성분값을 각변위벡터로 표현할 수 있으므로 정육면체가 기울어지는 정도를 x, y, z에 비례하도록 하면 받은 데이터값에 따라 기울어지는 것을 볼 수 있다. 사람의 입장에서 보았을 때 보다 직관적일 수 있도록 센서의 입장에서 보이는 데이터인 x, y, z에 좌우를 대칭변환시켰다. 실행 결과는 다음과 같다.


6. 결론

이 글을 통해 기울기 센서중 하나인 ADXL345를 아두이노에서 사용하는 방법과 이를 프로세싱에 연동해 가시적으로 표현하는 방법을 알아보았다. 기울기 센서를 이용해 실제 물체가 어떻게 기울어져있는지를 알 수 잇었다는 것이 의미가 있었던 것 같다. 아쉬웠던 점은 기울기를 측정할 수 있는 점을 이용해서 활용하지 못했다는 점이였다. 그래서 다음에는 기울기를 이용해 물체를 움직이거나 상태를 측정하는 활동을 하고 싶다.