아두이노2016. 5. 17. 13:48

MPU-6050 은 6축 (X,Y,Z축 자이로스코프-기울기 + 3축 가속도) 를 측정해 주는 센서 입니다.  여러곳에 사용이 되지만 요즘은 드론의 자세 제어용으로 많이 사용이 됩니다. 통신은 I2C 통신을 지원합니다. 스마트폰에도 이런 자이로 센서가 들어있어서 폰을 세로로 들거나 가로로 들게되면 자이로 센서가 그것을 감지해서 화면의 표시 방법을 다르게 합니다. 또 게임 같은데도 이용이 되는데 스마트폰으로 레이싱 게임을 할 때 스마트폰을 기울이면 자동차가 커브를 도는 것도 이런 센서를 이용하는 것입니다.  전자식 자이로 센서는 코리올리 힘을 측정하여 전기신호로 변환하고 힘에 대한 각속도를 계산한다고 합니다.  이 각속도의 변화를 이용하여 기울기를 측정하게 된다고 하는데... 이 코리올리의 힘이 궁금한 분은 밑줄 친 부분을 클릭해 보시면 됩니다. 조금 읽어봤는데 저는 어려워서 잘 모르겠습니다. ^^;  가속도는 중력가속도의 변화를 이용하여 측정 합니다.


MPU-6050 칩의 핀배열 및 자이로 및 가속도 센서 작동 원리 입니다. 이런류의 센서를 MEMS 센서라고 부릅니다. MEMS 는 Micro Electro Mechanical Systems 의 약자 입니다. 말 그대로 미세전자기계시스템으로서 전자와 기계가 결합한 센서라고 할 수 있겠습니다. 초고밀도 집적회로와 미세기계, 마이크로 크기의 모터와 미세기어 등도 MEMS에 해당 됩니다.


▲ 자이로 센서와 MEMS 에 대한 동영상 입니다. 가로 세로 5mm 크기의 MPU-6050 칩을 뜯어보면 위와 같은 초미세 기계장치가 들어 있을 것입니다.


■ MPU-6050 데이터시트

MPU-6050_DataSheet_V3 4.pdf


MPU-6050 모듈은 위와 같이 생겼습니다. 모듈의 가운데 가로세로 5mm 정도 되는 MPU-6050 칩이 붙어 있습니다. 모듈은 구입 시 직선형, ㄱ자형의 2가지 커넥터를 제공합니다. 커넥터 핀의 납땜은 자신이 해야 합니다. 간격이 좁으므로 옆의 단자와 합선되지 않도록 조심해서 납땜해 줍니다.


아두이노 우노와 연결한 모습 입니다. 연결은 다음과 같이 하였습니다. 참고로 모듈은 3.3V 나 5V 어디에 연결해도 상관이 없습니다. 


 MPU-6050 모듈

아두이노 우노 

 VCC

5V 

 GND

 GND

 SCL

 A5

 SDA

 A4

 INT

 D2








위와 같이 연결을 하고 MPU6050 라이브러리와 I2C 통신을 위한 라이브러리를 아두이노 라이브러리 폴더에 복사해서 설치 합니다. 


■ MPU-6050 라이브러리

MPU6050.zip


■ I2C Dev 라이브러리

I2Cdev.zip



라이브러리를 설치하면 위와 같이 MPU6050_DMP6 라는 예제가 나옵니다. 예제를 열어서 업로드 해 봅니다. DMP 는 Digital Motion Processing 의 약자 입니다.


소스를 실행하고 시리얼모니터를 연 다음 전송값에 아무것이나 입력하고 전송버튼을 누르면 실행이 됩니다.  그러면 위와 같이 X,Y,Z 축에 대한 기울기 값이 센서에서 쏟아져 나옵니다. 너무 빨리 값이 나와서 하나 하나 보기는 힘들지만 센서를 움직이면 값이 변한다! 는 사실은 알게 되었습니다.


그런데 위와 같이 쏟아져 나오는 값들을 비주얼하게 보여줄 수 있는 툴이 있습니다. 바로 Processing 이라는 툴인데 이런 데이터들을 간편하게 비주얼화 해주는 것이라고 보면 되겠습니다. 아래와 같이 IDE 가 따로 있어서 설치해 주고 사용하면 됩니다. 



▲ Processing 소개 동영상



그래서 이번에는 MPU-6050 의 데이터를 Processing 을 이용해서 비주얼하게 표시해 보도록 하겠습니다.


Processing 다운로드 페이지의 모습입니다. 윈도우, 맥, 리눅스 모두 지원이 되니 자신의 OS에 맞는 소프트웨어를 다운로드 받으면 됩니다.  https://processing.org/download/?processing 이동해서 다운로드 받습니다. 


윈도우의 경우 별도의 설치과정은 없으며 압축을 풀고 폴더를 적절한 위치로 이동한 후  Processing.exe 를 실행하면 됩니다.


먼저 Processing 라이브러리를 하나 설치해야 합니다. toxi 라이브러리를 아래에서 다운로드 받거나 다운로드 URL 에서 다운로드 받습니다.


■ toxi 라이브러리 다운로드

toxiclibs-complete-0020.zip


■ toxi 라이브러리 다운로드 URL : https://bitbucket.org/postspectacular/toxiclibs/downloads/toxiclibs-complete-0020.zip


다운로드 받은 라이브러리의 압축을 풀면 'toxiclibs-complete-0020' 라는 이름의 폴더가 나옵니다. 이것을 위의 그림과 같이 Processing 의 기본 라이브러리 폴더인 '내문서 -> Processing -> Libraries' 에 복사해 넣으면 됩니다. 그러면 일단 Processing 에서 라이브러리 설치는 끝난 것입니다.


그리고 위에서 실행했었던 예제 MPU6050_DMP6 를 아두이노 IDE 로 다시 열어서 다음의 그림과 같이 주석을 고쳐 줍니다.


위와 같이 #define OUTPUT_READABLE_YAWPITCHROLL 이라는 부분을 주석처리 합니다.


그리고 #define OUTPUT_TEAPOT 이라는 부분의 주석을 해제 합니다. 수정 후 아두이노에 업로드를 합니다.


이번에는 Processing 에서 다음의 파일을 엽니다. 파일 -> 열기를 눌러서 MPU6050 라이브러리를 설치한 폴더를 찾아서 MPUTeapot.pde 라는 파일을 엽니다.  저의 경우는 아두이노 설치폴더 하위의 Libraries 폴더에 라이브러리를 설치 했습니다.  상세한 MPUTeapot.pde 의 위치는 C:\Program Files (x86)\Arduino\libraries\MPU6050\Examples\MPU6050_DMP6\Processing\MPUTeapot\ 입니다.


위의 그림과 같이 MPUTeapot.pde 소스에서 아두이노가 작동되고 있는 포트를 수정해 줍니다. 윈도우의 경우에는 위의 그림과 같이 String portName... 부분을 주석처리 하면 되고 리눅스나 맥의 경우에는 반대로 주석처리를 하고 포트를 적어주면 됩니다.


모든 준비가 끝났으면 Processing 에서 ▶ 모양의 실행 버튼을 클릭하면 다음과 같이 MPU-6050 센서에서 보내주는 정보를 3D 비행기 모양을 이용해서 비주얼하게 볼 수 있습니다.



이상으로 6축 자이로 및 가속도 센서인 MPU-6050 에 대해서 알아보았습니다.

반응형
Posted by 대네브 (deneb)

댓글을 달아 주세요

  1. 잘됩니다 감사합니다.

    2016.10.04 19:56 [ ADDR : EDIT/ DEL : REPLY ]
  2. 좋은글너무감사합니다

    너무 좋은 글 잘 읽고갑니다. 아두이노에서 어떻게 쓸까 고민했는데 덕분에 큰 도움 얻었습니다~

    2016.11.01 23:03 [ ADDR : EDIT/ DEL : REPLY ]
  3. 호호호호호호

    도움이 많이 되었습니다. 그런데 mpu6050 종류가 다양한데 제가 사용하는 것은 mpu6050 gy-25입니다 그런데 이 예제에 넣으니 DMP Initialization failed (code 1)이렇게 뜹니다 제가 사용하는 센서와 블로그에 나와있는 센서에 연결하는 핀의이름이
    다릅니다. INT핀이 없고 RST핀이라는게 있습니다. 이거와 상관이 있는지 여쭈어 봅니다.

    2016.11.04 00:19 [ ADDR : EDIT/ DEL : REPLY ]
    • 뭔가 아두이노와 센서의 연결이 잘 못 된게 아닌가 생각이 되는데요. 핀에 대해서는 잘 모르겠네요. 구글링 해 보시면 답이 있지 않을까 합니다.

      2016.11.05 14:27 신고 [ ADDR : EDIT/ DEL ]
  4. 우와

    좋은글 너무 감사합니다. 저도 윗 분과 동일하게 업로드까지는 다 되는데, 시리얼 모니터에서 아래와 같이 나옵니다.

    IniInitializing I2C devices...
    Testing device connections...
    MPU6050 connection failed

    Send any character to begin DMP programming and demo:

    어떤 문제인지 알 수가 있을까요?

    즐거운하루되세요!

    2016.11.04 18:50 [ ADDR : EDIT/ DEL : REPLY ]
    • 위의 댓글과 마찬가지로 아두이노와 센서의 연결이 잘 못 된게 아닌가 생각이 됩니다. 다시 한 번 확인해 보고 연결해 보세요.

      2016.11.05 14:28 신고 [ ADDR : EDIT/ DEL ]
    • Smaker

      저도 같은 경우였는데요 처음에 연결한 센서는 칩셋은 mpu 6050 이지만 모델명은 gy-88 이었네요. 그래서인지 동일한 메시지가 나오고 초기화가 실패합니다. 그래서 사진과 동일한 모델을 찾아보니 gy-521 로 나와서 그걸로 연결해보니 잘 되네요. gy-88이 더 고급모델이라 ㅡㅜ

      2016.12.10 23:32 [ ADDR : EDIT/ DEL ]
  5. 왓다우

    range를 16g랑 2000도로 바꿀수는 없나요??

    2016.11.28 14:13 [ ADDR : EDIT/ DEL : REPLY ]
    • 무슨말인지 모르겠네요

      2016.11.28 15:38 신고 [ ADDR : EDIT/ DEL ]
    • 왓다누

      mpu6050 센서 제어중인 대학생입니다. 혹시 가속도과 각속도 측정 range의 범위를 기존 250도, 2g에서 2000도, 16g로 변경하고 싶다는 말이었습니다 ㅠㅠ 코딩을 바꿔야하는건지 잘모르겠어서 여쭈어봅니다!

      2016.11.28 17:32 [ ADDR : EDIT/ DEL ]
    • 저도 이 센서는 위의 내용 테스트 해 보고 딱히 쓸데가 없어서 쳐박아논 상태라 깊게 들어가면 뭐라 드릴 말씀이 없네요.

      2016.11.28 17:39 신고 [ ADDR : EDIT/ DEL ]
  6. zCadf

    가끔씩 FIFO Overflow가 뜨면서 값이 튀는데 왜 이런가요???

    2016.12.11 14:50 [ ADDR : EDIT/ DEL : REPLY ]
    • http://forum.arduino.cc/index.php?topic=153566.0 여기 참고해 보시고 아두이노의 메모리 처리방식인 fifo (선입선출)에 대해서 알아보시길 바랍니다

      2016.12.11 18:12 신고 [ ADDR : EDIT/ DEL ]
  7. 헤더

    헤더를 받아서 압축 풀고 바로 라이브러리에 넣고 예제를 돌렸습니다
    근데 I2C 의 헤더를 찾을 수 없다고 나오는데
    혹시 압축 푼 다음에 추가로 해야할 것이 있나요 ??

    2016.12.11 17:59 [ ADDR : EDIT/ DEL : REPLY ]
  8. 도움 많이 받고갑니다.

    2020.08.27 11:41 신고 [ ADDR : EDIT/ DEL : REPLY ]