한 3개월간 해봤던 프로젝트에서 사용한 방법이다.
라즈베리파이 GPIO의 I2C통신을 통해서(SCL, SDA) 받아오는데
아쉽게도 DMP까진 구현하질 못했다.
센서값을 통해서 상보필터를 씌워서 구현하는 정도로 만족해서 사용했다..
뭔가 더 하고 싶었는데..
다른걸 구현하느라 시간도 없다보니 그냥 넘어갔다.
http://ozzmaker.com/2013/04/29/guide-to-interfacing-a-gyro-and-accelerometer-with-a-raspberry-pi/
위의 링크에서 많은 도움을 얻었다.
다만 위의 링크는 다른 센서를 이용했기에
저 소스를 기반으로 MPU6050에 맞게 컨버팅 해봤다.
그리고 밑의 소스를 바탕으로 구현하려면 여기에 올려 놓은 i2c-dev,h 파일이 필요하다.
#include "i2c-dev.h"
i2c-dev.h 파일을 들여다 보고 잘 연구해 보면 소스를 더 좋게 만들 수 있을 것 같은데
뭐 시간 때문에.... ㅠㅠ
또한 당연히 GPIO를 활용하기 때문에 wiringPi 라이브러리는 필수로 설치해야 한다.
==================== Device 장치 Open ===================
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 |
| cs |
================== Register Read 함수와 Write, Write2함수 ============
Write함수는 그냥 덮어쓰는 함수
Write2함수는 읽어온 후 원하는 비트만 셋 해서 다시 쓰는 함수
또 안에 보면 Block단위로 읽어오는 함수도 있음.
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 |
| cs |
======================== 센서값 읽어오기 ============
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
| cs |
====================== 센서값 계산부 ========================================
센서값 읽어들인 후 LOOP_CYCLE만큼 Delay 하여
그 Delay한 시간을 Gyroscope 값을 계산할 dt로 활용한다.
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 42 43 44 45 46 47 |
| cs |