If you're reading this article you're probably like me: I go through phases where I get so engrossed in a project (which most others would see as trivial), so focused on the goal that sleep and food are afterthoughts, I put my body through a gauntlet to appease some primitive urge of mine to CREATE.
Such was the beginnings of this project. I attended Google I/O 2011 and managed to get my hands on an Android ADK demo board. ADK is the Accessory Development Kit , an Arduino-based interface board whereby you can connect your compatible Android device (2.3.4 and any device from 3.1 onwards) to virtually any hardware and use the phone to control a device, or vice-versa. It's called the Android Open Accessory platform, and it's totally cool.
To introduce the concept to the Google’s keynote speech they produced a regular ball maze toy , familiar to many, which was controlled by a Motorola Xoom tablet. This Instructable is kind of two instructables in one: first, I'll be illustrating the steps required to set up the ADK from scratch and then I'll be reproducing Google's ball maze on a Nexus One phone to demonstrate a simple use of the ADK board (I'll keep the massive bowling-ball version for another Instructable).
So continuing with my story: I grew up with a ball maze, my parents had one as far back as I can remember. A little while after I got home from Google I/O I found the maze at my parents’ house and shortly thereafter I discovered I had everything I needed to make my very own Googley maze controlled by my Nexus One.
[Lights on, cue primitive one-tracked mind]
The goal was set: I had one night to make this from scratch, hardware and software. I'd never written a real-world Android app before (not that this is very real-world yet...), but I was convinced that it couldn't be too hard. I worked from 7pm to about 5am, though I probably could have done it in 2-4 hours if I had an Instructable like this to start with - being my first ever Android project, much of that time was reading!
Only the Nexus One (Gingerbread 2.3.4) has been tested with the code I'm supplying, but it should work with little to no modifications on a stock up-to-date Nexus S and possibly also Android 3.1 tablets. As of writing, I am unaware of any other supported devices or Android versions.
So dig through grandma’s game closet for that old ball maze, grab your Nexus, break out your Google ADK board if you went to Google I/O (or get a compatible one from the suppliers listed here ) and start building!
Concept
The idea is relatively simple: monitor the phone’s accelerometer, and translate the three-dimensional acceleration vector (ie. which way is "down") into a coordinates on a two-dimensional plane - one dimension for each servo or axis of rotation on the maze. This is mapped to two absolute positions between 0-255 for positioning the servo arms. These values are passed to the ADK board which acts as the servo controller and controls the tilt on the maze.
In other words, you can now play the ball maze game by using your phone as a remote controller!
Remove these ads by
Signing UpStep 1: Materials and Tools
- A ball maze / labyrinth game
- Google’s ADK Demo board or compatible ADK board with 2 servo outputs
- Two small servos (eg. mini servos found in small RC cars/helicopters)
- Google Nexus One or Nexus S with Gingerbread 2.3.4 (not tested on Nexus S)
- Short cable with female 3x2 or larger box connector (an internal USB panel patch cable works well)
- Male box connector pins - either: one 3x2 or two 3x1 (for connecting to servo sockets)
- 0.5mm aluminium or other pliable sheet metal (for servo brackets)
- Small springs or springy metal (eg. I used stainless steel strips found in some wiper blades)
- A small block of wood (For mounting the "inner" servo to the ring)
- Thin stiff wire, eg. paperclip wire (for servo lever arm fixtures)
- Assorted small screws (to secure servo brackets)
- Small tacks, nails or a staplegun (to secure springs in place)
- Cable ties
- A few drops of oil or grease, particularly if your maze is 30+ years old like mine :)
Required tools:
- Drill and drill bits (I used 1mm, 6mm bits)
- 1-2 pairs of small needle-nosed pliers
- Wire clippers
- Screwdrivers
- Soldering iron
- Sharp knife / craft knife
Other useful tools:
- Drill press
- Small hand-held rotary drill/grinder tool (Dremel or similar)
- Diamond-tipped engraving bit or drill bit (for drilling holes in stainless steel spring strips)
- Bench grinder
- Small hammer / tack hammer
Note to the lazy
If you really don't want to compile and install the apps to your phone (which I highly recommend, you'll see why later), you can download the APK files from this Instructable. You must ensure that the Settings > Applications > Unknown sources option is selected, copy the APK files to your device, then use a program like ApkInstaller to install them. If you get an error, check your Android version is either 2.3.4 or 3.1 or greater.
APKs.zip5 MB









































Visit Our Store »
Go Pro Today »




It is really Great project ,,,, I see you are appropriate one to tell me about good and small idea for subject on university,,, We can use on it jest Arduino and any sensor to built a nice application which wight 20% from final mark ,,, so please if you have an ides from your experience which smart and good tell me ,, it is really important ,,,
Than you,,,
Unfortunately I'm extremely busy at the moment so it would be hard for me to really help out much - there's a huge amount of information in this instructable so I think you should be fine though. All source code is there (although being my first real Android project it is a bit messy and may not be set up correctly!) There are also plenty of tutorials and forums for Android development on the web - and they will be able to give you much more assistance on that side of things than I can.
I am interested though, what is the assignment that you have, and what do you plan to do? Depending on your major, a straight copy of my project seems a little simplistic for fourth year students (if you are CS students that is - no offense, but with my VERY rusty Java skills and having never programmed for Android before I completed the environment setup and coding all in a matter of a few hours)
If you want a bit of a challenge, you could try building a program based on my code (or the original DemoKit code, or write from scratch) that could complete the ball maze by itself, given a video feed of the maze from overhead. Now THAT would be a killer project for a group of 4th year students :) If this sounds like you, I also recommend you sign up for the free online Stanford AI and/or Machine Learning classes (google it), started just this week (you may or may not be able to still sign up officially, but I think they are releasing the videos free). I'm taking the courses (just a small part of the reason I'm so busy), and hope to do just what I've described with what I learn.
Good luck whatever you decide.
So first check the version of Android that you have, if it is prior to 2.3.4 then you're out of luck. If it is non-stock 2.3.4 or later (eg. CyanogenMod or other 3rd party images) then you MAY be able to get it going but I really don't know. The only other option is to find a Nexus One, Nexus S, Android 3.1 or later tablet, or a device running Android 4.0 "Ice Cream Sandwich" to use instead. Sorry if that wasn't clear in the instructable.
The box connectors are just so you can easily connect and disconnect them without altering the standard 3-pin socket that comes on most servos. They have no effect whatsoever on the operation. If you prefer to hard-wire them that's fine.
As to whether you can connect them directly onto the PWM outputs on the Arduino board, you'll have to check the Arduino documentation on this, I really don't know. My ADK board has dedicated pins for servos. I THINK that you probably need to:
- check that the ports can supply enough current to the servos (even small servos can draw a lot of current when they move quickly), you wouldn't want to burn out the Arduino board.
- check that the servos are supplied a PWM voltage in the correct range (the standard Arduino 5v may not be enough),
- check that the Arduino sketch (firmware) is correctly calibrated to supply the right range of pulses to the servo, so that the servos are not damaged.
Disclaimer - I really have no idea. Like I said previously, if you don't have exactly the same hardware then recreating what I've done is going to involve a lot of work, much of which I can't help with because I've never done it before (only going from what I've read).
Good luck and Merry Christmas!
is this the code for retrieving data from the phone's accelerometer?
http://romfont.com/2011/05/12/google%E2%80%99s-open-accessory-development-kit-on-standard-arduino-hardware/
http://sudarmuthu.com/blog/using-standard-arduino-board-as-googles-adk-kit
Once you have the above sketch compiled and installed onto the board, you need to test it, and I would recommend starting with the Demokit Android code (rather than trying to do the accelerometer thing first). Follow the instructions in the instructable for installing Eclipse, the APIs, etc, etc. and getting the Demokit code compiled and installed on the device. Without this you can't easily test the Arduino board.
@JUGG3R: The accelerometer code is in the Eclipse project attached to this instructable, see step 5.
I'll ask you again, do you have the right Android hardware? Do you have either a Nexus One, Nexus S, Galaxy Nexus or Android tablet with Android 3.1 or higher? If not, I can almost guarantee that Demokit will not work, unless you have already got it working, or have an assurance from the manufacturer that it works. I can't help you on getting it working on any device other than these.
i think the correct syntax would be:
int servoPin=2;
Servo myservo1;
void setup()
{
myservo1.attach(servoPin); (this will attach the servo to pin 2)
}