Greetings and welcome to my tutorial on creating a fightstick using Arduino.
This project is a fightstick created primarily for use with PC and PlayStation 3 and was made for my Rapid Prototyping course at the University Of West GA. The only guideline for the project was that it had to include a physical element and use an arduino chip.
When thinking about what I would want to make I realized that my current fightstick was to large and heavy to take to conventions where I may or may not want to use it. So I thought I could use an arduino to create a smaller, lightweight fightstick.
Overall I greatly enjoyed the process and learned quite a few things about how basic wiring and electronics work. I hope anyone following this tutorial will also enjoy it and learn from it.
For my stick I decided that I wanted a traditional 8 button layout for the main face buttons. I also wanted a start and select button.
The buttons are easily found here: http://www.focusattack.com/controls/pushbutton/by-...
Impotent notes:
30mm are considered the stranded button size while 24mm are the smaller buttons commonly used as start or select buttons. You will likely want to go with the 30mm size, although I used all 24mm for my project.
Also make sure to pay attention to the connector size. Either .110" or .187" should work fine but you will have to buy different wires based on the connector size. For my project I used .110" exclusively.
One of the most important part of a fightstick is the stick its self. The stick comes in two parts
Something of note that I learned while working on this project is that traditional arcade sticks like the one linked above do not use analog input and instead simply use 4 miro-switches (think buttons being pressed by the stick). these miro-switches tell if the stick is being tilted left, right, down or up.
Next on the shopping list is the arduino that will read your stick and button inputs. For this I used an Arduino Uno (http://www.amazon.com/arduino-org-A000066-Arduino-....) Any model that has 14 inputs and 2 grounds will work but this tutorial will be for an Uno.
Next is wiring for the Arduino. The arduino uno takes a usb B while most any usb you will want to use will use usb A so you will need to wire accordingly. Also for convince you will likely want to be able to access the aduino's usb port indirectly from outside the box.
I recommend one of these two ways to do this:
Mountable B to A feed-through (http://www.focusattack.com/neutrik-nausb-wb-ab-usb...)
Short A to B usb (http://www.focusattack.com/18-inch-male-a-b-usb-2-...)
In my project I went with approach 1 but in the end the only difference will be the size and shape of the hole you will need to make in your box to house the usb port.
While looking at the buttons you may have noticed the 2 pronged plug. This is what will connect to the wires that will connect to the arduino. It is important to know that one is used as the actual input wire, with the other used as a grounding line. Both pongs can do either job so you don't have to worry about which one is which. Also take note the number of grounds on your arduino. The uno only has 3, and one will be used by your joystick, so you will need to daisy chain your grounding wire for at least a majority of your 10 buttons.
This is the list of wires you will need:
Important Note: If your stick does not come with its own wires as the one in my link did you will need to acquire suitable wires for that as well. This includes 4 wires for the 4 micro-switches as well as 1 extra for the grounding wire.
Now that you have all of the electronic components you may find it beneficial to make a prototype of your box so you can see how the project will come together when you are finished. In my project I found a $3 cardboard box that was somewhat sturdy but easy to cut through. While this step is optional I recommend it as it will show you what your working with as well as how you should you should go about making your box (especially if you don't just copy this tutorial)
This next step is to make all of your wires usable. As you may have noticed the ends of the .110" wires are just stubs that will not be able to plug into your arduino. However the m/m jumper wires will plug into your arduino. To solve this problem you will need to splice these wires together.
For this step you will need:
If you have never spliced wires before you may want to do some more research about it but here are the basic steps for this project:
You will need to repeat this process for all 10 buttons' input wires, the daisy chain ground wire, and the joysticks 4 wires + it's ground wire.
Important Note:
You don't need to worry to much about messing up this step if you purchased the links I've provided in this tutorial because not only will you have more wires then you need but also the .110" wires are much longer then they need to be. Because of this if you mess up you can just cut off more wire and try again from step one. The Exception to this are the wires for the joystick and the grounding wire. As such I recommend saving those until you are comfortable with the process.
As for the programming side of things this project is actually fairly simple due to an open source project called UnoJoy. Please visit there Getting started page for a great tutorial on how to start using their code.
Things to note about UnoJoy:
Next you will need to buy/create your final housing for your electronics. There are numerous options for this but below is a guide for my approach.
For my project I was looking for a more portable slant at a fightstick. Because of this I decided to build my box out of composite board with a white board face. This material provides a decent balance of strength and weight. To create the box I had 6 boards and 4 molding pieces cut. Due to a miss-cut and inexperience my boards were 10.5" x 13" x 2", however I would recommend:
What you will need:
The Steps:
After you box has been made you are ready to thread the wires of the buttons through the holes in the top of the top panel. The button should be able to fit snugly in the hole while having no chance of being pushed through.
Secondly stick the joystick from the bottom of the top panel through its hole then use the holes you made for the bolts to hold it in place. Screw in the ball or bat top into the stick then use a Flathead screwdriver to lock the top in using the metal bit at the base of the stick
Next plug in the arduino to your computer. Make sure it has the correct code loaded, and that it is in the Unojoy "joystick" mode. Then plug all of the pins of all of the buttons and the joystick to their appropriate pin hole in the arduino. If your are unsure of the button layout of a fightstick here is the order of buttons read left to right from top left to bottom right
Important Note: My code its mapped so that it will work with X-input control schemes, However the computer will not recognize the controller as a X-input device. In short this means that for PC games the controller will likely have to be remapped. Luckily, as is the case with Ultra Street Fighter IV there is a controller setting suite that will let you remap any button to anything, including menu navigational buttons.
Lastly, screw in the top panel and your ready to play any fighting game on PC or PS3.
Optional: For most other consoles such as Xbox 360, PS4, and Xbox One there are devices that will let you bypass the authentication process allowing you to use any controller (such as the one you just made). One such device is called the Titan One and can be found here. All you will need is an actual controller for said console and a USB cord. Then plug in the Titan One into the console. Plug the real controller into the Titan One and wait for it to read 0. Then unplug the real controller and plug in your new custom made arduino fightstick.