Arduino + Android 蓝牙控制 Roomba Create 2 扫地机器人完整指南
项目背景
iRobot Create 2 是基于 Roomba 600 系列的开发平台,约 $200,提供完整的 Open Interface (OI) 串口协议。本教程展示如何用 Arduino UNO + HC-06 蓝牙模块,配合自制 Android App (MIT App Inventor 2) 实现手机无线遥控 Create 2 的移动、LED、蜂鸣器、七段数码管显示。
硬件清单
- iRobot Create 2 ×1
- Arduino UNO R3 ×1
- HC-06 蓝牙模块 ×1
- 轻触按键 ×1 (用于启动/复位)
- Mini-DIN 7Pin 公头 (或剪裁旧键盘线) ×1
- 杜邦线、面包板/万能板若干
Create 2 串口接口定义 (Mini-DIN 7Pin)
| Pin | 功能 | Arduino 连接 |
|---|---|---|
| 1 | Vpwr (非稳压电池电压) | 可接 Vin (需降压) |
| 2 | GND | GND |
| 3 | TXD (Create→Host) | Arduino RX (D10, SoftwareSerial) |
| 4 | RXD (Host→Create) | Arduino TX (D11, SoftwareSerial) *需分压 3.3V* |
| 5 | BRC (波特率改变/唤醒) | D12 (数字输出) |
| 6 | 未使用 | — |
| 7 | GND | GND |
波特率设置 (关键步骤)
Create 2 默认 115200bps,Arduino SoftwareSerial 最高可靠 38400bps,必须降至 19200bps:
- 关机状态下长按 Clean 键 10 秒,听到下降音调后松开,Create 进入 19200bps 模式(掉电失效)。
- 或上电后 2 秒内对 BRC (Pin5) 发送 3 个 50-500ms 低脉冲(代码中
wakeUp()函数实现)。
Arduino 核心固件结构
关键库与定义
#include
SoftwareSerial Roomba(10, 11); // RX, TX
const uint8_t BRC_PIN = 12;
const uint8_t BTN_PIN = 2; // 启动按键
唤醒与进入 Safe Mode
void wakeUp() {
digitalWrite(BRC_PIN, HIGH); delay(100);
digitalWrite(BRC_PIN, LOW); delay(500);
digitalWrite(BRC_PIN, HIGH); delay(2000);
}
void startSafe() {
Roomba.write(128); // START
Roomba.write(131); // SAFE MODE
delay(1000);
}
运动控制封装
// 直接驱动左右轮速度 (-500~500 mm/s)
void driveWheels(int right, int left) {
right = constrain(right, -500, 500);
left = constrain(left, -500, 500);
Roomba.write(145); // Drive Direct
Roomba.write(highByte(right)); Roomba.write(lowByte(right));
Roomba.write(highByte(left)); Roomba.write(lowByte(left));
}
// 简易封装
void forward(int v) { driveWheels(v, v); }
void backward(int v) { driveWheels(-v, -v); }
void turnLeft(int v) { driveWheels(v, -v); }
void turnRight(int v) { driveWheels(-v, v); }
void stopMotors() { driveWheels(0, 0); }
LED 与数码管控制
// 5 LED: Clean(双色), Spot, Dock, Warning, Debris
void setPowerLED(uint8_t color, uint8_t intensity) { // color: 0=Green, 128=Orange, 255=Red
Roomba.write(139);
Roomba.write(0); // LED bitmask 稍后统一发送
Roomba.write(color);
Roomba.write(intensity);
}
void setDigitLEDs(uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4) {
Roomba.write(163); // Raw numeric
Roomba.write(d1); Roomba.write(d2); Roomba.write(d3); Roomba.write(d4);
}
void writeLEDs(char a, char b, char c, char d) { // ASCII 近似
Roomba.write(164);
Roomba.write(a); Roomba.write(b); Roomba.write(c); Roomba.write(d);
}
Android App (MJRoBot BT Remote Control)
- Google Play 搜索安装,或从 MIT App Inventor Gallery 导入源码二次开发。
- 界面:8 方向摇杆 + 速度 +/- + 模式切换 + 文本日志窗口。
- 发送字符协议:
| 字符 | 动作 |
|---|---|
| w | 前进 |
| s | 后退 |
| a | 左转 |
| d | 右转 |
| f | 停止 |
| m | 重新进入 Safe Mode (撞墙/悬崖后恢复) |
| + / - | 速度 +/- 10 mm/s |
Arduino 主循环处理蓝牙指令
#include
SoftwareSerial BT(8, 9); // HC-06 TX→D8, RX→D9
char cmd; uint8_t speed = 200; char state = 'f';
void loop() {
if (BT.available()) {
cmd = BT.read(); BT.flush();
handleCmd(cmd);
}
}
void handleCmd(char c) {
switch (c) {
case 'm': startSafe(); BT.println("Safe mode"); playSound(3); break;
case 'f': stopMotors(); writeLEDs('s','t','o','p'); state='f'; break;
case 'w': forward(speed); writeLEDs(' ','g','o',' '); state='w'; break;
case 's': backward(speed); writeLEDs('b','a','c','k'); state='s'; break;
case 'a': turnLeft(speed); writeLEDs('l','e','f','t'); break;
case 'd': turnRight(speed); writeLEDs('r','i','g','h'); break;
case '+': if(state=='w') speed=min(speed+10,500); break;
case '-': if(state=='w') speed=max(speed-10,50); break;
}
}
HC-06 配置
- 上电进入 AT 模式 (LED 快闪),串口发送
AT+BAUD5设为 19200bps (代码 5 对应 19200)。 - 可选:
AT+NAME修改设备名,AT+PIN修改配对码。
进阶扩展方向
- 传感器读取:OI 提供碰撞、悬崖、轮编码器、电池电压等 50+ 传感器包,可扩展 Arduino 代码周期请求并上传手机绘图。
- 自主导航:结合超声波/激光雷达 + SLAM 算法 (如 ROS + create_autonomy 驱动),实现自主建图避障。
- 树莓派替代 Arduino:运行 ROS2、OpenCV 视觉识别、语音控制,通过 USB 直连 Create 2 (115200bps 硬件串口)。
- 云端监控:ESP32 替代 HC-06,MQTT 上报状态至 Home Assistant,实现远程监控与指令下发。
资源链接
- GitHub 完整代码与文档:Mjrovai/Roomba_BT_Ctrl
- Create 2 OI 规范手册:官方 PDF
- Dom Amato Create2 库:GitHub (本项目部分函数参考此库)
制造工艺
- Satellite CCRMA 套件:构建传感器驱动的音频效果器
- 树莓派 + Arduino UNO + 三星 SAMI 极速构建火灾检测系统
- Arduino与树莓派构建互联网控制视频流机器人完整指南
- 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
- 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
- 低成本便携式红外测温计:Arduino Nano + MLX90614 + Android OTG
- Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
- Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
- u-blox LEA-6H GPS 模块:Arduino 与 Python 集成指南
- 在 Arduino Due 上实现语音识别与语音合成 - BitVoicer Server 方案
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
- 手机APP无线控制Arduino LED:WiFi/Ethernet + Evothings Studio跨平台开发