Hacked an old RC car with Xbox 360 controller

Post here about your Arduino projects, get help - for Adafruit customers!

Moderators: adafruit_support_bill, adafruit

Please be positive and constructive with your questions and comments.
Locked
User avatar
kottok.motors
 
Posts: 4
Joined: Sat Jan 11, 2014 11:44 pm

Hacked an old RC car with Xbox 360 controller

Post by kottok.motors »

Hi!

I was trying to decide what to do, as a 'productive' project with my arduino this weekend, when I stumbled upon my old wired xbox 360 controller, and remembered my RC car that no longer functioned.

Goals in mind, here I go!

RC car stripped down first
Image


Stripped down the controller next
Image
Image

Wired the basic functions of the controller- RB and LB momentary switches, and X & Y axis trimpots from left and right analog joysticks.
Decided to do it this way, reading up on proprietary USB blah blah blah Microsoft junk made using the existing serial communication dang near impossible (or at least way too time consuming for a 'fun' project)

Removed PCB circuit tracing with dremel
Image

Used Cat5 (with salvaged boot from controller USB wire) for signal transfer.
Image

Controller all wired up
Image

Wired cat5 to the RC car functions- 1 pair each for drive motor, steering motor, 'horn', and headlamps.
The arduino was fairly easy to wire up. I used a VCR motor drive chip for the forward and reverse action, and a DPDT relay for left and right steering.
12V 3A external power supply for the motor driver.
Image
Image


And the final outcome:

http://www.youtube.com/watch?v=PEnNImnBWwQ




Still needs some fine-tuning as far as the left/right steering adjustment, and i need to figure out a better horn sound, hahaha.

And here is the simple code for you all to enjoy... or whatever...

Code: Select all

int throttleInPin = A3;
int turnInPin = A2;
int hornInPin = A1;
int lightInPin = A0;

int throttleForwardPin = 3;
int throttleReversePin = 9;
int turnDirectionPin = 5;
int turnAmountPin = 10;
int hornOutPin = 7;
int lightOutPin = 4;

int throttle = 0;
int reverseThrottle = 0;
int turn = 0;
int reverseTurn = 0;


 
void setup() {                

  pinMode(throttleForwardPin, OUTPUT);
  pinMode(throttleReversePin, OUTPUT);
  pinMode(turnDirectionPin, OUTPUT);
  pinMode(turnAmountPin, OUTPUT);
  pinMode(lightOutPin, OUTPUT);
  
}

 
void loop() {
  
  // ** HORN **
  if (analogRead(hornInPin) >= 1001)
  {
     tone(hornOutPin, 700);
  }
  if (analogRead(hornInPin) <= 1000)
  {
    noTone(hornOutPin);
  }
  
  
  // ** HEADLIGHTS **
  if (analogRead(lightInPin) >= 1001)
  {
    digitalWrite(lightOutPin, HIGH);
  }
  if (analogRead(lightInPin) <= 1000)
  {
    digitalWrite(lightOutPin, LOW);
  }  
  
  
  // ** FORWARD & REVERSE **
  throttle = map (analogRead(throttleInPin), 512, 1024, 1, 255);
  if(throttle >= 50)
  {
    analogWrite(throttleForwardPin, throttle);
  }
  else if(throttle < 50 && throttle > -50)
  {
    throttle = 0;
    analogWrite(throttleForwardPin, throttle);
    analogWrite(throttleReversePin, throttle);
  }
  else if (throttle < -50)
  {
    reverseThrottle = map (throttle, 0, -255, 0, 255);
    analogWrite(throttleReversePin, reverseThrottle);
  }
  
  
  // ** LEFT & RIGHT **
  turn = map (analogRead(turnInPin), 512, 1024, 1, 255);
  if(turn >= 50)
  {
    digitalWrite(turnAmountPin, HIGH);
    digitalWrite(turnDirectionPin, LOW);
  }
  else if(turn < 50 && turn > -50)
  {
    turn = 0;
    digitalWrite(turnAmountPin, LOW);
    digitalWrite(turnDirectionPin, LOW);    
  }
  else if (turn < -50)
  {
    reverseTurn = map (turn, 0, -255, 0, 255);
    digitalWrite(turnDirectionPin, HIGH);
    digitalWrite(turnAmountPin, HIGH);
  }
  
}

User avatar
adafruit_support_bill
 
Posts: 88086
Joined: Sat Feb 07, 2009 10:11 am

Re: Hacked an old RC car with Xbox 360 controller

Post by adafruit_support_bill »

Nice project! Thanks for posting. :D

Locked
Please be positive and constructive with your questions and comments.

Return to “Arduino”