라즈베리파이 모터 쉴드로 만드는 안드로이드 제어 원격 주행 로봇
프로젝트 개요
안드로이드 기기의 가속도계 센서로 지형 주행 로봇을 원격 제어하는 시스템을 구축합니다. 라즈베리파이 2 모델 B, 아두이노 101, DK 일렉트로닉 모터 쉴드, DC 모터를 I2C 통신과 웹 서버로 연동했습니다. 최종적으로 안드로이드 폰을 기울여 로봇을 조종합니다.
하드웨어 구성
- 안드로이드 기기 (가속도계 센서 내장)
- 아두이노 101
- 라즈베리파이 2 모델 B
- DK 일렉트로닉 모터 쉴드
- 공식 라즈베리파이 와이파이 동글
- 트러스트 5V 파워뱅크
소프트웨어 환경
- 마이크로소프트 윈도우 10 IoT 코어 (라즈베리파이 OS)
- 아두이노 IDE
- 마이크로소프트 비주얼 스튜디오 2015 (코도바 안드로이드 앱 개발)
시스템 아키텍처 및 구현
1단계: 라즈베리파이 ↔ 아두이노 I2C 통신
아두이노를 I2C 슬레이브(주소 0x40)로 설정하고, 라즈베리파이(마스터)에서 보낸 가속도계 데이터를 수신해 모터 쉴드의 두 DC 모터(속도/방향)를 제어합니다. 아두이노는 라즈베리파이 Vout 핀에서 전원 공급받습니다. I2C 핀 연결도는 본문 이미지 참조.
아두이노 핵심 로직 (I2C 수신 인터럽트):
- 수신 데이터 ≥ 100: X축 데이터 (전진/후진 모터 제어)
- 수신 데이터 < 100: Y축 데이터 (좌/우 회전 모터 제어)
- 데이터 값 범위에 따라 모터 정지(RELEASE), 전진(FORWARD), 후진(BACKWARD) 및 속도(PWM) 결정
2단계: 라즈베리파이 웹 서버 (윈도우 10 IoT 코어)
라즈베리파이에서 웹 서버를 구동해 안드로이드 앱의 AJAX 요청으로 가속도계 데이터를 수신한 뒤, I2C로 아두이노에 전송합니다. 서버 코드는 'Code' 섹션의 'Windows IOT Web Server' 참조.
3단계: 안드로이드 원격 제어 앱 (코도바/비주얼 스튜디오)
비주얼 스튜디오 코도바 프로젝트로 안드로이드 앱을 개발했습니다. 가속도계 센서 데이터를 읽어 AJAX 요청으로 라즈베리파이 웹 서버에 전송합니다. 앱 코드는 'Code' 섹션의 'Android Remote Controller' 참조 (다운로드만 가능).
데이터 흐름 요약
- 안드로이드 앱 → 가속도계 데이터 → AJAX → 라즈베리파이 웹 서버
- 라즈베리파이 → I2C → 아두이노
- 아두이노 → 데이터 파싱 → 모터 쉴드 → DC 모터 구동
소스 코드
아두이노 I2C & 모터 쉴드 제어 코드
#include
#define MyAddress 0x40
#include
AF_DCMotor motorhiz(3); // 속도 모터
AF_DCMotor motoryon(4); // 방향 모터
// ... I2C 수신 인터럽트(I2CReceived)에서 수신 값 파싱 후 모터 제어
// X축(≥100): 전진/후진, Y축(<100): 좌/우
// 데이터 값 → 모터 속도 매핑 로직 포함
기타 코드
- Android Remote Controller (C#, 코도바) - 다운로드 제공
- Windows IOT Web Server (C#) - 다운로드 제공
회로도 및 CAD