기본개념
MPU6050 6축 자이로 가속도 센서
MPU6050은 3축 가속도계(Accelerometer)와 3축 자이로스코프(Gyroscope)를 통합한 6축 IMU(Inertial Measurement Unit, 관성 측정 장치) 센서입니다. MPU6050를 사용하면 가속도 + 회전 데이터를 동시에 읽을 수 있고, 이를 조합하여 자세 추정(orientation estimation), 기울기 감지, 자율주행 로봇의 자세 보정 등을 할 수 있습니다.
- 3축 가속도계 (Accelerometer)
- X, Y, Z 축 방향으로의 선형 가속도(중력 포함)를 측정
- 로봇의 기울기, 이동 속도 변화 등을 계산할 때 활용
- 3축 자이로스코프 (Gyroscope)
- X, Y, Z 축 회전 각속도(각도 변화율)를 측정
- 회전 동작, 방향 변화 추적에 사용
MPU6050은 I²C 통신을 지원하며, DMP(Digital Motion Processor)를 내장하여 자체적으로 센서 퓨전(가속도계 + 자이로) 알고리즘을 수행하여 쿼터니언 값을 얻을 수 있고, 이를 오일러(yaw, pich, roll) 값으로 변환할 수 있습니다. MPU6050의 DMP 펌웨어는 문서화가 부족하고 투명성이 부족하기 때문에, 칼만 필터 같은 센서 퓨전 알고리즘을 직접 구현하여 사용할 수 있습니다.
추가로 ROS에서 robot_localization 패키지를 사용하면 IMU와 휠 엔코더를 활용한 ELK 기반의 센서 퓨전을 할 수 있습니다.
Quora - What is DMP (Digital Motion Processor) in MPU9250/6050?
L298N 모터 드라이브
L298N은 H-Bridge(에이치 브리지) 기반의 듀얼 채널 모터 드라이버 IC로, DC 모터나 스텝 모터를 제어하기 위해 사용되는 모듈입니다. Arduino, STM32, Raspberry Pi 등 마이크로컨트롤러와 연결하여 모터의 회전 방향, 속도(PWM)를 쉽게 제어할 수 있습니다. 최대 2개의 DC 모터를 독립적으로 제어할 수 있으며, 더 높은 전류가 필요한 경우 채널을 병렬로 연결할 수도 있습니다. 단일 채널당 이론상 최대 2A를 지원하며, 실제 사용에서는 약 1~1.5A를 권장합니다. 모터 구동 전압은 5V ~ 35V이고, 논리 회로 전압은 5V입니다. 5V 레귤레이터가 내장되어 있어 12V 이상 입력 시 5V 출력이 가능합니다.
모터드라이버가 필요한 이유
- 전압/전류 차이
- MCU의 I/O 핀은 낮은 전압과 소전류만 출력할 수 있습니다.
- 모터 드라이버는 모터가 필요한 높은 전압과 전류를 대신 공급합니다. - 양방향 회전 제어 (H-Bridge)
- 모터의 회전 방향을 바꾸려면 전류 방향을 반대로 해야 합니다.
- H-Bridge 구조를 통해 MCU 신호만으로 정방향과 역방향 회전을 쉽게 구현할 수 있습니다. - 속도 제어 (PWM 지원)
- PWM는 디지털 신호를 사용하여 아날로그와 유사항 효과를 내는 제어방식 입니다. (참고)
- MCU에서 PWM 신호를 보내면 Duty Cycle(신호가 켜져있는 시간 비율)에 따라 전압이 달라져 점진적으로 속도를 조절할 수 있습니다.
- ex) 예를 들어 5V PWM 신호: Duty Cycle 50% → "평균 전압 = 2.5V" → "모터 속도 = 최대 속도의 절반" - 역기전력(Back-EMF) 보호
- 모터가 회전하면 코일에 모터에 걸린 전류와 반대 방향으로 전압이 발생합니다. (Faraday’s Law, 전자기 유도 법칙)
- 모터 드라이버의 내부 다이오드가 역전압을 흡수하여 MCU를 손상시키는 것을 방지합니다. - MCU I/O 확장성
- MCU 핀 수와 전류 용량만으로는 여러 모터를 동시에 제어하기 어렵습니다.
- 모터 드라이버를 사용하면 여러 채널로 다중 모터를 독립적으로 제어할 수 있습니다.
개발환경
개발도구
| 구분 | 내용 |
| 통합 개발 환경 | Arduino IDE |
BOM




| 상품명(링크) | 수량 |
| Arduino Uno | 1 |
| L298N 모터 드라이버 | 1 |
| MPU6050 6축 자이로센서 | 1 |
| 기어드 DC 모터(12V) 타이어 세트 | 2 |
| AA배터리(8입) 건전지홀더 2선 (12V) | 1 |
H/W
H/W 구성도

HSI(Human System Interface)


| Pin No. | Pin Name | Function 1 | Function 2 | Function 3 | Used Pin | Arduino |
| 4 | PD2 | INT(MPU6050) | D2 | |||
| 11 | PD5 | TX LED | ENA(L298N) | ~D5 | ||
| 12 | PD6 | IN2(L298N) | ~D6 | |||
| 13 | PD7 | IN1(L298N) | ~D7 | |||
| 14 | PB0 | IN4(L298N) | D8 | |||
| 15 | PB1 | IN3(L298N) | ~D9 | |||
| 16 | PB2 | SS(SPI) | ENB(L298N) | ~D10 | ||
| 27 | PC4 | SDA(I²C) | ADC[4] | SDA(MPU6050) | A4 | |
| 28 | PC5 | SCL(I²C) | ADC[5] | SCL(MPU6050) | A5 |