라즈베리 파이에 센서 데이터 통합하기: GPS 및 MPU-9150 IMU 실전 가이드
요약
GPS 모듈과 MPU-9150 IMU를 라즈베리 파이의 I²C와 UART 인터페이스로 연결하고 실시간으로 정보를 처리해 자율 내비게이션에 활용하는 방법을 배웁니다.
키워드: I2C 통신, UART 통신, Adafruit Ultimate GPS Breakout, Sparkfun MPU-9150 Breakout, 라즈베리 파이 설정
소개
센서 데이터 획득은 모든 디지털 제어 시스템의 근간입니다. 임베디드 컨트롤러가 이 입력을 처리할 때 통신 인터페이스 선택이 중요해집니다. 로봇 내비게이션 프로젝트에서는 지속적인 GPS 위치 업데이트와 정확한 코스 측정이 필수적입니다. 이 튜토리얼은 GPS 모듈과 자력계를 라즈베리 파이에 배선하고 데이터를 원격으로 확인하며 제어 소프트웨어에 통합하는 방법을 보여줍니다.
목표
이 고급 튜토리얼은 라즈비안과 기본 bash 명령에 익숙하다고 가정합니다. 파이의 시리얼 인터페이스로 가속도계와 GPS 데이터를 읽고 센서를 배선하며 필요한 하드웨어 드라이버를 설정하는 과정을 안내합니다.
정보
하드웨어
- Sparkfun 9-자유도 브레이크아웃 (MPU-9150)
- Adafruit Ultimate GPS Breakout
MPU-9150은 MPU-6050(3축 자이로스코프 & 가속도계)과 AK8975 디지털 나침반을 결합한 멀티칩 모듈입니다. 저전력과 고성능으로 스마트폰과 태블릿에 널리 사용됩니다.
Adafruit Ultimate GPS는 MTK3339 칩 기반으로 10Hz 업데이트 레이트, 22위성 추적, 외부 안테나 포트를 제공합니다. 빨간 LED가 신호 상태를 표시: 탐색 중 1Hz 깜빡임, 고정 달성 시 15초 간격 깜빡임.
통신 표준
I²C는 양방향 라인 두 개(SDA & SCL)로 마스터(파이)와 여러 슬레이브를 연결하며 각 슬레이브는 고유 주소를 가집니다.
UART는 프로그래머 정의 보드레이트로 5~8비트 프레임으로 비동기 전송하며 별도 TxD와 RxD 라인이 필요합니다.
부품 목록
- 라즈베리 파이
- 전원 공급기
- Wi-Fi 동글
- Sparkfun MPU-9150 브레이크아웃
- Adafruit Ultimate GPS 브레이크아웃
- USB-TTL 어댑터 (선택 사항)
- 브레드보드
- 수-암 점퍼 와이어
가정
- 인터넷 접속 가능.
- 라즈비안 설치 및 데스크톱 모드 설정.
- 마우스, 키보드, HDMI 모니터 연결.
절차
- 파이의 GPIO 핀 식별: UART는 GPIO 14(Tx) & 15(Rx); I²C는 GPIO 2(SDA) & 3(SCL).
- GPS 배선: GPS의 Tx를 파이 Rx에, Rx를 파이 Tx에 연결, Vin에 3.3V 또는 5V 공급, GND를 파이 그라운드에 연결.
- MPU-9150 배선: Vcc를 3.3V, GND를 그라운드, SDA를 GPIO 2, SCL을 GPIO 3에 연결.
- 파이에서 I²C 활성화:
sudo apt-get update && sudo apt-get install i2c-tools libi2c-dev 실행.
- WiringPi 설치:
git clone git://git.drogon.net/wiringPi && cd wiringPi && sudo nano /etc/modules에서 snd-bcm2835, i2c-bcm2708, i2c-dev 추가.
/boot/config.txt에 dtparam=i2c1=on과 dtparam=i2c_arm=on 추가 후 재부팅.
- MPU-6050 데모 설치:
git://github.com/richardghirst/PiBits.git 복제, MPU6050-Pi-Demo로 이동, libgtkmm-3.0-dev 설치.
I2Cdev.cpp와 setup-i2c.sh에서 /dev/i2c-0을 /dev/i2c-1로 변경.
make로 컴파일, ./setup-i2c.sh 실행, sudo i2cdetect -y 1로 확인.
./demo_raw 실행해 원시 자이로와 가속도계 데이터 확인.
- GPS 데이터 획득 설정:
- Adafruit의 GPS 데몬 가이드가 시작점이지만 커스텀 처리를 위해 오픈소스 libgps 라이브러리 사용.
git://github.com/wdalmut/libgps.git 복제, make && sudo make install로 컴파일.
- 제공된
position_logger.c 예제로 테스트: gcc -o position_logger position_logger.c -lgps -lm으로 컴파일하고 ./position_logger 실행. 고정 획득 시 위도/경도가 10진수 도 단위로 출력.
결론
이 튜토리얼은 라즈베리 파이에서 두 가지 일반 센서의 하드웨어 배선, 통신 프로토콜 활성화, 기본 소프트웨어 설정을 다뤘습니다. 예제는 데이터 표시에 초점을 맞추지만 같은 원리를 정교한 내비게이션이나 제어 알고리즘에 센서 출력을 통합하는 데 확장할 수 있습니다. 각 센서 라이브러리 숙달과 탄탄한 C/C++ 개발 역량으로 더 복잡한 실시간 센서 융합이 가능해집니다.
참고문헌