Машинка-робот под управлением смартфона: Bluetooth или Wi-Fi
Машинка-робот, которой управляют со смартфона по Bluetooth или Wi-Fi и которая самостоятельно останавливается при обрыве связи, вместо того чтобы уезжать без управления.
Что вы собираете
Машинку-робота, которой управляют со смартфона — по Bluetooth с помощью HC-05 или по Wi-Fi с помощью ESP32, предоставляющего собственную страницу управления.
Это самый доступный робот на сайте: здесь нет теории управления, нет алгоритма, который необходимо реализовать правильно, а отказы видны, а не выражаются формулами. Это также робот, который даёт урок, необходимый каждому другому роботу: что делать, когда вы перестали управлять.
Два радиомодуля
| HC-05 (Bluetooth) | ESP32 (Wi-Fi) | |
|---|---|---|
| Дополнительное оборудование | Модуль и делитель на RX | Нет — радиомодуль находится на контроллере |
| На смартфоне | Приложение Bluetooth Serial | Любой браузер |
| Дальность | Примерно 10 m | 30 m+ на открытом воздухе |
| Смартфон сохраняет интернет | Да | Нет в режиме точки доступа |
| Лучше всего подходит | Для первой беспроводной сборки | Для всего, чем нужно передать другому человеку |
Ни один вариант не ошибочен. HC-05 — более короткий путь к движущемуся роботу; ESP32 даёт удобство после запуска, поскольку указание «подключитесь к этому Wi-Fi и откройте браузер» не требует пояснений.
Перечень компонентов
Есть два маршрута, и нужен только один. Соберите версию Bluetooth, если у вас уже есть Arduino; соберите версию Wi-Fi, если покупаете компоненты сегодня.
| Компонент | Маршрут Bluetooth | Маршрут Wi-Fi | Примерная стоимость |
|---|---|---|---|
| Контроллер | Arduino Uno | ESP32 | $5–8 |
| Радиомодуль | Модуль HC-05 | Встроенный | $4 / $0 |
| Преобразование уровня | 1 kΩ + 2 kΩ на RX модуля | Нужно для входов микроконтроллера, на которые поступает 5 V | $0.10 |
| Драйвер двигателей | 1 | 1 | $2–4 |
| Редукторный двигатель TT | 2 | 2 | $4 |
| Шасси 2WD | 1 | 1 | $6–10 |
| Аккумулятор | 1 | 1 | $6 |
| Нужно приложение на смартфоне | Да — Bluetooth Serial | Нет — любой браузер | — |
Итого: примерно $25–35 по любому маршруту.
Решающее различие состоит не в цене, а в интерфейсе управления. HC-05 предоставляет поток байтов, поэтому смартфону нужно приложение, способное отправлять байты. ESP32 предоставляет собственную веб-страницу, поэтому смартфону нужен только браузер, а значит, управлять роботом может кто угодно, открыв URL, без установки чего-либо. Для робота, которым хотите передать управление другому человеку, это огромная разница без дополнительных затрат.
Маршрут Bluetooth оправдан, если Arduino уже есть или если нужна максимально простая связь вообще без понятия о сетях. Один байт на входе и один байт на выходе.
Порядок сборки
1 — Заставьте его двигаться на рабочем столе. Двигатели, драйвер, аккумулятор, колёса оторваны от пола, никакого радиомодуля. Следуйте руководству управление двигателями постоянного тока (DC) с помощью PWM и H-моста и проверьте движение вперёд, назад и оба поворота жёстко заданными командами. Одновременная отладка радиосвязи и драйвера двигателей способна уничтожить целые послеобедия.
2 — Добавьте радиомодуль и эхо. Подключите HC-05 или запустите точку доступа ESP32 и обеспечьте передачу текста в обоих направлениях до подключения к чему-либо движущемуся.
3 — Объедините их протоколом. Одна буква и значение, завершённые символом новой строки. Считывайте до завершающего символа, а не после каждого байта, поскольку «пришли некоторые байты» не означает «сообщение пришло».
4 — Обеспечьте аварийную безопасность. Этот этап часто пропускают, хотя именно он важен.
Защитный тайм-аут
Беспроводной робот продолжает выполнять последнюю команду. Если это было «вперёд на полной скорости», а вы только что вышли за пределы дальности, робот не остановится и продолжит движение.
Исправление состоит из двух частей, и нужны обе:
- Контроллер повторяет команду. Смартфон отправляет удерживаемую команду каждые 100 ms, а не только при нажатии.
- Робот ожидает команду. Если около 400 ms ничего не пришло, остановиться.
if (millis() - lastCommandAt > 400) stop();
Теперь отпускание кнопки, закрытие приложения, разрядка аккумулятора смартфона и выход за дальность приводят к одному результату. Вы никогда не полагаетесь на команду остановки, которая может не быть отправлена.
Используйте millis(), а не delay(). Любой вызов delay(200) в контуре означает
200 ms, в течение которых робот ничего не считывает и не проверяет.
Замечания по оборудованию
Обеспечьте радиомодулю стабильное питание. Оба модуля потребляют ток резкими всплесками при передаче. Общая просаживающаяся шина с двигателями вызывает перезагрузки, похожие на программные сбои: робот перестаёт реагировать посреди движения и возвращается через секунду. Питайте двигатели от аккумулятора через драйвер, а логику оставьте на отдельном источнике.
Следите за выводами 3.3 V. Вывод RX у HC-05 и GPIO ESP32 рассчитаны на 3.3 V. Передача от Arduino с 5 V требует делителя. Повреждение постепенное и частичное, поэтому его трудно диагностировать.
Здесь подойдёт L298N. Его падение напряжения важно для быстрого робота, следующего по линии; на машинке с ручным управлением его можно компенсировать настройкой скорости, поэтому более дешёвый и распространённый драйвер остаётся разумным выбором.
Как выглядит хороший результат
| Измерение | Bluetooth (HC-05) | Wi-Fi (ESP32) |
|---|---|---|
| Задержка команды | 20–60 ms | 30–100 ms в локальной сети |
| Дальность при прямой видимости | ~10 m | ~50 m или в любой точке сети |
| Дальность через одну внутреннюю стену | 3–5 m | 15–25 m |
| Время до первого управления после включения | ~2 s после сопряжения | ~5 s для подключения к Wi-Fi |
| Повторное подключение после разрыва | Вручную, обычно | Автоматически |
| Удобный защитный тайм-аут | 300–500 ms | 300–500 ms |
Защитный тайм-аут — значение, которое стоит тщательно настроить, и оно нужно обоим радиомодулям. Если он слишком велик, робот заметно долго движется после обрыва связи, что при 0.3 m/s и тайм-ауте 1 s даёт 30 cm неконтролируемого пути. Если слишком мал, обычный разброс задержки пакетов постоянно останавливает робота, и система кажется неисправной.
Для обоих вариантов пригоден диапазон 300–500 ms. Ниже примерно 250 ms его начинают вызывать обычные колебания задержки Wi-Fi; выше примерно 700 ms обрыв связи заметно проявляется как самопроизвольное движение.
Куда это ведёт дальше
Созданный слой команд не зависит от уровня поведения, и именно поэтому он является хорошей основой. Добавьте ультразвуковой датчик, и робот сможет отказаться въезжать в стену, даже когда вы удерживаете «вперёд», — это начало робота для обхода препятствий.
Такое сочетание — робот, которым можно управлять и который способен переопределить оператора — также самый простой способ разрабатывать автономные системы: можно точно установить робота там, где возникает ошибка, не подходя к нему и не поднимая.
Дорожная карта проекта
Путь сборки
Следуйте по дереву технологий от деталей к работающему роботу. Каждый узел открывается, когда выполнены его предварительные условия, а ваш прогресс сохраняется на этом устройстве.
0 / 14 выполнено
Компоненты
- КонтроллерArduino UnoПрощающая 8-битная плата, с которой большинство знакомится с робототехникой.
- СвязьМодуль Bluetooth HC-05Беспроводная последовательная связь по Bluetooth — управление роботом с телефона по двум выводам.
- КонтроллерESP32Двухъядерный микроконтроллер с Wi-Fi и Bluetooth — беспроводной шаг вперёд от Uno.
- ДрайверДрайвер двигателей L298NДвойной H-мост, превращающий слабые логические выводы в мощность для двигателей.
- Исполнительный механизмРедукторный двигатель TT (DC)Жёлтый редукторный двигатель, превращающий голую платформу в движущийся робот.
- ШассиШасси робота 2WDПлатформа, к которой крепятся два двигателя, свободный опорный ролик и вся электроника.
- ПитаниеБатарейный блок питания роботаРазница между работающим роботом и роботом, который постоянно перезагружается.
Руководства на этом пути
- Начальный · 1 hourУправление роботом по Bluetooth с модулем HC-05Сопрягите HC-05 с телефоном и управляйте роботом по последовательному каналу Bluetooth без классической ошибки с 5 V.
- Средний · 1.5 hoursУправление роботом из браузера с помощью веб-сервера ESP32Раздавайте страницу управления прямо с ESP32, чтобы роботом мог управлять любой браузер — приложение не нужно.
- Начальный · 18 min readУправление двигателями постоянного тока с помощью PWM и H-мостаБезопасно подключите коллекторный двигатель постоянного тока и управляйте им с помощью PWM, H-моста и реалистичных пределов тока.
- Начальный · 17 min readКонечные автоматы для поведения роботаЗамените запутанную логику робота явными состояниями, событиями, переходами, тайм-аутами и восстановлением.
Часто задаваемые вопросы
Что лучше использовать для машинки-робота: Bluetooth или Wi-Fi?
Bluetooth с HC-05 проще запустить, а сопряжение выполняется один раз, но нужны приложение для последовательного терминала и дальность примерно десять метров. ESP32 по Wi-Fi вообще не требует приложения: он предоставляет собственную страницу управления любому браузеру и обеспечивает большую дальность, но при подключении к сети робота смартфон теряет подключение к интернету. Для первой сборки короче путь через Bluetooth; для любой демонстрации страница управления ESP32 без приложения стоит дополнительного часа.
Почему мой робот по Bluetooth продолжает движение после отпускания кнопки?
Потому что он не получил команду отпускания. Проводной робот останавливается, когда вы отпускаете кнопку, а беспроводной продолжает выполнять последнюю команду. Исправление двустороннее: смартфон должен повторять текущую команду каждые 100 ms, пока кнопка удерживается, а робот — останавливаться автоматически, если несколько сотен мс ничего не пришло. Тогда отпускание кнопки и потеря сигнала приводят к одному безопасному результату, и вам не приходится полагаться на команду остановки, которая может не прийти.
Можно ли повредить HC-05 при непосредственном подключении к Arduino?
Да, на одном выводе. Логика модуля рассчитана на 3.3 V, и его вывод RX не выдерживает 5 V, поэтому передача непосредственно от Arduino создаёт нагрузку на этот вход. Осложняет всё частичное повреждение: модуль обычно продолжает сопрягаться и передавать данные, но незаметно искажает или игнорирует команды. Защищают его два резистора делителя напряжения на этой линии.
Нужно ли приложение для управления роботом со смартфона?
Только для Bluetooth. HC-05 требует какого-либо приложения Bluetooth Serial на смартфоне, чтобы открыть порт. ESP32 не нужно ничего: он создаёт собственную сетью Wi-Fi и предоставляет HTML-страницу, поэтому достаточно подключиться и открыть браузер. Это самый убедительный практический аргумент в пользу ESP32 для робота, которым должны управлять другие люди.
Робот, управляемый со смартфона, может также ездить автономно?
Да, и это естественный следующий шаг. Слой команд, который вы создаёте здесь, отделён от уровня поведения, поэтому добавление датчиков позволяет роботу переопределить вашу команду и отказаться въезжать в стену, даже когда вы удерживаете «вперёд». Сначала создайте ручной слой: датчик гораздо легче отлаживать, если во время проверки можно вручную поставить робота в нужное место издалека.