This is a project I worked on for my electronics class at Pomona College. Thanks to Professor Dwight Whitaker and Tony Grigsby for their help and guidance throughout this project, and credit to Jonathan Wong for the idea for this project!

Also, here's a list of Instructables I looked at for ideas/inspiration while working on this project:





How it works

The basic idea of this speech-controlled Game Boy Advance is that you can say the name of a button (left, A, start, etc.) and have the GBA respond as if that button had been pressed. Here’s a quick rundown of how I’ve set it up to work:

1. You say a word into a small microphone (let’s assume you say “start”), and this signal is sent from the microphone to the computer through the Arduino.

2. The speech recognition software BitVoicer sees that “start” is a word it’s supposed to respond to and sends the Arduino the string “start”.

3. The Arduino receives the string and sets the voltage of one digital output pin to HIGH and the rest to LOW. The pin set to HIGH is connected to a relay that is in turn connected to two metal pads on the GBA circuit board that correspond to the start button.

4. Since the pin is set to HIGH the relay switches states, making the two metal pads electrically connected. This electrical connection is what happens when you usually press GBA buttons, so the GBA responds as if the start button was pressed.

I have this currently set up for all buttons except L, R, and select. I chose not to do it for these buttons because they aren’t used quite as often as the other buttons and I wanted to first focus on getting the essential buttons to work. The direction buttons are set to stay on HIGH until you say a new command (equivalent to holding down the button) while the A, B, and start buttons are set to stay on HIGH for 200 ms before switching to LOW (equivalent to pressing the button once). I’ve also programmed a “stop” command that sets all the pins to LOW to stop all ongoing commands.


Although the speech control works fairly well, there are a few issues to be aware of. For one, there’s a delay of about one or two seconds between when you say a command and when the GBA responds to it. So don’t expect to be playing any games where timing’s important, unless you happen to be really good at thinking ahead and saying commands early! Another issue is that BitVoicer sometimes fails to recognize a command, but this doesn't happen too often and when it does you usually only need to repeat yourself once or twice. I’ve particularly had trouble with it thinking I said “b” when I was saying “a”. Also, menu navigation can sometimes be troublesome with the current setup: sometimes you’ll scroll through menus really fast since the direction buttons are held down, while at other times you’ll have to alternate between a direction button and the stop command (i.e. “down, stop, down, stop,...”) if you want to keep going in one direction on a menu. Whether you run into these problems or not depends on how the game you’re playing deals with menu navigation. To fix this last problem I’m thinking of eventually adding some code that’ll allow for two commands for each direction button, one that’ll hold it down and one that’ll press it once.

Despite these issues I thought this project turned out fairly well and I really enjoyed working on it. I hope you do too!

Step 1: What you'll need

Here’s a list of what I used for this project:

  • Arduino Uno
  • Game Boy Advance
  • Computer with BitVoicer speech recognition software (You can download BitVoicer online, after which you’ll need to buy an activation code for US $4.50. This can all be done on the BitSophia site.)
  • 7 relays (I used 3 OMRON G5V-1 relays and 4 Magnecraft W171DIP-7 relays. I used two different kinds of relays because I didn’t have seven of either. It shouldn't matter what kinds you use as long as you have seven, though.)
  • 2 8-pin female headers
  • 2 6-pin female headers
  • Adafruit electret microphone amplifier (here’s the one I used)
  • 4 IC sockets (I used these for just the Magnecraft relays because I couldn't get my hands on any or the OMRON relays)
  • Perfboard (At least 20 x 28 holes; I opted for using a perfboard rather than a printed circuit board due to time constraints. Feel free to put everything on a PCB if that’s more to your liking.)

And here’s a few other things you’ll find useful:

  • Wire
  • Solder and a nice soldering iron
  • Tri-wing screwdriver (for opening up the Game Boy Advance)

<p>Everytime you say 'A', I hear a thick. What is it?</p>
<p>That's the OMRON relay connected to the A button. Each time one of the OMRON relays activates it makes a little clicking noise. The other relays that I used (Magnecraft relays) don't make any noises though, so there's a clicking sound only for buttons for which I used OMRON relays (A, B, and Start).</p>
<p>Oh, okay. Thanks for the explanation :)</p>
<p>Replacing the relays with MOSFETs would be easier, otherwise it's a good job.</p>
<p>Thank you! I'm not familiar with how to use MOSFETs though, so would you mind explaining how I could have used those for this project?</p>
<p>MOSFETs are advantageous in this situation there isn't any high current or voltage to speak of. The following technique worked on a USB keyboard for me so it should work for you as well. First you have to make sure the controller circuit and game boy share a common ground. Then connect the source pin of the MOSFET to one of the button pads and the drain pin of the MOSFET to the other button pad. To control MOSFET connect the gate pin to the Microcontroller IO pin and with a 10Kohm resistor connect it to the common ground as well. This solution is more compact and easier to implement than relays in my experience. Hope that helped you.</p>
<p>Ah okay, I see. Thank you for the detailed explanation!</p>
<p>cool project!</p>

About This Instructable


86 favorites


More by chanudn: Speech-controlled Game Boy Advance
Add instructable to: