Project tutorial
PlayStation One Analog Sticks With Arduino

PlayStation One Analog Sticks With Arduino

Here I show how to take apart an old PlayStation analog stick, show what it's comprised of, and how to make it work with an Arduino!

  • 3,931 views
  • 0 comments
  • 12 respects

Components and supplies

11114 01a
SparkFun Arduino Pro Mini 328 - 3.3V/8MHz
Note: Any Arduino will do — I just love the Pro Mini!
×1
09873 01a
SparkFun FTDI Basic Breakout - 3.3V
Necessary if you're using the Pro Mini or something that could use the FTDI serial.
×1
Adafruit industries ada260 image 90px
USB-A to Mini-USB Cable
Necessary if you're using the Pro Mini or something that could use the FTDI serial.
×1
13032 01
SparkFun Breadboard Power Supply Stick - 5V/3.3V
If you're using the Pro Mini or similar, any Breadboard power supply will do so long as you can get 3.3V out of it.
×1
11026 02
Jumper wires (generic)
×13

Necessary tools and machines

09507 01
Soldering iron (generic)

Apps and online services

About this project

Background

Lately I've played with the idea of recycling old junk to use as components. If you have old stuff you have no use for any more, you can easily take them apart and find some stuff that could become useful in projects! What's more, it's a cheap solution to get parts for your projects!

Reuse Joystick

One thing I've wanted was a joystick, but I noticed I had a PlayStation One Controller lying around, so it got me thinking — why not take it apart and salvage parts from it, and use the analog sticks for a joystick or something similar? As you read through this, you'll find my quest proved to be quite fruitful!

First

The first thing you need to do is take apart the controller. It's held together (quite tightly!) by 7 screws. Using a small screwdriver can take all the screw outs, but should cover a lot of resistance and can't get the screw out, drill into the screw.

After this, the controller should easily come apart, and you'll uncover a treasure chest of parts!

Parts Removal

There's controller buttons, boards, motors and more! One thing I suggest you do is cut the wires in the main cable, and then the wires connecting to the main board. This board is connected to the analog sticks and the rumble motors. We'll focus on the analog sticks, but if you want to get the motors, you can do that with the exact same method we're using for the sticks — desoldering!

Desolder

Desoldering the sticks is very easy, all you need is a soldering iron, and a solder sucker. If you prefer braiding for desoldering, that works too!

Desolder the pins by pressing the soldering iron against the solder. It will then melt, and take the solder off. As I'm using a solder sucker, the solder just pulls right off! Repeat for all the other pins, and be sure to clean your iron's tip every now and again to prevent it getting black marks.

When all the solder is off the pins, take the stick off the board. It will take some fiddling but you'll eventually get it off, then you've got an analog stick!

Close-Up of Joystick

Let's look closer at the stick for a minute: notice it is actually comprised of three components — two potentiometers and a button! So we have three components we can interface on our robot. The potentiometers are the sticks movement, while pressing the stick will press the button attached to the stick.

Challenge and Solution

Only one problem with the stick though — the pin legs are too short! So, the next thing to do is solder 8 male heads to the stick. 6 are for the potentiometers, and the remaining two are for the button.

Just apply a bit of solder onto the pins so they stick. Don't be afraid to tinker the solder a bit to make sure the pins are firmly held together. As you can see, I obviously went through a lot of trial and error to get it right!

Secure

After your pins are soldered, be sure to cover them so they're kept in place. You can use a heat shrink, or electrical tape. Here, I just used insulation tape to keep them together.

Final Steps

Now that we've got our analog stick ready, all we need to do now is connect it to the Arduino! I've provided a schematic in this post so you can connect it up, it's very easy to do and shouldn't require a lot of effort.

The last thing to do is to test the stick with a script, to make sure our component is okay and works. Considering we have three components on the stick, we need to test the two potentiometers and the button to make sure they're working okay. I've attached a script you can use in to test it out!

In the circuit, I've connected the analog stick's potentiometers to two analog pins, and the button to act as a pullup to turn on an LED. That's all that needs to be connected, so now we can use the code.

Be aware that in my circuit, I've used the Arduino Pro Mini. If you don't have one, don't panic! Just use any Arduino, I'm just a fan of the Pro Mini. ;-)

Test the Code

With the code provided in this project, we can then try out the potentiometers via Serial, and make the LED turn on if the button is pressed on the analog stick. Our stick should work nice and fine, and thus we have a new component in our arsenal!

From start to finish, we've taken an old piece of tech, taken it apart, and found a brand new use for it. Hopefully this will spur you to re-use more old junk tech you find, and use it for your projects!

If you enjoyed this post, be sure to follow me on Twitter to stay up to date, and if you want to see more content like this, feel free to pledge to my Patreon or send me a donation by PayPal. Every penny is helpful and helps me keep making stuff!

Have fun!

Code

PlayStation One Analog Stick TestC/C++
To use this, simply paste it into the Arduino IDE and connect the pins accordingly. The potentiometers can be finicky, but they return values depending if the value has changed from the last value, and there's a slight delay to the loop to prevent the values from changing the serial at the slightest touch.
/**
 *
 * PlayStation One Analog Stick Test file
 * Author: @iainiscreative
 *
 * This is a program to check if the analog stick is working okay.
 * The analog stick has two potentiometers and a button.
 * This program checks the values of the potentiometers and prints it to serial,
 * while an LED is also placed to test the button.
 *
 * This code is open source for you to use and even modify.
 *
 */

// Store each pin in a variable
int BUTTON = 7;
int LED = 9;
char POTENTIOMETER_X = "A0";
char POTENTIOMETER_Y = "A1";

// Set last values for each potentiometer
int lastValueX = 0;
int lastValueY = 0;

// Begin Setup
void setup() {
  Serial.begin(9600);
  // Set the button to a input pullup
  // NOTE: since the button is a pullup, the controls are inversed
  pinMode(BUTTON, INPUT_PULLUP);
  // Set the LED in the circuit as an output for testing the button
  pinMode(LED, OUTPUT);
}

// Begin Loop
void loop() {
  // Add a tiny delay to the loop
  delay(100);
  // Store values of each input
  int buttonValue = digitalRead(BUTTON);

  // Read each Potentiometer's value and store in a variable
  int sensorValueX = analogRead(POTENTIOMETER_X) / 10.2;
  int sensorValueY = analogRead(POTENTIOMETER_Y) / 10.2;

  /**
   *
   * If the value's of each potentionmeter do not match their respective last
   * value, update the values and update to serial.
   *
   */

  if(sensorValueX != lastValueX) {
    Serial.print("Potentiometer X:");
    Serial.println(sensorValueX);
    lastValueX = sensorValueX;
  }

  if(sensorValueY != lastValueY) {
    Serial.print("Potentiometer Y:");
    Serial.println(sensorValueY);
    lastValueY = sensorValueY;
    // Apply a slight delay to the loop
  }

  /**
   *
   * Button Test
   *
   * Since the button acts as a pullup, its controls are inversed.
   * Therefore, when it's pressed it will give a LOW value.
   * Should there be a low value, turn the LED on.
   * Otherwise, keep the LED off.
   *
   */
  if(buttonValue == LOW) {
    digitalWrite(LED, HIGH);
  } else {
    digitalWrite(LED, LOW);
  }

}

Schematics

PlayStation One Analog Stick Circuit Diagram
The components shown (button, potentiometers) are representing the analog stick's parts. Connect them to the Arduino accordingly.

Also, you don't need a pro mini to use this! I'm just a big fan of it!
Psone analog circuit diagram fyzbtu8ndk

Comments

Similar projects you might like

Controlling a Robot with a PlayStation Controller

Project tutorial by Andrew R Gross and Jonathan Gross

  • 2,835 views
  • 0 comments
  • 7 respects

Analog Clock with LED Matrix and Arduino

Project tutorial by LAGSILVA

  • 12,241 views
  • 8 comments
  • 39 respects

An Isolated Analog Input for Arduino

Project tutorial by Giovanni Carrera

  • 5,576 views
  • 10 comments
  • 4 respects

FlightGear Analog Trim Tab Wheel

Project tutorial by dancili

  • 1,149 views
  • 2 comments
  • 6 respects

Arduino Apple Watch

Project tutorial by Karlstrom

  • 17,158 views
  • 3 comments
  • 65 respects

Arduino 4WD RC Car

Project tutorial by Andriy Baranov

  • 13,135 views
  • 3 comments
  • 43 respects
Add projectSign up / Login