亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

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、蜂鸣器、七段数码管显示。

硬件清单

Create 2 串口接口定义 (Mini-DIN 7Pin)

Pin功能Arduino 连接
1Vpwr (非稳压电池电压)可接 Vin (需降压)
2GNDGND
3TXD (Create→Host)Arduino RX (D10, SoftwareSerial)
4RXD (Host→Create)Arduino TX (D11, SoftwareSerial) *需分压 3.3V*
5BRC (波特率改变/唤醒)D12 (数字输出)
6未使用—
7GNDGND

波特率设置 (关键步骤)

Create 2 默认 115200bps,Arduino SoftwareSerial 最高可靠 38400bps,必须降至 19200bps:

  1. 关机状态下长按 Clean 键 10 秒,听到下降音调后松开,Create 进入 19200bps 模式(掉电失效)。
  2. 或上电后 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)

字符动作
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 配置

  1. 上电进入 AT 模式 (LED 快闪),串口发送 AT+BAUD5 设为 19200bps (代码 5 对应 19200)。
  2. 可选:AT+NAME 修改设备名,AT+PIN 修改配对码。

进阶扩展方向

资源链接

制造工艺

  1. Satellite CCRMA 套件:构建传感器驱动的音频效果器
  2. 树莓派 + Arduino UNO + 三星 SAMI 极速构建火灾检测系统
  3. Arduino与树莓派构建互联网控制视频流机器人完整指南
  4. 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
  5. 舵机驱动避障机器人:基于 Arduino 与 HC-SR04 构建
  6. 低成本便携式红外测温计:Arduino Nano + MLX90614 + Android OTG
  7. Arduino + MPU6050 姿态控制舵机:SG90 与 MG996R 精准跟随实战
  8. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  9. u-blox LEA-6H GPS 模块:Arduino 与 Python 集成指南
  10. 在 Arduino Due 上实现语音识别与语音合成 - BitVoicer Server 方案
  11. Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
  12. 手机APP无线控制Arduino LED:WiFi/Ethernet + Evothings Studio跨平台开发