Instructables
Picture of Speech-controlled Game Boy Advance

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:

http://www.instructables.com/id/Speech-Recognition...

http://www.instructables.com/id/Wireless-Audio-Str...

http://www.instructables.com/id/Speech-Recognition...

http://www.instructables.com/id/How-to-modify-your...

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.

Issues

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!

 
Remove these adsRemove these ads by Signing Up
JayPeeeeeee4 months ago

Everytime you say 'A', I hear a thick. What is it?

chanudn (author)  JayPeeeeeee4 months ago

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).

Oh, okay. Thanks for the explanation :)

repkid5 months ago

Replacing the relays with MOSFETs would be easier, otherwise it's a good job.

chanudn (author)  repkid5 months ago

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?

repkid chanudn5 months ago

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.

Mosfet switch.jpg
chanudn (author)  repkid4 months ago

Ah okay, I see. Thank you for the detailed explanation!

jonex5 months ago

cool project!

chanudn (author)  jonex5 months ago

thanks!