Управление Roomba Create 2 через Arduino и Android: пошаговое руководство
Компоненты и материалы
- iRobot Roomba Create 2 — 1 шт. (~$200)
- Arduino UNO — 1 шт.
- Bluetooth-модуль HC-06 — 1 шт.
- Тактильная кнопка — 1 шт. (для безопасного старта моторов)
Приложения
- MJRoBot BT Remote Control (Android, бесплатно в Google Play, MIT App Inventor 2)
О проекте
Введение
Призёр Instructables Robotics Contest 2016 получил Roomba Create 2. Этот туториал показывает, как управлять двигателями, светодиодами и звуком через Arduino и Bluetooth-пульт на смартфоне. Дальнейшие части — сенсоры, Raspberry Pi, IoT.
Roomba Create 2: режимы OI (Open Interface)
- Passive — только чтение сенсоров, актуаторы заблокированы.
- Safe — полный контроль, но безопасность: зарядка, падение колёс, обрыв → стоп + возврат в Passive.
- Full — полный контроль, безопасность отключена (осторожно!).
Мы используем Safe Mode.
Последовательное подключение (Mini-DIN 7 pin)
По умолчанию 115200 бод. Нужен 19200 бод для SoftwareSerial Arduino.
Два способа смены бодрейта:
- При выключенном Roomba зажмите Clean/Power ~10 сек до нисходящей мелодии.
- Или пульсируйте пин 5 (Baud Rate Change) три раза по 50–500 мс после включения.
Схема: Arduino D10 (RX) ↔ Roomba TX, D11 (TX) ↔ Roomba RX через делитель напряжения (Roomba 5V толерантен, но лучше 3.3V логика). Пин DD (Device Detect) — D12 → Mini-DIN pin 5.
Инициализация (пробуждение и Safe Mode)
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
delay(1000);
}
Управление LED и дисплеем
- Команда 139: управление 5 LED (Clean, Spot, Dock, Warning, Debris).
- Команда 163: сырой вывод цифр на 7-сегментный дисплей.
- Команда 164: ASCII-аппроксимация букв.
- Пример:
writeLEDs('s','t','o','p')→ «STOP».
Движение
Основные команды OI:
- 137 Drive (скорость мм/с, радиус мм)
- 145 Drive Direct (скорость левого/правого колеса мм/с)
- 146 Drive PWM (PWM -255..255)
Обёртки: drive(), driveWheels(), driveWheelsPWM(), turnCW(), driveStop().
Bluetooth-пульт (HC-06)
- HC-06 настроен на 19200 бод (AT+BAUD5).
- Подключение: HC-06 TX → Arduino D2 (SoftwareSerial RX), RX → D3 (TX).
- Приложение MJRoBot BT Remote Control шлёт символы:
Кнопка Символ Действие ▲ w Вперёд ▼ s Назад ▶ d Вправо ◀ a Влево ■ f Стоп m m Рестарт Safe Mode (после cliff/bump) +/- +/- Скорость +/-10 мм/с
Основной цикл
void loop() {
checkBTcmd(); // чтение символа из BT
manualCmd(); // выполнение команды
}
void checkBTcmd() {
if (BT1.available()) { command = BT1.read(); BT1.flush(); }
}
void manualCmd() {
switch(command) {
case 'm': startSafe(); BT1.println("Roomba BT Ctrl OK - 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_SPEED); command=state; break;
case '-': if(state=='w') motorSpeed=max(motorSpeed-10,MIN_SPEED); command=state; break;
}
}
Ресурсы
Полный код и библиотека roombaDefines.h на GitHub. База взята из библиотеки Dom Amato (Create2).
Отличный старт для робототехники на базе промышленной платформы. Удачи!
Производственный процесс
- Создание аудио-эффектов, управляемых датчиками, с набором Satellite CCRMA
- Создание быстрой надежной системы обнаружения пожара с Samsung SAMI, Arduino UNO и Raspberry Pi
- Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi
- Универсальный Android-пульт на Arduino, 1Sheeld и ИК-управлении
- Робот-ускользатор на сервоприводе: сборка на Arduino и HC-SR04
- Портативный бесконтактный термометр на Arduino Nano с Android-приложением
- Точное управление сервоприводом через MPU6050 (Arduino, SG90, MG996R)
- Бесшовное управление яркостью светодиодов с помощью Bolt IoT и Arduino UNO
- Модуль GPS u-blox LEA-6H 02: Интеграция с Arduino и Python
- Освоение распознавания и синтеза речи на Arduino Due