MPU6050 센서 사용법을 알아보자. MEMS 칩을 포함하고 있는 MPU 센서를 간단히 요약하자면 6자유도에 해당하는 모션 센싱이 가능하다. 아래의 항공기 schemetic에서 전진 축 방향을 기준으로 항공기 기체가 좌우로 각속도 값을 가지고 회전하게 되면 ROLL 모션이 된다. 만약 항공기 기체가 상승을 위해 들어 올려지거나 내려지면 Pitch 모션이 되며 수직 높이 축을 중심축으로 하여 항공기가 평면상에서 좌우로 회전하게 되면 Yaw 가 된다.
즉 3개의 각속도 자유도 롤, 피치, 야 와 함께 각 축 방향으로 선형 가속도가 있을 수 있다. 실제 아두이노 코드와 Processing 코드를 완성해서 MPU6050의 회전 축을 조사해본 결과 x축이 Pitch 축이고 y축이 Roll 축임이 확인 되었다.
MPU6050은 6개의 순간 값을 센싱하여 DMP(Digital Motion Processor) 로 처리하여 인터럽트 신호와 함께 아두이노 보드에 I2C 인터페이스를 통해 전송한다. I2c 배선은 SDA,SCL 에 A4,A5핀 또는 반대편 아두이노 USB 가까운 쪽에 위치한 SDA,SCL 에 직접 배선해도 된다.
동영상이나 사진을 참조해도 속기 쉬운 부분이 Interrupt 처리이다.
아래에 참조 사이트를 제시하였는데 동영상을 보면 4개의 첨퍼선을 보여 준다. 이는 사실이 아니다. 반드시 5번째 점퍼선이 필요하다. 실제 코드를 읽어 보면 setup()에 pinMode(INTERUPT_PIN, INPUT) 명령이 있음을 확인할 수 있다. 이런 내용을 알고 사이트를 참조하면 도움이 될 것이다.
참고사이트 및 동영상
이 아두이노 Processing 프로젝트는 필요하다면 아래의 영문 사이트를 참조하기 바란다. 아울러 이번 블로그에서 일일이 설명하는 내용을 대상으로 한 동영상도 첨부되어 있다.
Arduino - MPU6050 GY521 - 6 Axis Accelerometer + Gyro (3D Simulation With Processing)
http://www.instructables.com/id/Arduino-MPU6050-GY521-6-Axis-Accelerometer-Gyro-3D/
MPU6050 센서 데모 아두이노 코드
MPU6050 센서를 데모하기 위한 아두이노 코드 사용법을 먼저 알아보기로 하자. MP6050 센서 사용법 데모를 위해 아래의 GITHUB 자료를 다운받아 사용하기로 하자. 아래의 사이트 정보를 참고하자.
I2C device library collection for AVR/Arduino or other C++-based MCUs http:
https://github.com/jrowberg/i2cdevlib
아두이노 코드를 모아둔 디렉토리에 상기의 ZIP 파일을 다운받아 압축을 풀어 설치하자.
i2cdevlib-master 디렉토리에 들어가 보면 다시 i2cdevlib-master 디렉토리가 있으며 한번 더 들어가면 Arduino 디렉토리가 있는데 그 안에 I2Cdev 디렉토리와 MPU6050 디렉토리가 있음을 확인할 수 있다. 이 2종류의 디렉토리를 아두이노 코드에서 스케치 탭의 라이브러리포함하기의 .ZIP 라이브러리 추가 명령을 사용하여 등록하도록 한다. 등록된 디렉토리에 I2Cdev.h 와 MPU6050 6Axis MotionApps20.h 라이브러리가 포함되어 있다.
한편 아래의 디렉토리 구조를 참고하여 MPU6050_DMP6 아두이노 코드를 불러내고 앞에서 언급한 라이브러리 2개를 설치한다.
라이브러리 설치가 완료되면 보드 종류를 Arduino Uno/Genuino 로 설정함과 아울러 COM 포트를 지정 후 컴파일 업로딩 하도록 한다. 성공적으로 업로딩 되면 시리얼 모니터를 켜고 관찰하도록 하자. 시리얼 모니터 baud rate 이 115200임을 확인하도록 한다.
시리얼 모니터에서 입력 박스에 임의의 문자 하나 입력을 요구한다. 임의의 문자 하나를 입력하고 전송 버튼을 누르자.
아래와 같이 빠른 속도로 스크롤되는 출력 결과를 볼 수 있다. 추력 값이 각속도로 생각되는데 아두이노 보드를 들고 정확한 교정은 어려을 듯하다. 단지 피치, 롤, 야 방향으로 움직여 특성만 파악하도록 하자. ypr 은 Yaw, Pitch, Roll을 뜻한다.
Processing에서 데모를 볼 수 있도록 MPU6050_DMP6 아두이노 코드 명령 2줄을 수정하여 파일 저장 후 컴파일 업로딩한다.
다시 시리얼 모니터를 켜고 initializing... 과정을 확인 후 박스에 문자를 입력 전송하여 ypr 데이터 출력을 확인한다. 확인이 끝나면 시리얼 모니터를 반드시 꺼야(OFF) 한다. Processing 코드 또한 시리얼 USB 케이블을 통해 PC 에 입력되는 COM 포트를 인터페이스 하게 되는데 만약 아두이노의 시리얼 모니터가 연결되어 있다면 “Port is busy” 라는 에러가 출력될 수밖에 없다. 즉 PC의 Processing 코드와 USB 케이블로 연결된 아두이노를 인터페이스하여 사용할 경우 반드시 1개의 시리얼 인터페이스 사용이 허용되기 때문이다.
한편 아래에 지정된 사이트에서 Processing에서 MPU6050을 지원하는 ToxicLib(???) ㅎㅎ 번역하면 독극성 라이브러리란 뜻인데 어쨌든 최신 버전을 다운 받아서 설치하자.
https://bitbucket.org/postspectacular/toxiclibs/downloads/
출시된지 오래되어서인지 최신 버전이 2011년임에 유의하자.
일종의 외부 라이브러리로 볼 수 있는 이 라이브러리의 설치는 다음과 같다. 윈도우즈 PC 의 바탕화면에 개인 사용자 폴더가 있게 마련이며 그 안에 Document 즉 우리말로 문서 폴더가 있는데 그 속에 Processing 폴더를 비롯하여 사용자가 설치한 다양한 소프트웨어들이 들어가 있기 마련이다. Processing 폴더를 들여다 보면 libraries 가 있으며 그 안에 압축 해제한 라이브러리를 가져다 두면 된다.
마지막으로 Processing 코드를 불러오도록 한다. Processing 코드는 MPU6050_DMP6 아두이노 코드와 같은 폴더 내에 있는 Processing 폴더 속에 MPUTeapot 이란 파일명으로 저장되어 있다.
MPUTeapot을 실행시키기 전에 시리얼 인터페이스 코딩 부분을 확인하도록 한다. 윈도우즈10의 컴퓨터 관리-장치 관리자-포트를 살펴 보면 COM1, COM2, COM5가 Processing Console 창에서 인식이 된다. 아두이노는 물론 COM5 에 물려 있다. 따라서 애초에 Teapot을 열면 Serial.list()[0]으로 코딩되어 있으므로 3번째에 해당하는 Serial.list()[2] 로 수정해야 한다. 실행하게 되면 컬러 모형 비행기가 자세 잡는 동영상을 볼 수 있다.
다음에 첨부된 동영상을 관찰해 보자. 모형비행기 기수 올렸다 내렸다가 피칭이며 기체를 좌우로 움직이는 것이 롤링 평면상에서 기체를 회전 시키는 것이 야잉이다.
Processing 아두이노 MPU6050 IMU 센서 코딩 재현
https://www.youtube.com/watch?v=3m4g9dthTbk
'아두이노프로세싱 프로그래밍' 카테고리의 다른 글
NodeMCU 와이파이 웹서버 LED ON/OFF 제어 및 온습도 모니터링 (0) | 2018.06.21 |
---|---|
Processing Client 아두이노 WeMos 웹서버 LED ON OFF 코딩 (0) | 2018.06.16 |
WeMos D1(Retired) LED WiFi BLINKING & STOP(짤) (0) | 2018.06.08 |
스타워즈 송을 Processing으로 Visualization하자 (0) | 2018.06.07 |
사물인터넷 NodeMCU Web Server 코딩에 의한 LED ON OFF 특집 (0) | 2018.06.06 |