Reviewed: January 2014
The Arduino is a credit card sized single-board microcontroller for use in various home electronics projects. The Arduino has an development IDE and several open source libraries to help interface the Arduino to other devices.
This book is a practical guide to using and controlling the Arduino and connected devices via its programming language and by all sorts of electronic components, typically connected using breadboard. The components include LEDs, LCDs, speakers, sensors and various kinds of motor.
The book says it is aimed at beginners, but in my opinion the book is much more suited to a more experienced developer and someone who is quite familiar with electronics. The projects start simple but after the first third of the book the pace gathers exponentially with briefer and briefer explanations with more and more material simply glossed over. It makes an excellent start as a beginners book but the programming language is not covered or introduced properly (it is covered in an appendix) so its use becomes more mysterious as the projects become more complex. The use of electronics terminology is also a bit loose and has a tendency to slip into jargon (trimpot, pull-down resistor etc). The more complex projects start to bandy terms about with no explanation at all. For example, the face tracker project mentions a Haar Cascade without explaining what it is or how it is relevant. The beginners part is excellent which is the main reason I recommend the book despite the problems.
The book structure is not clear from the table of contents. There is an introduction and brief history of the Arduino, some simple projects to control things like LEDs and speakers, then projects that are more complex. There is section on wearables, creating your own shield (an interfacing circuit board), and integration with other environments and languages for more even complex projects. These include face tracker, a graphic equalizer and temperature monitor.
There is a large amount of material to cover. The organisation and presentation of the book as a whole does not help with this. The divisions appear to be quite arbitrary and the section and chapter titles are vague. For example, the book is supposedly in two sections, getting started and putting the Arduino to work. This is not helpful. Divisions based on project complexity and use of additional circuitry and devices would have been more useful.
Arduino programs, known as sketches, start off quite useful, but become less so as the book progresses. This is for several reasons: the language is not introduced properly and starts off looking like C, but C++ aspects such as classes are used later on with no introduction or explanation. The code has various clashing styles that overall give the impression of multiple authors with different backgrounds, experiences and coding conventions.
The balance between prose and code fragments is about right but as the code becomes more involved the explanations become shorter. Some aspects, such as why certain baud rates are chosen for the serial line, are barely mentioned at all. Also the circuit diagrams vary a little in style and layout conventions. The diagrams in the wearables chapter are noticably different in style. The shield chapter in particular has some departures from the conventions of previous chapters. The diagrams show the shield as a picture rather than a rectangle, grounded resistors are shown using the ground symbol rather than being connected to the GND line and there are no photographs to illustrate how the circuit diagrams work out in practise (there are helpful photographs in most of the rest of the book). Some of the circuit diagrams are made using fritzing (the diagrams have a small note to this effect) but fritzing is not mentioned in the text (There is a one line mention on the inside cover).
Shields are mentioned several times in the early parts of the book without saying what they are. There is a dedicated chapter on shields that even coveres how to make your own. Surely the first reference could have explained what they are with a forward reference to the detailed chapter.
Later chapters cover external interfaces such as the ethernet port, USB port, using other circuitry such as shields, breakout boards and special leads to use WiFi, Bluetooth and connect to Nintendo Wii, the XBox and Apple phones. There is nothing on how to interface the Arduino to an Android phone, which is a bit suprising.
The book is dated 2013 but unfortunately does not mention the more recent Arduino boards. The Leonardo looks to take over the position of the Uno but the book uses the Uno most of the time. The graphic equalizer project uses the java audio library Tritonus. This is a suprising choice since it is linux only (not mentioned in the book) and the last news item on the website is dated 2003 (i.e. it looks to have been neglected for ten years).
The synthesiser project towards the end of the book uses PureData (Pd) which is a visual programming language. The visual programming aspect of Pd does not get the proper mention that it should. There is even a text listing of the generated code, which surely defeats the point. This is compounded by the fact that the Pd diagrams are small and of low quality.
The book covers a huge range of electronic projects and does start with some very simple ones. This makes the book appealing, despite the problems referred to. There are lots of photographs and many of these show assembled breadboards corresponding to the circuit diagrams. This will be of particular help to the beginner. The experienced programmer and electronics hobbyist will probably find the later projects very interesting and fun to do.
My overall impression of the book is that is started with a good emphasis for the beginner but lost this as time went on during the writing, during which many aspects got insufficient treatment, creating a rushed feel, compounded by the clashing styles and conventions. Still, the breadth is impressive and serves as a useful starting point for the more advanced projects.
Recommended but with reservations.