ArduinoとAndroidでRoomba Create 2をリモコン操作 ─ Bluetooth経由のステップバイステップガイド
必要な部品と材料
| 部品 | 数量 |
|---|---|
| iRobot Roomba Create 2 | 1 |
| Arduino UNO | 1 |
| HC-06 Bluetoothモジュール | 1 |
| タクトスイッチ | 1 |
使用アプリ
- MJRoBot BT Remote Control (Android、Google Playで無料配布)
プロジェクト概要

Instructablesロボティクスコンテスト2016の受賞賞品として入手したRoomba Create 2 (約2万円) を、ArduinoとAndroidアプリでリモコン操作するプロジェクトです。Create 2はシリアルポート(Open Interface)で全制御可能で、将来的にはRaspberry Piでインターネット接続も視野に入れています。
Roomba Create 2の概要
- 二輪差動駆動 (前キャスター)、最大速度500mm/s
- 表示:7セグ×4桁、LED×5 (Clean/Spot/Dock/Warning/Dirt)
- センサー:崖検出×4、バンパー×2、ホイールエンコーダー
- プログラミングモード:Passive / Safe / Full (安全機能の有無で段階的)
シリアル接続とボーレート変更
RoombaのMini-DINコネクターとArduinoをソフトウェアシリアル(D10/D11)で接続。デフォルト115,200bpsだが、Arduinoソフトウェアシリアルでは不安定なため**19,200bpsに変更**必須。
変更方法(2通り):
- 電源OFF状態でCleanボタンを10秒長押し → 下降音が鳴れば19,200bps固定 (電池切れまで)
- Mini-DINピン5 (BRCピン) を起動後2秒待ってLowパルス×3回 (50-500ms幅)
起動シーケンス
void wakeUp() {
setWarningLED(ON);
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・ディスプレイ制御
- コマンド139で5つのLED制御 (Power LEDは色/輝度指定可、他はON/OFFのみ)
- コマンド163で7セグ数字表示、164でASCII風文字表示
- ヘルパー関数
writeLEDs('s','t','o','p')等で簡易制御
移動制御コマンド
- 137 Drive:速度(±500mm/s) + 回転半径(±2000mm)
- 145 Drive Direct:左右モーター個別速度指定 (±500mm/s) ← 主に使用
- 146 Drive PWM:左右PWM値指定 (±255)
ヘルパー関数で前進/後進/左右旋回/停止/その場回転等を実装。テスト用にタクトスイッチ(D12)を押すまで待機する仕組みをsetupに入れると安全。
Bluetoothリモコン化 (HC-06 + Androidアプリ)

- HC-06をハードウェアシリアル(D0/D1)またはソフトウェアシリアルで接続
- HC-06のボーレートをATコマンド(
AT+BAUD5)で19,200bpsに変更 - Androidアプリ「MJRoBot BT Remote Control」をインストール
アプリのボタン割り当て
| キー | 動作 |
|---|---|
| w | 前進 |
| s | 後退 |
| a | 左旋回 |
| d | 右旋回 |
| f | 停止 (STOP表示) |
| m | Safeモード再開 (崖検知等で止まった時の復帰) |
| + / - | 速度アップ/ダウン (前進時のみ) |
メインループ (Bluetoothコマンド処理)
void loop() {
checkBTcmd(); // BT受信チェック
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(state=='w') motorSpeed=min(motorSpeed+10,MAX); break;
case '-': if(state=='w') motorSpeed=max(motorSpeed-10,MIN); break;
}
}
今後の展開
このチュートリアルは基本の移動制御まで。今後はセンサー読み取り、Raspberry Pi連携によるインターネット制御、マッピング・ナビゲーション機能の追加を予定しています。
完全なコードと関連ドキュメント:
GitHubリポジトリ
参考ライブラリ:Dom Amato氏作 Create2ライブラリ
製造プロセス
- Satellite CCRMAキットでセンサー駆動オーディオエフェクトを構築
- Samsung SAMI、Arduino UNO、Raspberry Piで高速・信頼性の高い火災検知システムを構築
- Arduino & Raspberry Pi でインターネット制御ビデオストリーミングロボットを構築
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- ArduinoとHC-SR04で作るサーボ駆動障害物回避ロボット
- Android連携の低コスト携帯型非接触体温計(MLX90614+Arduino Nano)
- Arduino & MPU6050:SG90 & MG996Rサーボの精密制御
- Bolt IoTとArduino UNOでLED輝度をシームレス制御
- u-blox LEA-6H 02 GPSモジュール: Arduino & Python 統合ガイド
- Arduino Dueでマスターする音声認識と音声合成
- Arduino Unoで8×8 LEDマトリックスを制御:ステップバイステップガイド