오늘은 가장 대중적인 IMU(관성 측정 장치) 센서인 MPU-6050을 아두이노와 연결하는 방법을 배웁니다. 다음 튜토리얼에서는 3D로 모션을 시각화해 보겠습니다.
MPU-6050은 3축 자이로스코프와 3축 가속도계를 단일 실리콘 다이에 통합했으며, 온보드 DMP(Digital Motion Processor™)로 복잡한 6축 MotionFusion 알고리즘을 처리합니다. 스마트폰, 태블릿, 웨어러블 기기의 저전력·저비용·고성능 요구사항을 충족하도록 설계되었습니다.
필요 물품
하드웨어:
아두이노 우노
MPU-6050 센서 모듈
연결 와이어
소프트웨어: 아두이노 IDE
통신 프로토콜: I2C 버스 프로토콜로 아두이노와 통신합니다.
가속도계와 자이로스코프를 별도로 쓸 수도 있지만, 이 결합 모듈만큼 정확하지는 않습니다.
배선도 및 연결 프로필
아래 두 그림 중 하나를 참고해 배선하세요.
잘 이해 안 되면 아래 핀 연결표를 보세요:
MPU-6050 5V (또는 VCC) → 아두이노 5V (모듈에 5V 핀이 있으면 5V, 없으면 3.3V 연결 – 과전압 방지)
MPU-6050 SDA → 아두이노 A4 (아날로그 입력)
MPU-6050 SCL → 아두이노 A5 (아날로그 입력)
MPU-6050 GND → 아두이노 GND
MPU-6050 INT 핀 → 아두이노 디지털 2번 핀 (외부 인터럽트 0번)
라이브러리 설치 및 예제 실행
MPU6050 라이브러리 다운로드 (MPU6050.zip) → 압축 해제 후 'MPU6050' 폴더를 아두이노 libraries 폴더에 복사
I2Cdev 라이브러리 다운로드 (I2Cdev.zip) → 동일하게 libraries 폴더에 복사
아두이노 IDE 재시작 후 파일 → 예제 → MPU6050 → Examples → MPU6050_DMP6 열기
스케치 상단에 #include "I2Cdev.h"와 #include "MPU6050_6Axis_MotionApps20.h" 포함 확인
컴파일 후 업로드
시리얼 모니터 열기 (Ctrl+Shift+M), 보드레이트 115200으로 설정 (8MHz 이하 프로세서는 38400 이하 권장)
"Initializing I2C devices..." 메시지 안 뜨면 리셋 버튼 누르기
"Send any character to begin DMP programming and demo:" 메시지에서 아무 키나 입력하면 DMP 데모 시작
지식 코너: DMP란?
DMP = Digital Motion Processing. MPU-6050 내장 모션 프로세서가 가속도계·자이로 데이터를 처리해 정확한 3D 값(요(Yaw), 피치(Pitch), 롤(Roll))을 출력합니다.
지식 코너: I2C란?
I2C(Inter-Integrated Circuit)는 2개의 양방향 활성 라인(SDA: 직렬 데이터, SCL: 직렬 클록)과 그라운드로 구성된 멀티 마스터 버스입니다. 버스에 연결된 각 디바이스는 고유 주소를 가지며, 마스터(여기선 아두이노)가 통신을 시작하고 슬레이브(MPU-6050)가 응답합니다.
다음 단계
다음 튜토리얼에서 3D 모션 시각화를 다룹니다.
코드
Arduino code for MPU sensor (아두이노)
DMP 예제 코드 (MPU6050_DMP6) – 요/피치/롤 출력을 위해 OUTPUT_READABLE_YAWPITCHROLL 정의 활성화됨
// I2Cdev and MPU6050 must be installed as libraries
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE
#include "Wire.h"
#endif
MPU6050 mpu; // 기본 I2C 주소 0x68 (AD0=LOW)
// MPU6050 mpu(0x69); // AD0=HIGH일 때 사용
// ... (인터럽트 핀 설정, DMP 초기화, FIFO 읽기, 쿼터니언/오일러/요피치롤 출력 등 전체 코드는 원문 참조)
// 주요 설정: 자이로 오프셋 보정, DMP 활성화, 외부 인터럽트 0번(핀 2) 사용
// 루프에서 mpuInterrupt 대기 → FIFO 패킷 읽기 → dmpGetYawPitchRoll로 ypr[] 계산 → 시리얼 출력
// LED 깜빡임으로 활동 표시
전체 코드는 원문의 Code 섹션 또는 아두이노 IDE 예제(MPU6050_DMP6)에서 확인하세요.