Introduction: PS1 Controller Joysticks With Arduino

Idea: To take one of my old Playstation 1 controllers and extract the dual thumbstick setup so that it can be easily used in a microcontroller project (in my case: with the Arduino) without extra libraries or drivers that you would need if you want to use the entire controller.

Please let me know what you think or if you have questions/criticism for me! I'm always looking to learn new things.

Required materials:
              ~ Playstation 1 controller
              ~ Soldering Iron
              ~ Solder
              ~ Knife
              ~ Wire strippers/cutters
              ~ Electrical Tape
              ~ Small Phillips head screwdriver
              ~ Two mid-value resistors (for pushbutton cicuits)
              ~ Third Hand (not absolutely necessary but makes soldering small things much much easier)
              ~ 22 gauge wire

Video Demo:


Demo code (copy and paste the following text into the Arduino IDE):

const byte leftClick = 2; //assign the pins for the buttons
const byte rightClick = 3;
const byte leftVert = A2;
//assign the pins for the pots
const byte leftHor = A3;
const byte rightVert = A0;
const byte rightHor = A1;

int delayTime = 50;
//so the serial output is more readable

void setup(){

pinMode(leftClick, INPUT);
//set button pins to input
pinMode(rightClick, INPUT);

Serial.begin(9600);
//lets arduino send text to computer
}

void loop(){
//output formatted as leftHorizontal, leftVertical, leftButton, rightButton, rightHorizontal, rightVertical
Serial.print(analogRead(leftHor));
Serial.print(", ");
Serial.print(analogRead(leftVert));

Serial.print(" ");
Serial.print(digitalRead(leftClick));
Serial.print(" ");
Serial.print(digitalRead(rightClick));
Serial.print(" ");

Serial.print(analogRead(rightHor));
Serial.print(", ");
Serial.println(analogRead(rightVert));

delay(delayTime);
}

 

Step 1: [Figuratively] Rip It Apart

The controller is really easy to take apart. First unscrew the 7 Phillips head screws on the outside of the controller. When you open it up, you'll see one more screw on the right of a clear plastic piece (the plastic piece just reflects a small LED that's mounted on the main PCB) which is necessary to screw everything back together (if you're not planning on using the controller case again, you can just toss it). Unscrew the last screw and cut the white wire ribbon holding the thumbsticks to the main PCB (cut it so that you have a lot of wire ribbon on your end--it makes the soldering much easier).

I could have desoldered the joysticks and buttons and used them individually, but I wanted them together as a whole since it's a good way to have really compact dual joysticks for a future project (most likely a wireless robot).


Some things to note: there are two different sized rumble motors you can salvage as well as the L1 and R1 shoulder buttons which are in their own casing. I took the motors but tossed the shoulder buttons because I don't plan on ever using them, but someone might find a use.
I haven't tried finding the specs for the motors yet, but I assume it must be around 5v. If anyone knows, let me know.

Step 2: Analyzing the Wiring


Since I want to keep all of the parts on the PCB, I needed to know which wires on the ribbon go where. Normally the wire ribbon is glued down against the PCB to keep it flat, but I needed to see where everything was connected to so I peeled it back enough to see the connections. As you can see in the picture, the wire is numbered one through 8.

Since it's a bit hard to see exactly where each wire is connected, a trick I used was to hold the PCB up to the light which makes seeing the connections a million times easier.

I started with some easy ones to find out, such as the push buttons. As most tinkerers know, basic push buttons already have their top two legs and bottom two legs connected, respectively (in this case, A & C are connected and B & D are connected, but A&C are not connected to A&D until the button is pressed).

For these buttons, they each have a leg that connects ONLY to a wire on the ribbon, so that means they must each be the 'data' wire for each button. In each case, the 'data' leg is either D or B, so that means A&C for both buttons can be connected to Vcc . If you follow the path of Vcc, you see that it connects to all of the Pin1's for all four potentiometers.

Now you know Vcc is Pin1 for all of the potentiometers, so Pin3 must be ground and Pin2 must be for data . Sure enough, each Pin1 corresponds to a unique wire, whereas all Pin3's connect to one another and share a common wire on the ribbon.

Now that we've accounted for all of the wires (and of course having written down what number wire on the ribbon they correspond to...), we can create the following table to help ourselves get organized:

1 - Pin 3 on all four pots                                                                       (GND)
2 - Pin B of left thumbstick (the only top pin of left thumbstick)            (button circuit/digital pin1)
3 - Pin 1 on all four pots, pins A & C (bottom pins) on both buttons     (Vcc - 5v)
4 - Pin D of right thumbstick (the only top pin of right thumbstick)        (button circuit/to digital pin2)
5 - Pin 2 of vertical movement for right thumbstick                               (analog pin1)
6 - Pin 2 of horizontal movement for right thumbstick                           (analog pin2)
7 - Pin 2 of horizontal movement for left thumbstick                             (analog pin3)
8 - Pin 2 of vertical movement for left thumbstick                                 (analog pin4)

Step 3: Splitting and Stripping the Wire Ribbon (aka Solder Prep)


The wires connected the joysticks to the main PCB were surface-mounted, which for me translates to "very precise and tedious soldering".

The first thing to do is to get your trusty knife (mine is the Leatherman Surge which is completely overkill for this task) and a cutting board (or cardboard etc) and get the wire ribbon nice and flat.

Very carefully cut in between the bulges in the wire ribbon starting from about half-way down the ribbon's length. Each bulge is a tiny wire and if you cut one, you'll have much less ribbon to work with.

Once you have the wires all split, now you can take your wire strippers and (again) VERY carefully strip some plastic off of the wires. Since the wires are tiny, the way I did it was to use the wire cutters to put a little pressure on the wire's insulation and pulled. Since the insulation is pretty weaksauce, it should slide off. This method is somewhat dangerous because a little too much pressure will make you cut straight through the wire. SO. Again. BE VERY VERY VERY CAREFUL on this step.

Step 4: Finally! Time to Solder!


Now you can grab your trusty third hand and soldering iron and get to work. Try and line up the wire you're soldering and the wire from the ribbon parallel and as close to one another as you can get.

I used 22-gauge solid-core wire so that I can hook the joysticks up to a breadboard once I finished, but if you want you can go straight for the controller's original wire since it also has 8 wires and some good length. I'm planning on going wireless whenever I decide to put the joysticks to use so I'm going to save the controller wire for another time.

Also, be careful to not accidentally solder two adjacent wires together. It goes without saying but I will anyway: that would be bad.

Step 5: Insulate, Cover and Demo!

To prevent any shorts that this would immediately cause if wired up, I used electrical tape to insulate each soldered connection, and then wrapped the entire area with another generous helping of tape to give it more rigidity and durability. I also reglued the white wire ribbon back down to the PCB to protect the surface-mounted joints from being ripped out.

To connect the wires to the Arduino, connect Vcc and GND like anything else, connect all four of the thumbstick potentiometer wires to the analog pins of the Arduino, and connect each button wire to a simple button circuit (eg I have an orange wire from the controller, so I connect to a junction with a 9.5 kOhm resistor to ground, and another wire from the junction going to a digital pin of the Arduino).

If you need any help setting up the circuit, feel free to message me and I'll be glad to make a circuit diagram or set up my breadboard neatly so that it's easier to see what's going on.

Here's the demo video again for anyone who skipped it in the intro:


PS: leave some feedback! I'd love to hear from anyone!

Comments

author
makeosaurus (author)2016-03-14

As you have given the pin layout would you be able to take them out and use them in the same way? Is the circuit board actually needed?

author
vasu0712 (author)2016-02-18

Hey buddy i want to use this analog console to control my robo car using arduino...so i want the code for this...

author
yash manian (author)2012-08-12

can i do the same with a PS2 dualshock 2 controller??

author
biomech75 (author)2012-04-19

It an awesome project but the connections are not clear for:

analog board connections
connection from analog to Arduino board

;)

author
Emiliano Valencia (author)2011-10-31

Hi, just a little tip, did you know you can DIGITALLY interface the ps1 controller to your arduino?
it's really easy, there's even a library for it, and you need less pins and have info abaut ALL the buttons.
Google it

author
Finnio (author)Emiliano Valencia2012-01-21

The idea was to reverse engineer just the joysticks and their PCB so that they can be used in any project and on any platform without the need for special libraries.

It's only an arbitrary coincidence that I used the Arduino platform to demonstrate the results of figuring out which wires are connected to each component. I could have just as easily used a PIC microcontroller, or maybe created some sort of interactive LED art display in a purely analog circuit.

Even something as simple as two analog joysticks have infinite potential project implementations :)

author
TobaTobias (author)2011-11-11

Great projects! Very nicely done. I am going to give it a shot.
I would love to see what projects you do with the joysticks!

author
axeman911 (author)2011-06-17

hi, my controller is the H late version so my wires are a bit different and there are a total of 16 pins instead of 8 so should i just put two pins together to get a total of a wires?

author
PyroMonger (author)2011-06-13

This is the sort of project ive been looking for, for a while. Do u think this could be improvised into an RC project via arduino ethernet shield or somewhere along those lines?
Great Project!

author
Finnio (author)PyroMonger2011-06-13

I would think so. I don't personally have experience with making the Arduino wireless, but it's definitely a topic of interest and something I'm planning on doing in the future so that I can finally put some of my motors to use in a fun way.

Part of why I only took the joysticks from the controller is so that they can be interfaced with anything that any other potentiometers could since it's just giving you analog signals in the end.

author
jrossetti (author)2011-06-10

Awesome work!

author
Finnio (author)jrossetti2011-06-10

Thanks! It was a little side project so that I could clear my mind before getting back to work on my current long-term project.

About This Instructable

43,533views

88favorites

License:

More by Finnio:PS1 Controller Joysticks with Arduino
Add instructable to: