I have used the Arduino for a few things now – most notably, for the ShieldBoy and ArduinoBoy Advance (sorry I haven’t made a build doc for that yet). The fun part of those was designing custom boards and, in fact, I’m rather proud of the ArduinoBoy Advance as it was my first try at designing a solution that did not require an Arduino dev board. Some of these projects involved making minor modifications to existing code, but nothing major.
Recently, though, I have been getting really deep into programming for the Arduino with an application that I built largely from the ground up – something I am called an Aquariduino. It’s basically going to be automation for our new freshwater aquarium. Initially, it just monitors and displays temperature and controls the aquarium heater. This is already way more reliable than using the thermostat on the heater itself, though I don’t want to stop there. Eventually it will control the lights, air pump, filter pump, monitor water levels, and be network aware.
This is not really a new solution, and in fact someone has probably already coined a project Aquariduino. I had thought of taking what was already done, but really wanted to see how easy it was to write code for Arduino as well as have my own customized solution for the shields and relays I am using.
In actuality, this is two projects that are sort of related. Brandon, Travis, and I are wanting to try our hands at brewing beer again and one of the things that has been hard to figure out is how to control temperature during fermentation. It is basically the same solution as the Aquariduino, only with a larger temperature range and in reverse (cooling something instead of heating it). In fact, I built this solution (that I have coined “Yet-Another-Beerduino”) first. It is much simpler than the Aquariduino in that there is only one temperature sensor and one relay. Though it was a bit cost prohibitive, I do want to make that solution network-aware as well – the Arduino WiFi shield is just somewhat pricey.
Even so, the network-aware stuff for both applications I’m quite excited about. I am going to just have a simple interface that outputs current stats, like temperatures, which devices are on, etc. I am then going to monitor those stats in both Cacti (for graphing) and Nagios (for alerting). I’m already familiar with both tools and they avoid having to do all that on the Arduino so I can save space for other things.
I am working on build docs for both projects (available here and here) that will have concrete details. I guess I am being a bit long-winded to get to my point (no surprises there); but my point is that writing applications for the Arduino is super easy! It’s a brilliant platform and while that brilliance comes at a non-trivial performance cost, it is powerful enough for most things. And the new ARM-powered Arduino that is likely to be announced soon may offset some of the performance penalties.
It’s not the solution for everything. The MidiBox platform, for instance, is not one I could see working near as well with Arduino. Likewise, TI’s offerings have crazily small power requirements; and the Propeller has lots of power and cores in a small package. Even using the AVR family of microcontrollers that power the Arduino platform more directly will provide a significant performance boost.
None seem to have the easiest, cheapest, and most portable development options as Arduino, though. Add to that the ease in building solutions by way of stackable shields as well as an open-source platform, and you have a really awesome offering that can be the solution for a vast majority of projects.
It’s not the solution for everything, but it’s probably the solution for most.