Real-Time Plots with kst and a Microcontroller

Follow along as we build a real-time data graphing system using kst, an Arduino microcontroller and a Linux notebook.

Arduino Open Hardware Primer

A simplified description of a microcontroller is that it's a small-footprint
computer that can read and interpret input pin values,
make a few calculations or decisions, and then control
output pin signals based on the embedded program.

Arduino microcontrollers are known as open hardware. In the spirit of the
open-source software tradition, the board designs, schematics and code are
freely available to download, modify and enhance. The Arduino home page
has active forums for information exchange, and there is a comprehensive
set of reference documents.

Figure 2. Arduino Board

Naturally, the boards and raw components cost money. A number of Arduino
clones are available, offering board configurations for a variety
of specialized applications. Prices for solder-it-yourself boards start
at around $20. Complete ready-to-run boards with built-in
USB interfaces cost about $30. You'll also need a
breadboard, a few resistors, some jumper wires, a wall wart or battery
and some sensors (suppliers are listed in the Resources for this article).

Inputs are either analog or digital. An analog device might be a
potentiometer or photocell, while a digital device might be a magnetic
reed switch or a push button.

Outputs control things. You could turn on a light with a digital output
operating through a relay or transistor. In this article, we won't control
anything with output pins. Instead, the Arduino will communicate sensor data
to a Linux notebook, over the USB line.

Modern microcontroller modules, like the Arduino, take advantage of
what's called in-circuit programming. The processor chip uses
Flash memory for program storage and is accessed via the USB connection.
Flash is a type of Electrically Erasable PRogrammable Read-Only Memory (EEPROM),
which means it can be erased and rewritten multiple times using the proper electrical signals.
These days, the term EEPROM normally is used only to refer to the more traditional
type of EEPROM (which is still used in smaller sizes due to some of its other advantages).
In-circuit programming is great because it minimizes
equipment costs and prototyping turnaround time.

The flagship Arduino module is known as the Duemilanove. It is a 2.7"
x 2.1" circuit board that has 14 digital I/O (input/output) pins and
6 analog input pins. It also has a built-in USB port, uses an Atmel
Atmega 328 processor and screams along at 16MHz. Modules are powered
by batteries or from a wall wart, with a recommended range of 7–12
volts DC.

Setting Up the Arduino

Arduinos are programmed in a language called Processing. The Arduino
integrated development environment (IDE) manages compilation of the
Processing source code into machine code that is then uploaded to the
Arduino board. Veteran programmers quickly will note Processing's
remarkable similarity in format and syntax to the C language.

The Arduino IDE runs on 32-bit or 64-bit Linux notebooks and
Netbooks. Obviously, Netbooks are cool because they are tremendously
portable. Windows versions of the IDE are available. So, you'll always
have the capability to program an Arduino, even if you get in a spot
and don't have your Linux notebook close at hand.

Download the latest Arduino software from the Web site.
Various Java packages, gcc-avr and avr-libc need to be installed, along
with the Arduino integrated development environment. See Resources
for a good tutorial on getting everything working
in a 64-bit Ubuntu environment.

Open a terminal, and move to the directory where you installed the Arduino
IDE. On the command line, start the IDE:

rreilly> ./arduino

The main Arduino code editor screen will appear. From the drop-down File
menu, select New to get a blank code window. Type in your program. You
also can copy code from another source, such as Web examples or from
the sample code bundled with the IDE in the Examples directory.

Figure 3. Arduino IDE and Editor Window

The examples offer standard routines to read various input sensors and
control output pins. The Arduino Web forums and reference pages contain
all kinds of code snippets that you can use instead of having to write
everything from scratch. Just like open source in the Linux world,
Arduino users are encouraged to develop and share their code.