- March 17th, 2014
- Write comment
Hacked By BALA SNIPER
It’s been a long while since I’ve updated my blog, which is probably a mistake since I do interesting stuff from time to time that might be neat to read. This is one of those things.
For the 10 year anniversary, The Behemoth wanted to do something really special this year at PAX 2013 and were bringing new cabs to really celebrate that time. If you recall, one of their games is Alien Hominid which was released years back on Playstation 2. I picked the game up and like everyone else got super frustrated with how difficult it was, albeit still fun. More importantly, there was a minigame on there called Super Soviet Missile Mastar. At PAX, they wanted to showcase this as well but in a more interesting fashion than just using an arcade stick.
They asked if I could take their iPad + iCade set up, and hook it up to a bowling ball as the controller. I thought about it and said “Sure! that sounds awesome” and so here we are. After doing some research I found a couple of ways to do this, but the best and most straightforward was simply to use an optical mouse to read the bowling ball as it moved around, then report that to your host. Some people have gone the extra mile and hooked it to an Arduino + Dual Shock to attain perfect analog control (arduino reads mouse, outputs analog signal, dual shock reads it, fun ensues). That’s an AWESOME implementation, but I only had a couple of weeks to get this going as well as finish up running my own kickstarter. So I opted to instead go a more straightforward route which is really the only way to go on this since the iCade PCB takes in discrete inputs anyway.
The idea is simple:
Bowling ball read by USB mouse -> USB Host -> Discrete Output -> Bluetooth PCB in the iCade
The USB Host -> Discrete output is actually something a friend of mine has been working on, and I thought it would be a perfect fit as a dry run for this. The host board is done by Undamned, who created it out of necessity for his UD-CPS2 which is super cool for people into Super Turbo and the like.
Check out more about that project HERE
So first off I wanted to ensure I could build the interface to begin with since the electrical was something I was confident in. I went to the local goodwill and found a sweet 16 pound bowling ball for like $3, perfect!
It still had the fingers holes, so eventually we want to fill those up to ensure a nice smooth roll but for now it works just fine. After I located this I went to building the cradle to hold it so that the mouse could be seated directly underneath.
The casters are set and cradle the ball enough to keep it from moving when you roll it with your hands. These are simply industrial casters, so they aren’t the smoothest operation, but they certainly work in a pinch. Now to strip down the mouse and mount it underneath, as you can see there isn’t much space now with proper cradling, and the mouse needs to be basically touching the surface to read it properly (think about it, pull your mouse slightly above your pad… high enough and it stops working right?).
Stop to make sure I didn’t nick anything important, still works? Ok then moving on!
We want to keep the plastic on to avoid any damage to the optics (never know when handling a heavy bowling ball). Some quick dremel work to route out the area, then some screws with washers to take up some slack and ensure it’s at the right height.
Some trial and error, and voila, I’m able to control the mouse on my computer with the bowling ball. I found at this point that the color swirls and glossy coating on the ball were screwing with the optics and would cause some clunkiness. To remove this, I simply sanded the living crap out of it. After doing that it functioned much better, but I also found that this can be alleviated by simply using a better mouse (tested the theory with my nice R.A.T.). However, I didn’t want to use a nicer mouse just to destroy it so I left it as is.
At this point I filled the holes with some plastic JB Weld, then sanded it down smooth enough to make a nice surface. The result turned out pretty good, but one thing I’ll say is that this stuff smells AWFUL. While grinding it away I made sure I was in an open area to avoid breathing in the stuff as much as possible.
So here’s where I actually spent more time than anticipated. I assumed I knew how the circuit would function because, hey, it’s a simple arcade stick topology so why wouldn’t it be active low, common ground? Well, like a lot of wireless PCBs this isn’t the case and the board ended up being active high, common signal. So here’s the challenge on interfacing:
1. The iCade PCB has 2 possible power sources, in either case the main micro and I/O run at 3.0v, meaning that my USB host I/O needs to be dropped.
2. The inverse operation, the USB host will drop the signals low, which need to be brought up on the other side.
I thought I could cheat this and simply make an N-FET isolation section that would pull the signals to 3.0v instead dealing with the common line but that proved to not work at all. Even swapping my FET topology to use the common line still wouldn’t work due to the pull ups, the board seemed really sensitive and was just fighting me enough to force usage of an opto-isolator instead which in the back of my head was what I wanted to use in the first place.
This is the topology I ended up using to interface the boards. The high side’s boxed in area is what’s in the USB host board, the middle box is the opto-isolator. 2.2k was chosen to ensure a saturated state on the output. The opto requires about 1.5mA forward current to accomplish this.
Okay, so now that it’s settled I’ll do this it’s time to put the interface board together and get this patched up.
iCade opened up
iCade PCB close up
It can run off of 2AA’s or a 5V power source, although there is protection it should be noted this uses Pin Negative connections.
Shove it all inside of the iCade, disconnect the battery wires to avoid problems. Hold it all together with zip ties and zip tie anchors. There’s only 3 channels in this picture, but I added the 4th later.
As you can see the USB A port actually runs out the back, this is to give the board an “either or” option. This means that the iCade can be used as is, or you can plug in the bowling ball set up or any other USB controller you want to take over the directionals. It comes out the back where the USB cable generally runs for the iPad anyway.
The last thing to do is seal the thing up, the problem is that with all the electronics now inside it won’t close. The reason is because of the large Happ style of buttons being used, so we need to switch things out to Sanwa buttons to ensure it still completely functions but can close up.
Control panel turned over, microswitches pulled out for easier removal.
The last thing to do is reconnect the quick disconnects. Since these are larger, a simple press of the pliers allows them to fit to the smaller male QD prongs of the Sanwa buttons.
Close it all back up and test the whole setup out!
More on the At-Convention madness and finalization in the next post.