亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Firmata + Xbox 手柄无线遥控 Arduino 小车:UWP 应用桥接方案

项目概述

利用标准 Firmata 固件让 Arduino 成为 I/O 从机,Windows 10 UWP 应用通过蓝牙(HC-06/HC-05)与 Arduino 通信,同时读取 Xbox One 手柄(含无线适配器)输入,将双摇杆映射为差速驱动 PWM 与方向信号,实现低延迟、类坦克操控的遥控小车。无需在 Arduino 端编写复杂控制逻辑,所有运动学计算在 PC 端完成。

硬件清单

模块数量备注
Arduino Uno1运行 StandardFirmata
L298N 双 H 桥驱动板1驱动两路直流减速电机
HC-06/HC-05 蓝牙模块1串口透传,波特率 9600
Xbox One 手柄 + Windows 无线适配器1连接笔记本/平板
底盘套件(底板、轮子、电机、电池盒)1自备或购买成套智能车底盘
双电源:9V 供驱动板,6×AA 供 Arduino各 1共地,避免舵机/电机干扰单片机

电机驱动接线(L298N)

L298N 引脚          Arduino 引脚   说明
ENA (PWM)    →     D10 (~)        左电机速度
IN1          →     D9             左电机方向 A
IN2          →     D8             左电机方向 B
IN3          →     D7             右电机方向 A
IN4          →     D6             右电机方向 B
ENB (PWM)    →     D5 (~)         右电机速度
电机输出端               接两路直流电机
电源输入 +9V / GND       接 9V 电池盒
5V 输出端                悬空(Uno 另供电)
共地                Uno GND 与 9V 电池负极连接

软件架构

1. Arduino 端:StandardFirmata

2. PC 端:UWP 应用 (C# + XAML)

核心流程:

  1. 启动 → 扫描配对的 HC-06 → 建立 `BluetoothSerial` 连接
  2. 初始化 `UwpFirmata` 与 `RemoteDevice`,等待 `DeviceReady` 事件
  3. 注册 `Gamepad.GamepadAdded/Removed` 事件,获取 `Gamepad` 对象
  4. 点击“Controller”按钮进入主循环(`Task.Delay(3ms)` 轮询)
  5. 读取 `LeftThumbstickY` 与 `RightThumbstickY`(-1.0 ~ 1.0)
  6. 死区 `_ActionPoint = 0.15`:绝对值小于此视为停止
  7. 映射 PWM:`255 * |Y| * _SpeedLimit(0.75)`,方向由正负决定 IN1/IN2 或 IN3/IN4 高低电平
  8. 调用 `ArduinoAnalogWrite(PWM引脚, 值)` 与 `ArduinoDigitalWrite(方向引脚, 电平)`,内部去重避免总线拥塞

关键代码片段(C#)

// 死区与映射
if (Math.Abs(Y) < 0.15) { StopMotor(side); }
else if (Y >= 0.15) { SetDirForward(side); pwm = 255 * Y * 0.75; }
else { SetDirBackward(side); pwm = 255 * (-Y) * 0.75; }

// 去重写入
void ArduinoAnalogWrite(byte pin, ushort val) {
  if (!_CurrentSpeedValues.ContainsKey(pin) || _CurrentSpeedValues[pin] != val) {
    _CurrentSpeedValues[pin] = val;
    _arduino.analogWrite(pin, val);  // Firmata 中 PWM 即 analogWrite
  }
}

调试验证步骤

  1. 不写代码先测:安装 Microsoft Store 中 “Windows Remote Arduino Experience” App,连接蓝牙,在 PWM 页给 D5 写 128,在 Digital 页拉高 D6 → 单电机转动验证接线。
  2. 双电机同步测试:D5/D10 同值,D6/D9、D7/D8 方向对应。
  3. 编译部署 UWP 应用,连接手柄,实地测试转向与速度手感。

注意事项与优化

  • 双电源共地是电机转动的前提,否则驱动板逻辑电平无参考。
  • PWM 引脚必须带 `~` 标记(Uno 上 D3,5,6,9,10,11)。
  • 蓝牙模块质量参差不齐,建议降低波特率至 9600 甚至 4800。
  • Firmata 吞吐有限,高频 PWM 更新可能导致延迟;如需更低延迟,可改用自定义二进制协议 + 硬件串口。
  • 安全:移动平台须加装警示灯、限位开关或超声波避障。

资源链接

  • 完整 UWP 项目源码(XAML + C#):见原文代码区
  • Firmata 协议说明:firmata/protocol
  • Windows.Devices.Gpio/Pwm/I2c/Spi 命名空间文档:Microsoft Docs

制造工艺

  1. 基于 Arduino 与 Python 的可靠 RFID 考勤系统
  2. 基于 Arduino、1Sheeld 与红外控制的万能安卓遥控器
  3. Arduino 与智能手机打造智能电压表——简单易做的 DIY 项目
  4. 基于 Arduino MKR1000 与 ThingSpeak 的远程 IoT 机械臂控制系统
  5. 基于Arduino UNO的精准频率与占空比测量
  6. Arduino 声纳实时测距与 Processing 可视化
  7. Bolt IoT + Arduino UNO 实现 6 路 LED 无级调光
  8. DIY 智能 Arduino 机械臂:主从控制与动作记忆教程
  9. 通过 Arduino IoT Cloud 用 Alexa 控制电视:分步指南
  10. 使用 Arduino Nano 和 RDA8057M 制作紧凑型 FM 收音机
  11. 1Sheeld + Arduino 手机无线控制家庭灯光系统
  12. 智能水泄漏检测与电磁阀控制系统