In my recent column, A Sensor for All Seasons, I noted that I intend to load the robot I'm building with a cornucopia of sensors. The problem with having a lot of sensors is that we have to process the raw data they are receiving and turn it into useful information. If we're not careful, the robot's main processor will be spending all of its time wading through data from the sensors without having any computational resources free to do anything useful.
One solution, as we discussed, is to have a small processor associated with each sensor, and to pre-process all of the raw sensor data into useful information like "Eeek! There's a big hairy object approaching at speed from a northwest direction," thereby leaving the main processor free to make executive-level decisions like "Run away!"
But even if we do offload the low-level processing tasks, we could still overwhelm the main processor if we deploy a sufficient number of sensors. The solution is to use a faster, more powerful processor for your main controller, but what are the alternatives that are open to us?
I am currently the proud owner of an Arduino Uno, which is based on an 8-bit ATmega328 processor. This little scamp offers 14 digital input/output pins (of which six can be used as PWM outputs) and 6six analog inputs. It uses a 16 MHz clock and boasts 32 KB of flash memory and 2 KB of SRAM.
The Arduino Uno.
Although the Arduino Uno is almost inconceivably more powerful than the processors of my youth, and it's more than powerful enough to satisfy the requirements of a wide swathe of users, it's a tad lightweight with regard to the number of sensors I intend to deploy on my robot. One option would be to move up to the Arduino Mega, which offers 54 digital input/output pins (of which 14 can be used as PWM outputs), 16 analog inputs, and four UARTs:
The Arduino Mega.
Once again, however, the official Arduino Mega is based on an 8-bit ATmega1280 processor running at 16MHz. Another alternative is to use an Arduino Due, which is based on an Atmel SAM3X8E ARM Cortex-M3 microcontroller:
The Arduino Due.
This little beauty offers 54 digital input/output pins (of which 12 can be used as PWM outputs), 12 analog inputs, and 4 UARTs. In addition to the fact that it's got a 32-bit data path, the Arduino Due employs an 84 MHz clock and boasts 512 KB of flash memory and 96 KB of SRAM.
Arduinos on steroids
One of the great things about the Arduino is that everything is open-source. Due to this, a wide variety of Arduino-compatible development boards have appeared on the market. One set of boards that really makes my mouth water is the chipKIT family. The original members of the chipKIT organization were Microchip Technology, Digilent, and Fubar Labs. These companies have since been joined by other members, such as the folks from element14. In fact, the most recent Arduino-compatible chipKIT platform -- the chipKIT Pi -- comes from Microchip and element14. The chipKIT Pi can interface directly to the Raspberry Pi's I/O expansion header, but that's a story for another day.
In addition to the raw processing power of the chipKIT platforms (as discussed below), the thing that really differentiates these little beauties from the herd is the amount of effort the chipKIT folks put in to making the transition from Arduino to chipKIT as seamless as possible. You do need to download a new development environment called MPIDE (multi-platform integrated development environment), but once you've done so you'll find it looks almost identical to the standard Arduino software.
But it's the boards that make you drool with desire. Let's start with the chipKIT Uno32, which is the same form factor as the Arduino Uno and is compatible with many of the standard Arduino shields. (The reason for this "many" qualifier is that some shield creators write libraries that talk directly to the AVR hardware, which sort of goes against the Arduino philosophy of keeping things portable by writing to the abstraction level.)
The chipKIT Uno32.
The Uno32 board is based on the powerful PIC32MX320F128 microcontroller, which features a 32-bit MIPS processor core running at 80 MHz along with 128 KB of flash program memory and 16 KB of SRAM data memory.
One thing that immediately caught my eye was the chipKIT Pmod Shield-Uno. This is an input/output expansion board for use with the chipKIT Uno32 that provides five 2x6 Digilent Pmod connectors (it also provides access to the I/O connectors available on the Uno32 as well as connecting to the I2C bus supported by the Uno32).
The chipKIT Pmod Shield-Uno.
Have you seen all of the Pmod modules offered by Digilent? (You can also get modules from other companies like Analog Devices, Maxim, and Texas Instruments.) These include GPS receivers, 3-axis digital accelerometers, 3-axis digital gyroscopes, 3-axis digital compasses, microphones with amplifiers… basically a bunch of things I intend to add to my robot.
At the other end of the spectrum we find the chipKIT Max32 prototyping platform. This little rascal has the same form factor as the Arduino Mega board and is compatible with many Arduino shields as well as larger shields for use with the Mega boards.
The chipKIT Max32.
The Max32 board is based on the powerful PIC32MX795F512 microcontroller, which features a 32-bit MIPS processor core running at 80 MHz along with 512 K of flash program memory and 128 K of SRAM data memory. In addition to supporting 83 inputs and outputs, the processor provides a USB 2 OTG controller, 10/100 Ethernet MAC, and dual CAN controllers that can be accessed via add-on I/O shields.
Wow! My head is spinning. I feel like I'm spoilt for choice. To be honest, I actually think I might end up using a hierarchy of controller boards (in addition to the microcontrollers on the sensor boards) with one in overall charge and the others each delegated to focusing on a certain task. This is all going to take some thinking about -- watch this space for ongoing developments.
— Max Maxfield, Editor of All Things Fun & Interesting