Arduino Open Source Hardware
As a career software guy, it might be surprising to learn that I started out in Electrical Engineering, a mostly analog discipline then (slightly after the ice age thaw) before falling in love with computers and software. When I graduated from college there was maybe one hardware job for every 100 software jobs – and it's probably another several orders of magnitude farther apart today. It was pretty obvious where I should be. Still, getting my hands on the physical computer system has always had a certain intrigue. I soldered together my first computer, a Heathkit H8, when I was a senior in high-school and to this day, I kind of like the smell of the heavy-metal, lead-laden smoke coming off a soldering iron. (I can hear the chorus of wise-cracks coming from the OpenLogic Engineering agile-mosh-pit: "that explains a lot".) I really liked my computer architecture courses where we finally built up from and boiled down to microcode and gates. It seems so crude now, but on the other hand, necessary to have a deep understanding of the bits and bytes of a computer. One of my favorite books and the one that really compelled me to change my major to computing was Tracy Kidder's Soul of a New Machine. Being this far removed from the early days of BYTE magazine, it can be kind of hard to get back down to the metal. In the last 10 years of computing it has been the computing equivalent of our father's laments of not being able to pop the hood and work on their cars anymore. In light of this, I think it's extraordinarily nice to find open source hardware making its debut. I've come across some interesting open source hardware projects that can speak to the laments of abstract hardware. There's an open source hardware spec, Wiring, and an attendant programming language, Processing, that are an attempt to bring some simple microcontroller hardware to the masses. These two projects are essentially specifications, though there is real hardware you can cheaply buy which implement these specs. One such device is the Arduino which implements the Wiring spec and has an open source IDE that makes it easy to write your first microcontroller programs and download it into device. For under $35 you can get an Arduino board which is based on an Atmel AVR RISC processor and start reading sensors and pushing signals to outputs like LEDs and LCDs – even the venerable, never extinct serial port.
An Arduino The reason the Arduino speaks to the "father's lament" is that 1) You can get a cheap platform for learning programming and 2) it's an easy, manageable platform for learning some hardware and digital electronics concepts. Open source AVR cross-compilers are readily available and are quite mature – target the device and write code in C or assembly. If you use the Arduinio IDE, it's a C-like language that uses a simple function and object model to control ports on the device. So, the test was: Can my 8 year old son, Nakoa, learn some hardware and programming concepts by using this approach? I bought an Arduino board from a local company in Boulder, SparkFun, which is a US distributor for Arduino and got him going. I bought him a small breadboard, a bunch of LEDs and some current limiting resistors, a $6 digital multimeter and we started from the start: What's a volt? With a little help and guidance, he went from measuring battery voltages, to creating simple circuits that lit up an LED, to using the Arduino to create a flashing arrow sign with LEDs not unlike a merge left sign you'd see on the highway. In essence, he started learning hardware patterns "When you need to light an LED, you have to put the cathode on that side, anode on that, add a current limiting resistor to ground, and apply +5V." I think it was as much a visual pattern he could recognize and duplicate, but it was a launching point to a whole lot more. To make sure he was getting it, I would ask him to explain a circuit by describing how the electron would flow around it starting from the + terminal of the battery.
Nakoa breadboarding with the Arduino The next conquest was to hook up a simple LCD display and stuff some text out to it. Success. After that, we wrote some loops to count and put the count out to the LCD. Our next forays together will be integrating a temperature sensor and creating a digital thermometer. I'm trying to use these real-world, hands-on experiments to help him learn the abstract notions of loops and functions. So far, so good. After he gets all that, we'll start on our first small motorized vehicle experiments – something along the lines of an RF controlled R/C car, and that's where the real fun (and damage) will start. Point is, with a $35 open source hardware platform and some open source compilers, a whole new world can open up to a whole new generation. And that, I think, is cool.


