Monday, June 4, 2012

Android ADK Microcontroller Board

Android ADK Micro-controller Board

The Accessory Development Kit (ADK) is basically a micro-controller development board that adheres to the simple Open Accessory Standard Protocol created by Google as a reference implementation. Although that could be any board fulfilling the specification to be ADK compatible, most boards are based on the Arduino design, which is an open hardware platform created in 2005. Those boards are USB-enabled micro-controller boards based on the Arduino Mega2560 and the implementation of the Circuits@Home USB Host Shield. However, there are other board designs known to be ADK compatible, such as PIC-based boards or even plain USB host chip boards such as the VNCII by FTDI. Google decided to build its reference kit upon the Arduino Mega2560 design and provided the software and hardware resources as open source. This was a clever move because the Arduino community has grown tremendously over the last years, enabling designers, hobbyists, and average Joes to easily make their ideas come to life. With the ever-growing communities of both factions of Android and Arduino enthusiasts, the ADK had a pretty good start.

To communicate with the hardware boards, an Android-enabled device needs to fulfill certain criteria. With Android Honeycomb version 3.1 and backported version 2.3.4, the necessary software APIs were introduced. However, the devices also have to ship with a suitable USB driver. This driver enables general USB functionality but, in particular, it enables the so-called accessory mode. The accessory mode allows an Android device that has no USB host capabilities to communicate with external hardware, which in turn acts as the USB host part.
 
The specification of the Open Accessory Standard stipulates that the USB host has to provide power for the USB bus and can enumerate connected devices. The external device has to provide 500mA at 5V for charging purposes of the Android device according to the USB 2.0 specification.

The ADK also provides firmware for the development board which comes in the form of a set of source code files, libraries, and a demokit sketch, which is the Arduino term for a project or source code file. The firmware cares about the enumeration of the USB bus and finding a connected device that is accessory modecompatible.
Google also provides an example app for the Android device that easily accesses and demonstrates the capabilities of the reference board and its sensors and actuators. If you are working with a derivative board that doesnt have the same variety of sensors, you still can work with the example app, but you might want to strip the code down to only the basic part of the communication.
When you set up an ADK hardware project you are building a so-called Android accessory. Your hardware project is an accessory for the Android device such as, for example, a keyboard would be for a PC, with the difference being that your accessory provides the power for the whole system. Accessories need to support the already mentioned power supply for the device and they must adhere to the Android accessory protocol. The protocol dictates that the accessory follows four basic steps to establish a communication to the Android device:

1. The accessory is in wait state and tries to detect any connected devices.
2. The accessory checks for accessory mode support of the device.
3. The accessory tries to set the device in accessory mode if it is necessary.
4. If the device supports the Android accessory protocol, the accessory establishes the communication.
If you want to learn more about the ADK and the Open Accessory Standard have a look at the Android developer pages at http://developer.android.com/guide/topics/usb/adk.html.


The Google ADK Board
The Google ADK is the reference kit presented at the Google IO in May 2011 and it was the first board adhering to the Open Accessory Standard. The kit comes with the ADK base board and a demo shield, as shown in Picture.
The Arduino ADK Board
The Arduino ADK  is an ADK-compatible base board from the makers of the Arduino series themselves. It is also based on the ATmega2560 and only differs slightly from the Google reference board.



The Seeeduino ADK Board
The Seeeduino ADK board (Figure 1-5), also derived from the ATmega board, looks quite similar to the standard Arduino ADK board but, at second glance, it has some nice extra features



The IOIO Board
The IOIO (pronounced yo-yo) board is a PIC micro-controllerbased development board developed by Sparkfun Electronics before the announcement of the Open Accessory Standard.


More ADK Possibilities
After you have seen the most common boards with ADK support out there, youll probably wonder if thats all there is. Although the Open Accessory Standard is only about a year old, the number of boards already available is incredible, with many still to come in this young but rapidly evolving field of open source hardware. There are still plenty of other possibilities for developing with the Open Accessory Standard. Some represent pure DIY (do-it-yourself) approaches, while others are extensions for boards that have been in use since before the ADK came out.
One early approach was to port the ADK to the common Arduino Uno or Duemilanove. The only thing you needed was an additional USB host shield to connect the Android device to. I was one of those early DIY hackers who went in that direction. At the time, it was the only affordable alternative to the original Google reference board. Nowadays, I wouldnt recommend it; there are already perfect all-inone boards that dont need additional shields, hacking, or stripping of code. If you still want to use your regular Arduino there are a lot of shops carrying USB host shields you can use:


Which Board Should You Use?
Now that you have read about the variety of boards supporting the Open Accessory Standard that are already out there you might wonder which board is the right one for your own project. This is always a hard question, for which there is no single answer. You should plan your project thoroughly ahead of time to analyze which board fits best.
If you are a beginner in the world of hardware development and ADK, you should stick to the boards that are most commonly used out in the wild. As of this writing, that would be the Google ADK board, which was given out to hundreds of developers attending the Google IO 2011. If you are not one of the lucky ones to have received one of these boards and your budget is pretty tightwhich is usually the caseconsider the standard Arduino ADK board. Both of these boards are used in most hacker and maker projects I have seen so far and they have a huge community built around them to help you if you are in need.

Table gives you an overview of the boards under discussion.

Comparison of the Most Common ADK-Enabled Boards

ADK Boards
Google ADK
Arduino ADK
Seeeduino ADK
Sparkfun IOIO

Processor
ATmega2560
ATmega2560
ATmega2560
PIC24FJ256

CPU clock speed
16 MHz
16 MHz
16 MHz
32 MHz
Flash memory
256 Kbytes
256 Kbytes
256 Kbytes
256 Kbytes
RAM
8 Kbytes
8 Kbytes
8 Kbytes
96 Kbytes
Digital IO pins
54 (14 PWM)
54 (14 PWM)
54 (14 PWM)
 48 (28 PWM)

Analog input pins
16
16
16
16
Input voltage
voltage 5.5V - 16V
voltage 5.5V - 16V
voltage 5.5V - 16V
5V - 15V
Connectors
DC power
USB A-type
USB micro B-type

DC power
USB A-type
USB B-type

DC power
USB A-type
USB micro B-type

USB A-type







More info
What is Android ADK? 

Beginning Android ADK with Arduino eBook. ( Free Download )