将“坦克”改造成ESP32机器人,通过蓝牙连接Xbox游戏手柄,以街机风格驱动,并配备DRV8833电机驱动器
概述
Brookstone Rover 是一款通过 Wi-Fi 控制的履带式“间谍坦克”,可将视频流传输到旧版 iOS 应用程序上。虽然该应用程序早已失效,但其底盘却是极佳的捐赠硬件:坚固的橡胶履带、两个齿轮直流电机,以及一个宽敞的外壳,内含电池仓。本项目拆下原始控制板,用 ESP32 DevKit V1 替代核心处理器,通过 DRV8833 双 H 桥驱动原始电机,并借助 Bluepad32 库件,利用 Xbox/PS4/PS5 的 BLE 游戏手柄进行整体操控。
工具(工具小部件)
•焊锡枪
•万用表
•USB数据线(用于刷写ESP32)
应用程序和平台
•PlatformIO(VS Code)
•Bluepad32 库
最终效果是:街机风格的驾驶体验,一个手柄控制油门,另一个控制方向盘,具备平滑的加速曲线和断开保护功能。
工作原理:动力
6个AA镍氢电池组可提供约7.2V电压,该电压分为两种方式:
•直接连接到DRV8833的VCC引脚。在该芯片中,电机电源和逻辑电源使用同一根电源线(额定电压2.7至10.8V),因此电池电压可直接供给H桥电路。
•通过MP1584降压转换器,将电压降至5V,并输入到ESP32的VIN引脚。
电池正极线上的一根单刀开关会一次性关闭所有设备。ESP32 的地线来自降压转换器的输出(OUT-),而不是直接来自电池。由于降压电路未隔离,该输出地与电池负极和 DRV8833 的地共用一个节点,因此所有设备最终都连接在同一个公共地线上,而逻辑信号需要有实际意义。
值得一提的是:DRV8833 有一个睡眠/使能引脚。许多开发板上会通过内置跳线自动将其保持开启状态,但在此使用的开发板上,该引脚处于低电平(即休眠),H桥电路在未连接到 ESP32 的 3.3V 输出前,会忽略所有指令。如果您的电机在代码看起来完全正确的情况下仍然无法工作,请先检查使能引脚。
工作原理:控制信号
四个ESP32 GPIO引脚驱动DRV8833的输入:
•GPIO 14 为 IN1(左电机 A)
•GPIO 27 为 IN2(左电机 B)
•GPIO 26 为 IN3(右侧电机 A)
•GPIO 25 为 IN4(右电机 B)
这四个都支持PWM。一个无害的小问题:在ESP32启动时,GPIO 14会短暂发出一个PWM脉冲,因此在固件接管前,电源开启时左侧轨道会轻微震动一次。如果影响到您,请将IN1移至一个启动时无干扰的引脚(如GPIO 13),或添加一个下拉电阻。电机输出端(OUT1至OUT4)直接连接到两个电机;如果轨道运行方向错误,只需交换该电机的两根输出线即可。
工作原理:固件
固件使用 Bluepad32,它负责 BLE 游戏手柄配对,并提供一个简洁的 API 用于读取摇杆轴。控制方案采用街机风格的混合方式:
•左摇杆(Y轴)用于油门控制(前进/后退)
•右摇杆(X轴)用于转向(左转/右转)
这些速度按每条轨迹分别组合:左侧 = 加速 + 转向,右侧 = 加速 - 转向。仅按加速键时车辆直线行驶;仅按转向键时车辆原地打转。
一些让驾驶体验更佳的小细节:
•通过ESP32的硬件LEDC外设以20 kHz频率进行PWM速度控制(频率高于人耳可听范围,因此电机不会发出嗡鸣声)。
•约10%的摇杆死区,静止时摇杆输出为零,无抖动或卡滞。
•限速器可限制电机指令变化的速率,平滑加速过程,保护齿轮箱。
•断连保护机制:如果游戏手柄丢失了BLE连接,两个电机将立即停止运行。
驾驶员采用慢衰减(“驱动/制动”)PWM,相比快衰减能提供更高的扭矩输出。这意味着动力更强劲、最高时速更高,但代价是电机在松开操纵杆时运行温度略高,制动时也稍有延迟。
构建步骤
•更换原始电路板。拆下旧的控制PCB,同时保留电机和电池仓。
•先将降压转换器设置为5.0V。从电池为MP1584供电,并调整其电位器,使万用表显示输出为5.0V。在连接ESP32之前完成此操作,否则可能会导致电压过高。
•通过开关将电池电源连接至DRV8833的VCC和降压输入端。将降压输出正极(5V)连接至ESP32的VIN,降压输出负极(GND)连接至ESP32的GND。将电池负极、降压输入地和DRV8833的GND连接在一起,使所有部分共用一个公共地。
•线缆信号:ESP32 GPIO 14/27/26/25 连至 DRV8833 的 IN1 至 IN4,电机端子连接至 OUT1 至 OUT4。
•刷写固件(使用 PlatformIO、Arduino 框架,依赖 Bluepad32)。
•配对您的游戏手柄。在 Xbox One 上,按住配对按钮,直到指示灯快速闪烁;Bluepad32 将自动识别并连接。
•测试并调整。如果音轨播放反向,请交换其输出线缆。根据个人喜好调整死区和斜坡值。
本文编译自hackster.io





