Working as an engineer for SparkFun, I'm constantly exposed to every kind of DIY electronics project under the sun.
As I'm sure you know, the Arduino is an open-source electronics prototyping platform; it's intended for anyone interested in creating interactive objects or environments, including artists, designers, and hobbyists. With the advent of the Arduino, DIY electronics, specifically in the sub-20MHz microcontroller sector, have become so accessible to the beginner that anyone with a clever idea and a bit of motivation can build their vision and show it off on any one of thousands of technical/DIY blogs.
However, while it is wonderful to be exposed to such creative people and projects every day, it comes with a price: I've become a little jaded. It's disappointing to see designers so often limit their designs to the hardware they are obliged to use, instead of tailoring their hardware to address the requirements of their uniquely brilliant design.
I've often seen people start off with a wild and wonderful idea, but then they insist on shoe-horning the implementation into the only hardware with which they are comfortable. Eventually, when the designers realize that 16MHz and 2K of Flash memory are just not enough to realize their original goal, they cater the design to the hardware. The result is that instead of creating something fabulous and fantastic, they end up with a mere shadow of their original concept.
Fortunately, this dumbing-down of an idea is not always the case. Every now and then, a project comes along where the DIY designer has not compromised his vision, but has instead managed to milk every last iota of power from his hardware. When this happens, we are not only exposed to a clever project, but we (as techies) can appreciate a very clever piece of DIY engineering. One such example is the SoundPuddle.
The SoundPuddle is an art installation created by John English of the Boulder Engineering Studio in Boulder, Colo. The piece was created for the Apogaea Festival -- a collaborative outdoor arts and music event that is held in beautiful mountains of Colorado. The SoundPuddle project is a sound-reactive set of LEDs installed in a geodesic dome where people attending the festival can hang out at night. When I first heard about this project, I must admit I assumed it was just another pretty thing to look at, but as I discovered more about the design, I realized John had performed some very impressive engineering to achieve his vision.
The system consists of 1664 LEDs presented on addressable strips. It employs a Hann Windowing technique and performs a real-time 1024-point Fast Fourier Transform (FFT) on the incoming audio data, and it uses the frequency breakdowns to modulate the colors of the LEDs.
The SoundPuddle also boasts ten SPI master controllers. But the really impressive part -- at least to me -- is that its controller code was written in the Arduino IDE (integrated development environment). The result is really, really impressive. You can see it in action in the following YouTube video:
The thing is, this would be impossible if you were using something like the popular Arduino UNO board, because there simply isn't enough bandwidth to perform the digital signal processing (DSP) or enough memory to buffer the audio and visual data.
In order to address this, John turned to the Papilio FPGA Development Board featuring a Xilinx Spartan 3E FPGA. With a bit of help from Alvaro Lopes and his ZPUino Soft Processor, the team built an AVR8-based soft-controller, running on the Papilio, that could handle the kind of data processing and buffering required for the project, while still being able to write code in the Arduino domain.
The bottom line is that John's team has successfully pushed the Arduino a little further into the future by accomplishing complicated DSP on a software platform originally designed to help beginners. All told, they are controlling 1664 sound-reactive LEDs with ~350 lines of main code (including debugging code!). If you're interested, you can click here to take a look at their code, which is hosted on github.
In the case of this project, it turned out that the low-cost Papilio development board with its Spartan 3E FPGA was the perfect solution. What projects have you built or seen that moved into an FPGA when a microcontroller just wouldn't cut it? Alternatively, what projects have you seen that should be moved from a microcontroller into an FPGA to make them more elegant and/or impressive?
just a small clarification. The system is not built around AVR8, but rather ZPU32. The Arduino IDE was chosen because most hobbyists are accostumated to it, but it generates code for the ZPU processor, not AVR.
When learning any hardware for the first time, one always runs into peculiarities that are so foreign and frustrating that they discourage the learner (especially the self-taught learner) from progressing further.