Arduino – a simple microcontroller

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.

The best place to get started is on Arduino’s own website. Toolduino is a fun app for a beginner to start with. It’s handy for setting up circuits, prior to programming.