Four ways to interface Android to Arduino
Good step-by-step instructions for building hardware
No explanation for Android app code
Three of four interface styles require a wire connection between Arduino and Android
Inadequate explanation of workings of the overall project
The projects in this book are more interesting than the predecessor, 30 Arduino Projects for the Evil Genius. Part 1 of the book has an assortment of interesting Android+Arduino projects on a variety of subjects. Part 2 is dedicated to home automation. I have the sense that the book was originally going to be dedicated to home automation, because one of the chapters in the home automation section refers to Chapter 7 as Chapter 1. For a full list of projects with a brief description, visit the book's site at [...] (change "spot" to "." and don't forget the www or it won't work).
The most valuable thing about this book is four useful interfaces that allow an Android device to control an Arduino. They are: bluetooth, wired USB, wired sound port (you don't actually hear it), and wired ethernet. Realistically, Android as a controller is best in wireless form, and only the bluetooth interface does that. A TV Remote design that requires plugging the Arduino into the Android via a USB cable is just clunky. The author could have presented Wifi and Zigbee, both of which are wireless and should work with most Android tablets and Arduinos with additional hardware; Zigbee requires an IOIO plug-in for the Android.
Another valuable idea in this book is how to add an Arduino processor to a USB host controller shield that has a prototyping area (such as SparkFun's USB Host Shield). Using it requires moving the processor to a full Arduino board temporarily to program it, but has the benefit of access to USB slave devices and low cost. This device is used in four of the projects.
All projects focus on stepwise instructions for building the hardware, including photos, and they are good as far as they go. This is handy if you cannot read schematics.
For all projects, there are three key areas of technology to learn: Arduino hardware and ancillary components; Arduino software; and Android app software. My goal is to learn how to design projects using the interface ideas, not necessarily to build these projects in particular. But the explanations of how any project works are brief, and mainly discuss how to build the Arduino hardware, not much about how it works. A little about the Arduino software is discussed. There is no explanation for Android app code at all, contrary to what the Introduction says on page xvii.
In theory, all explanations for how the project works should be found in the Theory section. In practice, essential details are scattered around various other sections, or are missing. I am experienced both in hardware and software yet struggled at times to make sense of the works as a whole. Sometimes there is an overview of how it works, but not always.
I had trouble finding instructions on using a required library for the project in Chapter 1. Instead of telling you in the part of Chapter 1 where you install the IDE, it is in Step 8. Details I am looking for are never where I expect to find them in the book, and require that you read the entire chapter to find them. But if you do read the entire chapter, it appears everything you need to know will be revealed, eventually.
When compiling one of the projects, it compiled cleanly, but then I got this puzzling error, which is not discussed in the book:
avrdude: stk500_getsync(): not in sync: resp=0x00
Whenever you get puzzling errors (of any sort), put the exact text into google, and you may find some help. This message is what you see when there is some kind of communications error between PC and Arduino - disconnected, wrong board selected, wrong comm port, etc. I eventually figured out that for whatever reason, on my system the Arduino board is COM5, whereas the book said it would be COM4 for Windows. Even more mysterious is that when I first encountered this problem - reading the first book - the book said it should be COM3, but COM4 was what worked then. I wonder why he says COM3 in the first book, but COM4 in the this one? And for that matter, why the COM port changed on me...? I think the book could have a brief troubleshooting section that includes this very common error message. I'm experienced, but not with Arduino, so this was not obvious to me.
There is a primer on Android apps as an Appendix, and it includes a sample application. Unfortunately, the Android apps used in the project chapters are not discussed at all in this appendix (or anywhere). The author says he does not explain them because Android programming is complex. That may be, but it is an essential part of these projects, and I would have preferred that he explained them at least at a basic level.
WHERE'S THE ANDROID SOURCE CODE?
The Android app source code is a bit hard to find. The author added this comment to a different review of this book:
"I would point out that as well as the APKs, all the source for the Android apps is open source and available from www spot dangerouslymad spot com - follow the downloads link and it will take you off to [...]". [Note: I changed "." to "spot" to preserve URLs.]
The download link he's referring top is not on that site, but rather at www spot duinodroid spot com, and labeled "The source code is all here". When you click it, you get to a different page labeled "THE SOURCE CODE IS HERE, YOU JUST NEED TO CLICK ON THE SOURCE TAB AND THEN BROWSE." A zip of the source code is on the Download tab, not the Source tab. Click on Download, then click on the zip file and it should download.
[UPDATE 2/15/2012: The author explains that the code IS in the source tab by way of a subversion repository (see the comment I posted to this review if you're not familiar with this form of repository!), and the zip file under Downloads is for convenience. It would be more convenient yet if this zip file was on the book's Web site with the Android source code for the book.]
Android source code quality is... well, let me quote the author from the subversion repository page: "I feel I should apologize for the Android code. Its not as clean as it should be. I ran out of time, but if anyone wants to refactor / improve, please let me know."
As with the previous book, this book would have benefited from a good editorial review, and a thorough technical review. True, the author does present errata on his Web site (as with the previous book), but most Arduino books do not require online errata, and the errata so far does not include a mention of the required MeetAndroid library.
The photos vary in quality. They are low-quality black and white. Some are clear enough; others are hard to figure out. For example, it is nearly impossible to distinguish between the breadboard and a socket that has been inserted in Chapter 3 photos. Some of the hand-wiring is very messy, though I suppose appearance is second to function.
As a Benign Subgenius, I tire quickly of the Evil Genius theme, and there is even more than in the first book, but perhaps you will be amused by it. I want to know what the project does, but this is mixed in with the fluff I want to skip, and that annoys me.
I wish all of the components of the design (hardware, Arduino source, Android source) were thoroughly explained, along with by a system perspective of how it works - who does what, and how components interact when it's not obvious. Some projects have some of this, some don't. In my opinion, the book would be more useful if it either was considerably longer (to explain the missing details), or had far fewer projects, to allow for more explanation.
I wanted to give this book a 4 rating ("I like it") for the interesting projects, but by the time I compiled a list of problems, it brought my opinion down to 3 ("It's ok"). The book does provide very useful information, but it is also missing critical information, and is not as clear as it could be. In sum, I like the content, but not the style or organization, and that comes down to a matter of personal taste. YMMV.