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
mode–compatible.
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 doesn’t 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.
More info
What is Android ADK?
Beginning Android ADK with Arduino eBook. ( Free Download )
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-controller–based 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, you’ll probably wonder if that’s 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 wouldn’t
recommend it; there are already perfect all-inone boards that don’t 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 tight—which is usually the case—consider 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 )