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

废旧遥控车改装:Arduino + USB Host Shield 实现 Xbox 手柄无线控制

所需组件与材料

Arduino UNO ×1
Arduino USB Host Shield ×1
Xbox 360 无线手柄 + 接收器 ×1
L293D 电机驱动芯片(或 SN754410) ×2
7812 / 78S12 稳压器 + 散热片 各×1
拨码开关、电源插头、电池盒(8×1.5V AA) 各×1

项目简介

将一辆老旧遥控怪物卡车的原电子设备拆除,仅保留两个驱动电机。用 Arduino UNO + USB Host Shield 接入 Xbox 360 无线接收器,通过 L293D H 桥驱动电机,实现手柄摇杆控制前进/后退、左右转向,扳机键控制速度,按键实现刹车。项目基于 Kristian Lauszus 的 USB_Host_Shield_2.0 库。

改装步骤

1. 拆车保留电机

拆除原接收板、电池盒、所有线路,仅保留两个直流电机引线。

2. 搭建控制核心

3. 搭建驱动电路(面包板或万能板)

4. 安装电路到车身

将驱动板固定在车身空处,接好电机引线,插上 Xbox 接收器到 USB Host Shield。

5. 核心代码逻辑

完整代码见下方。关键映射:

完整 Arduino 代码

#include <XBOXRECV.h>
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
USB Usb;
XBOXRECV Xbox(&Usb);

#define motorPinOne 5   // PWM
#define motorPinTwo 6   // PWM
#define motor2PinOne 4
#define motor2PinTwo 7
#define BRAKE 2

int pulse = 0;
int forward = 0;
int brake_on = 0;

void setup() {
  TCCR1B = TCCR1B & 0b11111000 | 0x02;  // 调整 PWM 频率
  Serial.begin(115200);
  if (Usb.Init() == -1) {
    Serial.println(F("\r\nOSC did not start"));
    while(1);
  }
  Serial.println(F("\r\nXbox Wireless Receiver Library Started"));
  pinMode(motorPinOne, OUTPUT);
  pinMode(motorPinTwo, OUTPUT);
  pinMode(motor2PinOne, OUTPUT);
  pinMode(motor2PinTwo, OUTPUT);
  pinMode(BRAKE, OUTPUT);
  digitalWrite(BRAKE, LOW);
  motors_stop();
  center();
}

void loop() {
  Usb.Task();
  if (Xbox.XboxReceiverConnected) {
    for (uint8_t i=0; i<4; i++) {
      if (Xbox.getButtonPress(L2, i)) {
        pulse = Xbox.getButtonPress(L2, i);
        forward = 0;
        clockwise();
      }
      if (Xbox.getButtonPress(R2, i)) {
        pulse = Xbox.getButtonPress(R2, i);
        forward = 1;
        counterClockwise();
      }
      // 左摇杆控制转向
      if (abs(Xbox.getAnalogHat(LeftHatX, i)) > 7500) {
        if (Xbox.getAnalogHat(LeftHatX, i) > 26000) turn_right();
        else if (Xbox.getAnalogHat(LeftHatX, i) < -26000) turn_left();
        else center();
      }
      // 按键功能
      if (Xbox.getButtonClick(B, i)) {
        digitalWrite(BRAKE, HIGH);
        brake_on = 1;
        pulse = 100;
        if (forward) clockwise(); else counterClockwise();
      }
      if (Xbox.getButtonClick(Y, i)) motors_stop();
    }
  }
  delay(1);
}

// 电机控制函数:clockwise / counterClockwise / turn_left / turn_right / motors_stop / center
// 详见原文完整代码

库安装

在 Arduino IDE 中安装 USB_Host_Shield_2.0 库(GitHub: felis/USB_Host_Shield_2.0),包含 Xbox 接收器支持。

测试与调试

  1. 上传代码,打开串口监视器(115200)。
  2. 开启手柄,观察“Xbox Wireless Receiver Library Started”。
  3. 操作扳机与摇杆,确认电机响应方向、速度正确。
  4. 若电机抖动或不转,检查供电是否足够、PWM 引脚是否正确、L293D 接线是否可靠。

扩展建议

制造工艺

  1. 蓝牙控制树莓派机器人:语音反馈功能构建指南
  2. 手势控制 RGB 台灯 —— 交互式免手操作照明
  3. 通过树莓派用 Alexa 控制 LED - 简单分步指南
  4. Arduino Mega 驱动 Wii Nunchuk 控制 6 自由度机械臂
  5. Arduino Nano + 摇杆控制双步进电机:Visuino 图形化教程
  6. Arduino Nano 语音控制机器人:蓝牙 + 手机 APP 实现
  7. 智能停车计数系统:Arduino + Processing + PHP 实时车位追踪上云
  8. PiBot:Arduino驱动的88键钢琴机器人,精准演奏MIDI乐曲
  9. Wi-Servo:基于 ESP8266 的 Wi-Fi 网页端舵机远程控制系统
  10. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  11. 自制 Arduino 遥控保时捷赛车:从改装底盘到手机 App 控制全攻略
  12. Arduino 电容式触控开关:一枚硬币点亮 LED 的极简 DIY