Robot playing Rockband on the iPhone
Rock Band has been released on the iPhone, and even though its a lot of fun, I would rather have something play it for me. Preferably a robot!
Light sensors are used to read the falling notes, I’m using ambient light sensors from Sparkfun. They are small and easy to setup. (The iphone brightness has to be set to Max)
The light sensor sends data to an Arduino, which is waiting for a spike in the data. This means something bright has passed in front of the sensor. I’m using an Arduino Mega, which is overkill for this project, but it does look really cool with those WingShields on it.
The Arduino runs the sensor data through some averaging filters, and sets a threshold for on and off. This could also be done through hardware, look up Hysteresis and Schmitt trigger. If the sensor data becomes higher than the on threshold, the Arduino reads that as a note, and tells the servo to push the screen. The servo will not release its touch of the screen until the sensor data drops below the off threshold. The on and off threshold have some distance between each other to deal with bouncy noise.
The iPhone touch screen isn’t like most PDAs. It uses a capacitive touch screen. More info about that HERE. It would seem that the iPhone is looking for a finger sized touch, from living flesh. According to the link, the screen actually looks for changes in electrical current.
I had some conductive foam laying around, its usually used for shipping sensitive electronics. If I put my finger behind the foam and pressed on the iphone screen, it works. If I used something non conductive, like a plastic pen, the foam would do nothing to the screen. My solution to this was to put thin copper wires into the foam (I also used these wires to attach the foam to the servos) the other end of the wires were wrapped around the handle of an exacto knife. When the Robot is playing the game I touch the handle of the exacto and the robot fingers are able to press the screen. Another solution was to run all the wires into the Arduinos ground pin, but it had mixed results (not all wires were making contact)
Add all of the above together into a modified Pelican case, with a lot of hot glue (non glittery) and you have a robot that will gladly beat all your difficult songs, sit back and sip some fine tea.
The performance of this robot increases with the correct positioning of the servos, and the distance you set them to move in the code. You may notice in my video that the right most servo had a hard time hitting its notes, it’s been glued too far south of the note position, something I may correct later. I think it would be cool to package all of this together as a portable unit, with an Mini Arduino running the show.
Here is the code I made for the Arduino, it’s a modified version of my other project. If you want to make your own, you will have to tweak the sensor threshold and servo settings to fit your setup.