08.17
NES-chuck Demo from Benjamin Bergman on Vimeo.
I finally got around to making a quick demonstration of my NES-chuck. Code for the NES-chuck can be found here. The future event I mention is ArtCadia, which is part of Nuit Blanche. I’m not yet sure if I (or the NES-chuck) can attend, but I will keep this updated.
After the break, there is a rough draft of my script for the video.
Hi everyone!
I’m here to demonstrate this project that I made recently that I call the NES-chuck. As you can see here, I have a Wii nunchuck, but the cable has been replaced with one from the original NES controller so that it can be directly connected to the Nintendo. So with this, I am now able to play classic Nintendo games with the Wii nunchuck.
I came up with this idea a few months ago while chatting with some fellow hackers from my local hackerspace. We were thinking of project ideas and thought it would be great to play classic video games with a modern controller. The Wii nunchuck to NES conversion seemed good to me as it would be useful for one-handed gamers, people who want to eat a snack while gaming, or people wanting to play cooperative games by themselves. I then took it upon myself to make the NES-chuck at our next hackathon. We were later asked to help out with an event at the Winnipeg Art Gallery celebrating video game culture. The NES-chuck was setup for all the visitors to use and stood up to the use of hundreds of guests.
So here’s a quick demonstration of how it works. I can move the joystick to make Mario walk around, I can press the top button to make Mario jump, and I can press the lower button to make him run or, if he has the fire flower powerup, shoot fireballs.
Those of you really familiar with the NES controller will remember that it also has start and select buttons, but I have run out of buttons on the nunchuck. To compensate for this, I have used the accelerometer in the nuncheck to make the NES-chuck into a modal system. If you hold the controller in a normal playing position, the buttons function as A and B. However, if you hold the controller so that it is pointing upwards, the buttons will then act as Start and Select.
In order to get all of this functionality, I have crammed an ATMEGA 328 microcontroller running the Arduino bootloader into the nunchuck. The ATMEGA then talks over I2C with the nunchuck to get all the state information about the nunchuck (the joystick, the buttons, and the accelerometer) and then uses that information as it emulates the shift register inside the original NES controller.
In the future, there are a few changes that I would like to make to the NES-chuck. Besides getting a better NES that doesn’t constantly hang, I am considering taking the analog values from the joystick and using it to pulse width modulate the NES arrow buttons. That would let the user make Mario run at varying speeds, much like he does in the modern games. This rapid button pressing might get annoying for menu navigation, so when in start/select mode, the joystick will act as it currently does.
A second change I would like to make is to get rid of the Arduino bootloader. Since the NES-chuck is powered from the NES itself, the Arduino starts booting when the NES first turns on. Since the Arduino bootloader is slower to boot than the NES, things get a bit screwy, so I usually have to press the reset button on the NES so that it can get a fresh start with the NES-chuck already loaded up.
Lastly, I am currently experiencing a bug where the Start button gets pressed seemingly at random. It seems to happen most often when I am pressing up and left on the joystick and while jumping. The shift sequence of the NES controller has UP and START directly next to each other, so I think it is just a timing problem, but I haven’t been able to squash the bug yet. I did, however, manage to decrease the bug’s frequency by lowering the sensitivity to the UP button. Another possible solution would be to use an actual shift register to more precisely emulate the NES controller. The downside to this is that there is a limited amount of space in the nunchuck to begin with and so it might be tough to cram it all in there.
If you would like to get more information about the NES-chuck or you have some suggestions for the next version, feel free to leave a comment here or contact me through my website. You can also check out the code from our hackerspace’s GitHub account. I’ll post a link in this video’s description. The code is pretty simple, but a little messy as it was written in an afternoon. Feel free to use it however you would like. Also, if you would like to see the NES-chuck in action, it is looking pretty likely that there will be another video game art exhibit in Winnipeg sometime this fall, so keep your eyes and ears peeled for that.
I hope you liked the NES-chuck and enjoyed this video. Stay tuned to my channel and my blog to see my future projects.
Update – 2011/08/26: I originally forgot to upload the pictures of the guts of this thing. Here they are!
A+ for pcb-less atmega wiring
Thanks! I was mostly happy with how that turned out, but after my first attempt to wire it all up, I realized that I had left the code on the chip that was meant for the original Nintendo branded nun-chuck. The third party one that I was modifying had noticeably different tolerances on the joystick, so it had different code. I think I ended up butchering some pieces of header or an IC socket in order to connect my programmer to it again.
[…] you may remember, this isn’t my first custom NES controller, but I started the project off hunting down a controller schematic so that I […]