아두이노와 안드로이드로 룸바 크리에이트 2 제어하기: 단계별 가이드
부품 및 소모품
| 아이로봇 룸바 크리에이트 2 (Roomba Create 2) |
1개 |
| 아두이노 우노 |
1개 |
| HC-06 블루투스 모듈 |
1개 |
| 푸시 버튼 |
1개 |
앱 및 온라인 서비스
- MJRoBot BT Remote Control (안드로이드 앱, 구글 플레이 무료)
프로젝트 개요
2016년 인스트럭터블 로봇 콘테스트 우승 상품으로 받은 룸바 크리에이트 2(약 $200)를 아두이노와 안드로이드 앱으로 제어하는 프로젝트입니다. 시리얼 통신으로 룸바의 모터, LED, 사운드를 제어하고, 블루투스로 스마트폰에서 원격 조종합니다.
깃허브 전체 코드 | 참고 라이브러리 (Dom Amato)
룸바 크리에이트 2 이해하기
하드웨어 사양
- 디퍼렌셜 드라이브 (2륜 + 전방 캐스터)
- 최대 속도 500 mm/s, 전후진 가능
- 4자리 7세그먼트 디스플레이, 5개 LED (Clean, Spot, Dock, Warning, Dirt)
- 절벽 센서 4개, 범프 센서 2개, 휠 인코더 내장
OI (Open Interface) 제어 모드
- 수동 모드: 센서 읽기만 가능, 액추에이터 제어 불가
- 안전 모드: 완전 제어 가능하나 충전기 연결, 휠 드롭, 절벽 감지 시 안전 모드로 강제 전환
- 완전 모드: 모든 안전 기능 해제, 완전 제어 가능 (주의 필요)
시리얼 통신 설정
룸바 기본 보드레이트 115,200 → 아두이노 소프트웨어 시리얼용 19,200으로 변경 필수.
보드레이트 변경 방법 (2가지)
- 전원 끄고 Clean 버튼 10초 이상 누르기 → 하강 음계 재생 후 19,200 고정
- 미니딘 5번 핀(보드레이트 변경)에 50-500ms 로우 펄스 3회 입력
아두이노-룸바 배선 (미니딘 7핀)
- 아두이노 D10 (Soft RX) ← 룸바 TX
- 아두이노 D11 (Soft TX) → 룸바 RX
- GND 공통
- 전원: 룸바에서 5V 공급 가능 (또는 별도 배터리)
룸바 깨우기 및 모드 진입
void wakeUp() {
digitalWrite(ddPin, HIGH); delay(100);
digitalWrite(ddPin, LOW); delay(500);
digitalWrite(ddPin, HIGH); delay(2000);
}
void startSafe() {
Roomba.write(128); // START
Roomba.write(131); // SAFE MODE
delay(1000);
}
LED 및 디스플레이 제어
파워 LED (청색/녹색/빨강, 밝기 조절)
setPowerLED(color, intensity); // color: 0=녹, 128=주황, 255=빨강 / intensity: 0-255
기타 4개 LED (고정 밝기)
setDebrisLED(ON); setDockLED(ON); setSpotLED(ON); setWarningLED(ON);
7세그먼트 디스플레이
// 숫자 직접 표시 (코드 163)
setDigitLEDs(1, 2, 3, 4); // "1234"
// ASCII 근사 표시 (코드 164)
writeLEDs('s', 't', 'o', 'p'); // "STOP"
이동 제어 명령
// Drive (속도, 반경) - 코드 137
drive(velocity, radius); // velocity: ±500mm/s, radius: ±2000mm
// Drive Direct (좌/우 속도) - 코드 145
driveWheels(right, left); // ±500mm/s
// Drive PWM - 코드 146
driveWheelsPWM(rightPWM, leftPWM); // ±255
편의 함수 예시
turnCW(40, 180); // 제자리 우회전 180도
turnCCW(40, 180); // 제자리 좌회전 180도
driveStop(); // 정지
driveLeft(20); // 좌측 모터만 회전 (좌회전)
driveRight(20); // 우측 모터만 회전 (우회전)
블루투스 원격 제어
HC-06 설정
기본 9600 → AT+BAUD5 명령으로 19200 변경 (아두이노-룸바 속도와 맞춤)
안드로이드 앱 (MJRoBot BT Remote Control)
| 버튼 | 전송 문자 | 동작 |
| 전진 | w | 직진 |
| 후진 | s | 후진 |
| 우회전 | d | 우회전 |
| 좌회전 | a | 좌회전 |
| 정지 | f | 모터 정지 + "STOP" 표시 |
| 모드 전환 | m | 세이프 모드 재진입 (절벽 등 감지 후 복구) |
| 속도 + | + | 최대 500까지 10씩 증가 |
| 속도 - | - | 최소 50까지 10씩 감소 |
메인 루프 코드
void loop() {
checkBTcmd(); // 블루투스 명령 수신 확인
manualCmd(); // 명령에 따른 동작 실행
}
void checkBTcmd() {
if (BT1.available()) {
command = BT1.read();
BT1.flush();
}
}
void manualCmd() {
switch (command) {
case 'm': startSafe(); BT1.println("Safe mode"); playSound(3); break;
case 'f': driveStop(); writeLEDs('s','t','o','p'); break;
case 'w': drive(motorSpeed, 0); writeLEDs(' ','g','o',' '); break;
case 'd': driveRight(motorSpeed); writeLEDs('r','i','g','h'); break;
case 'a': driveLeft(motorSpeed); writeLEDs('l','e','f','t'); break;
case 's': drive(-motorSpeed, 0); writeLEDs('b','a','c','k'); break;
case '+': if(motorSpeed<500) motorSpeed+=10; break;
case '-': if(motorSpeed>50) motorSpeed-=10; break;
}
}
마무리 및 향후 계획
이 튜토리얼은 룸바 제어의 기초만 다룹니다. 향후 라즈베리 파이 연동으로 인터넷 제어, 센서 데이터 활용, 매핑/내비게이션 등 고급 기능을 다룰 예정입니다. 전자공학과 로봇공학의 재미를 더 많은 분과 나누고 싶습니다!
블로그: MJRoBot.org (포르투갈어)