Hack a Guitar Hero drumset to use it with any computer over USB, Part 1


BitBucket repository is live: https://bitbucket.org/MostThingsWeb/usbdrumming/src

So, you’ve got one of those Guitar Hero (World Tour) drumsets, and want to use it with your computer? Are you also looking for a fun DIY project involving soldering, electronics, and possibly voiding a few warranties on consumer hardware? Great! Read on.

My humble drumset

Background

I can’t claim all the credit. This project is based on a 2009 article, How to use Guitar Hero World Tour Drums as a real MIDI drumkit, by Mathijs van den Berg. His article proved to be very useful in helping me to initially understand the protocol and devise my plan of attack.

Like Mathijs, there were several reasons why I didn’t want to settle for any of the already existing solutions:

Objectives

I approached this project with two goals:

  • Be able to interface with the drumset over USB to any computer
  • Still be able to use the drumset for its intended purpose (i.e. play Guitar Hero on my PS3)

Initial research

If you read Mathijs’ article (cited above), you already know that the drumset consists of two main components that communicate with SPI; the control box and the drumpad controller. The control box is the box that sits at the top of the drumset. It is specific to each console (the Playstation 3 drumset has a different control box than the Wii drumset, for example). The drumpad controller, inside the drumset, is the circuit board that interfaces the drumpads and cymbals to the control box. The drumpad controller board is common to all versions of the drumset.

The drumpad controller circuit board

It was nice to begin this project with a good idea of what lay ahead, and I’d like to thank Mathijs for reporting his findings. Unfortunately, his blog post lacked two important resources: the circuit he used to interface with the drumset and his software. Also, I would bet that his solution sacrificed the ability to still use the drumset to play Guitar Hero, which is one of my objectives.

Exploring the hardware

With knowledge of the basic protocol in hand, I knew that I would need a way to debug whatever I was building to make sure that it was communicating correctly, so I ended up purchasing a Saleae logic analyzer. The first thing I did with it was to record some communications between the drumpad controller and the control box while the system was operating normally. These “control” communications would be important for later when I tried to iron out the details of the protocol and emulate it myself.

In the screenshot below, you can see an example of “normal” communications. Every 10 ms (100 times a second), the control box polls the drumpad controller for information on the pads that have been hit. To do this, it pulls ENABLE low and, 27.5 microseconds later, sends 0xAA (control box communications are on the MOSI line). The drumpad controller simultaneously responds (on MISO) with 0xAA to confirm. About 33 microseconds later, the control box sends 0x55. The drumpad controller responds with the number of drumpads that have been hit since the last time it has been polled.

The four messages I mentioned above can be seen below as the “blips” that have the little ovals above them. If one were to zoom in on these blips, the ovals would grow and display the decoded message.

When no drumpads have been hit (as is the case in the above screenshot), no further action is required. The control box simply places the ENABLE line high, disabling communications until next time (10 ms later). If a drumpad was hit, then the following happens for each pad hit:

  1. Control box sends 0; drumpad controller responds with 0x99
  2. Control box sends 0; drumpad controller responds with the pad that was hit
  3. Control box sends 0; drumpad controller responds with the velocity of the hit (i.e. how hard it was hit)

You might notice that even when ENABLE is high (meaning communications between control box and drumpad controller are disabled), there is still chatter. I was wondering about this, so I appealed to the Electrical Engineering Stack Exchange for help. They helped me realize that there were other “slaves” sharing the SPI bus. In this case, the transmitter that communicates between the control box and console (PS3, Wii, etc.) were sharing the communication lines. Those communications can be ignored.

Part 2

In Part 2, I’ll crack open the drumset and prototype the embedded software and hardware that communicates with it (spoiler: Arduino is involved).

Join the Conversation

8 Comments

  1. I am actually happening to develop a similar mod, but in my case the primary goal is to replace the ‘drum synth’ PCB (along with all the plastic drumset around it) with an Arduino (fed with MIDI from an actual electronic drumset) while keeping only the console-specific control box. I might then use the leftover plastic drumset + PCB for purposes such as yours. Thanks for adding

    Oh, by the way I have the Wii version: the drum synth part is indeed similar to your X360 version except for the console-specific control box (which is not a fully-featured game controller but requires a docked Wiimote connected by its nunchuk port, as is the case with guitar controllers). Actually, the wiring between this control box and the drum synth PCB is also a bit different since it uses 6 discrete colored wires instead of a ribbon cable in your set (and mathijs’) but this seems to be manufacturing variations, not important in any case…

  2. …woops, guess I’m not only too tired to keep coding but also to write something coherent…

    So: thanks for adding a few important details to the protocol description that were missing in mathijs’ post, I’m looking forward to the next part!

    1. Thanks so much for responding! I’m not ready to release full details of my project just yet (read: I haven’t written it up yet 😉 ), but I have TONS more info I can send you in the meantime. Can I go ahead and email you with the address you posted your comments under?

      Your project sounds awesome by the way. Hopefully what I’ve created will be of some help to you 🙂

      Thanks again for reading,
      -MTW

      1. Yes, please do! I am encountering a strange SPI behaviour from my control box, so more info is welcome 🙂

  3. hey there, just finished reading all five posts and think they’re just awesome so I’ve decided to hack my own ghwt wii drumset which is just laying around gathering dust anyway..

    noticed you used an arduino clone, ihave the arduino uno which works on 5v dc. Is there are way to use it with the ghwt drumset? or is use something like the arduino due? or some other. 3.3v arduino clone like you did.

    I’m a software kinda guy but have recently taken a keen interest in everything arduino and just love it if icould pull this ghwt drumset – arduino clone off!

    thanx a lot

    1. Hey, thanks for writing!

      The reason I chose the Pro Micro was because it uses 3.3V logic, which the drumset also uses. You could use practically any other Arduino or Arduino clone you want, but you’d have to add in 5V < => 3.3V translation logic (unless of course the Arduino already uses 3.3V). That adds bulk and complexity, and for that reason I would suggest against it. Also, the Uno is probably too large to fit inside the drumset. I’d highly recommend the Pro Micro for these reasons.

      Good luck (and have fun!) with your conversion!

      MostThingsWeb

Leave a comment

Leave a Reply