搭建路径入门一个下午

做一台通过蓝牙或 Wi-Fi 用手机控制的机器人小车

一台用手机通过蓝牙或 Wi-Fi 驾驶的机器人小车,链路一断就会自己停下,而不是失控乱跑。

做一台通过蓝牙或 Wi-Fi 用手机控制的机器人小车 技术示意图CLEARANCE FIELD

做的是什么

手机开的车——HC-05 蓝牙,或 ESP32 Wi-Fi 自己开控制页。

本站最容易上手的机器人:不需要控制理论,没有算法要对,失效模式是看得见的,而不是藏在数学里的。它还教给每一台其它机器人都需要的一课——失去控制时该怎么办。

两种无线电

HC-05(蓝牙) ESP32(Wi-Fi)
额外硬件 模块,RX 加分压 无——射频控制器上
手机上 蓝牙串口 App 任一浏览器
距离 约 10 m 户外 30 m 起
手机不断网 不断 热点模式断
适合 第一台无线 递给别人的所有

两者都没错。HC-05 是让机器人动起来更短的一条路;ESP32 在跑通之后体验更好,因为“连上这个 Wi-Fi 然后打开浏览器”这句话完全不需要解释。

物料单

两条路,只要一条。手里有 Arduino 走蓝牙;今天买零件走 Wi-Fi。

零件 蓝牙路 Wi-Fi 路 约价
控制器 Arduino Uno ESP32 $5–8
无线电 HC-05 模块 内置 $4 / $0
电平转换 模块 RX 1 kΩ + 2 kΩ 5 V 传感器输入都要 $0.10
电机驱动 1 1 $2–4
TT 减速电机 2 2 $4
两轮底盘 1 1 $6–10
电池包 1 1 $6
手机 App 要吗 要——蓝牙串口终端 不要——任一浏览器 —

合计两条路约 $25–35。

决定差不是钱,是控制界面。HC-05 给字节流,手机要发字节的 App。ESP32 自己开网页,手机要浏览器——开 URL 谁都开,不装东西。递给别人开的车,不加钱大不同。

手里有 Arduino,或要不碰网络概念最素链路,蓝牙路值。进一字节出一字节。

制作顺序

**1——先在台架上让它转起来。**接上电机、驱动板和电池,轮子悬空,完全不碰无线部分。按用 PWM 控制直流电机那一篇做,用硬编码的指令确认前进、后退和两个转向方向都正确。无线和电机驱动同时调试,一个下午就这么没了。

2——无线电加回声。HC-05 接好或 ESP32 热点起来,接转的东西前双向通文字。

**3——协议连起。**一字母加值,换行结尾。读到终止符再动不逐字节动,“到几个字节”不是“消息到了”。

**4——让它具备失效安全。**这是大多数人跳过的步骤,也正是最要紧的一步。

失联自动停车超时

无线机器人会一直执行你最后下达的那条指令。如果那是“全速前进”,而你刚刚走出了通信范围,机器人并不会停下——它会把这件事执行到底。

时序图。按键按住每 100 毫秒一指令脉冲,虚线信号丢失处停。下面无超时条信号丢后一直红失控开下去。400 毫秒 deadman 超时条最后指令后不久变停车。
指令流是因为链路断开而停止的,而不是因为用户松开了手——所以机器人必须自己计时并超时停车。 下载 SVG

解两半都要:

  • **控制端要重复发送。**手机在按键按住期间每 100 ms 发送一次当前指令,而不是按下时只发一次。
  • **机器人要等它。**如果大约 400 ms 都没有收到指令,就停车。
if (millis() - lastCommandAt > 400) stop();

松按键、关 App、手机没电、走出范围同结果。绝不靠可能不发的停车消息。

这里要用 millis() 而不是 delay()。循环里任何一处 delay(200),都会让机器人在那 200 ms 里既不读输入也不做检查。

硬件注意事项

**给无线模块一路干净的电源。**两种模块在发射时都以尖锐的突发电流取电。和电机共用一条会下垂的电源轨,会引发看起来与软件崩溃一模一样的复位——机器人开到一半没反应,一秒后又回来。电机从电池包经驱动板供电,逻辑电源单独走一路。

接线图。Arduino Uno 或 Nano TXD 直连 HC-05 模块 D10 脚,标注为安全,因为 3.3 伏输出在 5 伏输入上会被认作 HIGH。D11 到模块 RXD 脚经 2 千欧和 3.3 千欧分压,警告 5 伏直进 RXD 会缓慢损伤模块,模块仍能配对但你发给它的内容会损坏。
四根线里有三根很简单。第四根需要分压,因为 5 V 打进模块的 RXD 造成的是缓慢而不明显的损坏。 下载 SVG

**当心 3.3 V 引脚。**HC-05 的 RX 以及 ESP32 的每个 GPIO 都是 3.3 V 器件。一块 5 V 的 Arduino 向它们发送信号时需要分压。这种损坏是渐进且不彻底的,所以特别难诊断。

**这里用 L298N 完全可以。**它的压降在一台高速循迹车上是要紧的;在一台手动驾驶的车上,你只要用油门把它补偿掉就行,所以更便宜、更常见的驱动是合理的选择。

做好长什么样

测量 蓝牙(HC-05) Wi-Fi(ESP32)
指令延迟 20–60 ms 局域网 30–100 ms
空旷距离 约 10 m 约 50 m,网内哪都行
穿一堵墙 3–5 m 15–25 m
上电到可控 配对后约 2 s 连 Wi-Fi 约 5 s
掉线重连 手动,一般 自动
手感合适的失联超时 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

100%
搭建

让它失效安全

制作

目标

用手机驾驶它

目标

元器件

本路径中的教程

常见问题解答

机器人小车该用蓝牙还是 Wi-Fi?

用 HC-05 走蓝牙更容易调通,而且只需配对一次,但你需要一个串口终端 App,距离也只有大约十米。ESP32 走 Wi-Fi 则完全不需要 App——它会向任何浏览器提供自己的控制页面——而且距离更远,但手机连入机器人的网络时会断开互联网连接。第一次制作的话,蓝牙是更短的路;而对于任何你打算拿去演示的作品,ESP32 那个免 App 的控制页面值得多花一个小时。

为什么我松开按键之后,蓝牙机器人还在继续开?

因为它根本没收到松开的信息。有线机器人在你松手时会停下;无线机器人则会一直执行它收到的最后一条指令。解决办法要两头做:让手机在按键按住期间每 100 ms 重复发送当前指令,并让机器人在几百毫秒内没有收到任何指令时自动停车。这样,松开按键和信号丢失会产生同样安全的结果,你也永远不必依赖一条可能永远到不了的停车消息。

把 HC-05 直接接到 Arduino 上会损坏它吗?

会,损坏的是其中一个引脚。这个模块的逻辑电平是 3.3 V,它的 RX 引脚不耐 5 V,所以 Arduino 直接向它发送信号会让这个输入端承受过压。让人抓狂的是,这种损坏通常是不彻底的——模块仍然能配对、仍然能发送,却会悄悄地损坏或忽略你发给它的内容。在这一根线上用两个电阻做分压就能避免。

用手机控制机器人需要安装 App 吗?

只有蓝牙需要。HC-05 需要手机上装一个蓝牙串口终端来打开端口。ESP32 什么都不需要:它会创建自己的 Wi-Fi 网络并提供一个 HTML 页面,所以你连上网络、打开浏览器就行。对于一台你希望别人也能驾驶的机器人来说,这是选择 ESP32 最有力的实际理由。

手机控制的机器人也能自己行驶吗?

能,而且这是很自然的下一步。你在这里搭建的指令层与行为层是分开的,所以加上传感器之后,机器人就能否决你的指令——即使你按住前进,它也会拒绝撞墙。先把手动层做好:当你能从房间另一头用手动操作把机器人摆到位时,调试传感器要容易得多。