Arduino is a popular, cheap (around 25 USD), and open source microcontroller platform. We use them all over the lab. Students can learn to program them very quickly, they’re versatile, and there is a large user base with tutorials that make implementations easy. The programming environment is quite simple and is almost identical to Processing. In fact, there’s an Arduino plug-in for Processing. There are certainly more powerful options available, but in order to get things done without much learning or development time, these simple tools are great. For example, I have one of these cards wired up to 8 configurable BNC jacks, and it acts a general purpose logic box and timer. Sometime I have it delivering trains of stimuli at the onset of a trigger pulse, other times it manages behavioral rigs. The USB connector is exposed in the back, and I just upload a new program whenever I need to change settings.
Here’s what the programming interface (IDE) looks like:
As you can see, the syntax is pretty C-like and simple. The program above simply reads the input from a push button switch and lights an LED while the switch is pressed. It can be interfaced with many different programming languages/environments (e.g., MATLAB, Python, C++, etc.), usually using the serial port to exchange data.
The hardware comes in a variety of official versions, with different form factors, wireless capabilities, and so forth. Other manufacturers have released their own compatible variations referred to as “Freeduinos”, or other “-duino”-suffixed words to distinguish them from the official versions of Arduino hardware. There are also a large number of plug-in shields for ethernet connectivity, driving motors, and other applications. There are many, many tutorials to get new people started interfacing with other hardware, including sensors, motors, displays, and flash memory.