Here we will be taking a look at the GameTrak game controller and modifying it to use with a PC. The first step to to this project is to check out these links and follow the steps to determine if your GameTrak is the easily modified Gen I or the difficultly modified Gen II:
Also look here for more info:
We will be going through a number of steps to circumvent the limitations of the Gen II. There are other options for making use of the original cct board, but I think that they are overly complicated and not very hobbyist friendly, so here goes…
You will need a small crosshead or phillips screwdriver, a soldering iron and the skills that are needed to operate these tools, and a knowledge of things an Arduino hobbyist would know, but do not fear, there’s a whole community of individuals out there to offer assistance and a friendly smile for Arduino.
After going through the steps found in the first link above, you may be faced with this cct board and a sad face will be forming in the general area of your head, but do not despair! You do not need to re-list on eBay or return to sender on Amazon, you need to go buy an Arduino: http://store.arduino.cc/category/11 I have a 100% working example on the Arduino Uno smd edition and I’m working on an Arduino micro at the moment too.
The cables you see above relate to the inputs and outputs from the variable resistors for the left, right, and up/down inputs (I will refer to these as x, y, z). There is also a power supply and ground for each of these variables. You should cut the heads off all of them all and group the reds and blacks separately. These are the 5v supply (red) and ground (black) for each variable resistor. The yellow, orange, and white cables are your analogue variables that control the x, y, and z input, specifically: x, y (orange and white) and z (yellow), this is multiplied by 2 because there are two sides to the GameTrak.
Those of you familiar with Arduino should see a pattern forming. Yup, the 5v and earth connect to the 5v supply and earth terminals on the Arduino, and the analogue outs from the variable resistors should be connected to the A0 – A5 analogue ins. Sounds simple, but might be a little advanced for a total beginner. I suggest that a small pin board is soldered together to assist in plugging in and out of the Arduino terminals. Feel free to hit the Arduino forums about analogue ins/outs and building breadboard/stripboard prototypes. In the picture above you will see that I have also made a little table for the Arduino and routed the USB off to the right. This is beacuse…
I have cut the GameTrak out of its original shell. Here’s where your imagination should go wild. The original black case is dull dull dull and not very nice at all. The major components are the variable resistors, so keep them. The big reveal… a haptic bowl!
There are a few other modifications to the GameTrak that I made to make it haptic, but I’ll go through them at the end of the walkthrough.
What happens next is that the Arduino needs to be programmed to convert your analogue inputs into computer readable code (visit Arduino for more info). For this project I used the standard Firmata included with the Arduino software as such: plug in your Arduino to a USB port, open the Arduino software, click File>Examples>Firmata>StandardFirmata. A new window will open with the code to be uploaded to your Arduino. Verify the code (tick button top left) and upload it (arrow right button next to the verify button). Your Arduino should now be communicating with your PC via serial data. Next up is translating this code to something that you can work with. For this I use a program called Processing. There’s a tutorial up for this with the Arduino code taken from the tutorial at http://www.arduino.cc/playground/Interfacing/Processing. I chose processing for this job because I can now route the input from the Arduino over a network via OSC messaging. Which is handy. There are other methods of applying the Arduino inputs directly into Pure Data or MAX/MSP, but the freedom to route messages over a network works best for me. Ultimately, I do use Pure Data to read the OSC messages, but the ability to route over the network is still available if I need it. Here’s the PD patch for reading OSC…
You can see in the picture above that the analogue inputs range from 0 to 1023 and the digital pins are represented by a 0 or 1. There is a slight mistake in the above patch because the 0-1 (Tx/Rx) digital pins are not active in the Processing software. The patch still works, just don’t expect anything to appear on /digital/0 or /digital/1. The digital pins can be set up as digital switches, such as momentary floor switches etc. That’s about it for the refurbishing of the GameTrak. Ask me questions if you get stuck or hit up the forums for Arduino and Processing. Stick around for a look at what I did next…
Inside my bowl I added the components of an X100 from Logitech. This speaker is Bluetooth, so attaches to your PCs audio output wirelessly. The tiny amp is used to drive the speaker and is also routed to an audio jack output on top of the bowl. With the GameTak gloves and audio jack plugged in we need to modify our gloves a little. Inside each glove is an audio frequency vibrating transducer. If you look at my previous project to do with gloves, you will see what I’m talking about. The transducers are connected to the audio amp via telephone wire, in series with each other and parallel to the speaker. This balances the impedances of the drivers to one that the amp can handle.
With the combined spring return force of the GameTrak mechanics and the vibrational elements of the glove, we have the force and tactile elements of a haptic system. We can now route tactile information to the performer that can pertain to near anything in the vibrotactile detection range and capture movements to be broadcast over a network via OSC. Cool huh?