WiDC:Wi-Fi FPV 机器人 - 远程控制与实时视频传输
项目概述
本教程将指导你构建一款低成本的 Wi-Fi 遥控 FPV(第一人称视角)机器人。该机器人可通过普通浏览器进行控制,并利用安卓智能手机实现实时视频和音频传输。项目采用 Arduino Uno 和 ESP8266 模块组合,配合 H 桥驱动两个直流电机,适合初学者和进阶爱好者。
所需组件
- Arduino Uno × 1
- ESP8266 ESP-01 模块 × 1
- Arduino Proto Shield 或面包板 × 1
- 带轮直流减速电机 × 2
- H 桥驱动模块(如 L9110)× 1
- 万向轮 × 1
- 2mm 亚克力板(用于机身)
- M2、M3 螺丝螺母若干
- 通用手机支架 × 1
- 5V 移动电源 × 1
- 跳线若干
- 1kΩ 电阻 × 2、10kΩ 电阻 × 1
所需工具
- 手锯(切割亚克力)
- 螺丝刀
- 尺子
- 美工刀
- 电钻
- 砂纸
- 电烙铁
- 电脑(用于编译上传代码)
软件与在线服务
- Arduino IDE
- Autodesk Fusion 360(用于 3D 建模)
- 安卓应用:IP Webcam(视频/音频流)
机械结构设计与制作
3D 建模
使用 Fusion 360 设计机身,主要由底板、两块侧板和 L 型支架组成。从 GrabCAD 下载关键元件模型(Arduino Uno、减速电机、H 桥、移动电源、手机支架),确定布局后生成 2D 图纸。
亚克力加工
- 将 2D 图纸打印在胶带纸上,贴在亚克力板上作为切割掩膜。
- 用美工刀沿直线划槽,夹紧后折断;或用手锯切割。
- 用砂纸打磨边缘。
- 按图纸钻孔(可用电钻或美工刀手动钻孔)。
- 用螺丝螺母固定电机、支架、电子元件和手机夹。
电子电路组装
原理图说明
- Arduino Uno 通过 SoftwareSerial(D2/D3)与 ESP8266 通信。
- H 桥驱动两路电机:Motor1 接 D5/D6,Motor2 接 D9/D10(PWM 控制速度)。
- ESP8266 供电 3.3V,通过分压电阻(1k/2k)接 Arduino TX。
- 移动电源经 USB 口给 Arduino 供电(5V)。
可使用 Proto Shield 或面包板搭建电路,注意 ESP-01 非面包板友好,需用跳线连接。
Arduino 代码详解
核心逻辑
// 关键设置
SoftwareSerial esp8266(3, 2); // RX=3, TX=2
#define DEBUG true
const int motor1Pin1 = 5, motor1Pin2 = 6;
const int motor2Pin1 = 9, motor2Pin2 = 10;
int motorSpeed = 150; // PWM 速度 (0-255)
void setup() {
// 初始化引脚、串口、ESP8266 AT 指令连网、启动 Web Server (端口 80)
}
void loop() {
// 解析 HTTP 请求中的命令 cm1~cm5
// cm1: 前进, cm2: 后退, cm3: 右转, cm4: 左转, cm5: 停止
// 根据 state 设置电机 PWM
}
代码使用 AT 指令配置 ESP8266 为 Station 模式,连接路由器,开启多连接 TCP Server。主循环监听 "+IPD," 数据包,提取 "?cmX " 格式命令,更新电机状态。PWM 调速范围 3-5V,适配 5V 供电。
Web 控制界面
界面结构
- 视频/音频区:嵌入 IP Webcam 的 MJPEG 流 (port 8080/video) 和 Opus 音频 (port 8080/audio.opus),可输入服务器 IP。
- 控制区:输入 ESP8266 IP,键盘方向键控制(按下发送 cm1-cm4,释放发送 cm5),含防抖锁存机制。
JavaScript 关键点
// 键盘事件处理
var latch = false;
document.onkeydown = function(e) {
if (latch) return;
var cmd = {'38':'cm1', '40':'cm2', '37':'cm3', '39':'cm4'}[e.keyCode];
if (cmd) { sendCmd(cmd); latch = true; }
};
document.onkeyup = function(e) {
if ([37,38,39,40].includes(e.keyCode)) {
setTimeout(function(){ sendCmd('cm5'); latch = false; }, 200);
}
};
function sendCmd(c) {
$.get("https://" + ip + ":80", {[c]: 1000});
}
使用步骤
- 上传 Arduino 代码,串口监视器查看 ESP8266 获得的 IP 地址。
- 断开 USB,接入移动电源,等待联网。
- 手机运行 IP Webcam,记下其 IP:8080。
- 电脑用 Firefox 打开
index.html,分别填入 ESP IP 和手机 IP,点击 Load。 - 按住方向键即可控制机器人移动,实时观看画面。
已知问题与改进建议
- 开环控制导致难以直线行驶,可加编码器闭环。
- ESP8266 偶尔丢包导致“停止指令丢失”,建议改用心跳/确认机制或 WebSocket。
- 可升级为 NodeMCU/ESP32 单芯片方案,或用树莓派替代手机实现一体化。
相关资源下载
- Arduino 代码:
WiDC.ino - Web 界面:
interface.rar - 机身图纸:
base.pdf,base.svg - 原理图:
wiDC_Esquemático.pdf,wiDC.fzz(Fritzing) - Joy Robot 相关教程:LED 矩阵控制、舵机 Wi-Fi 控制
制造工艺
- 蓝牙控制树莓派机器人:语音反馈功能构建指南
- Arduino 数字骰子:LCD 显示随机点数的电子骰子
- DIY Arduino USB 游戏手柄 — 自制高性能游戏手柄
- Arduino UNO 自制循迹小车:从零构建自主巡线机器人
- Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
- MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
- Pixel Chaser:Arduino Nano 单键 NeoPixel 追逐小游戏
- Arduino 简易排斥式磁悬浮:电路与 DIY 指南
- PiBot:Arduino驱动的88键钢琴机器人,精准演奏MIDI乐曲
- 自主家庭助理机器人 O'nine - ROS + Alexa 语音控制 + 机械臂 + 麦克纳姆轮全向移动
- Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏
- DIY LED 轮盘赌游戏机 —— Arduino Nano 打造单人桌面街机