Physical computing concerns computer systems that interact with the physical world. In a more limited sense, physical computing systems are cybernetic in nature, sensing and responding to the physical environment. It is through the skillful manipulation and translation of sensed inputs that physical computing systems can appear to exhibit intelligence in their physical responses.
The availability of inexpensive, easily programmable microcontrollers provide the perfect medium for exploring physical computation and are stepping stones toward ubiquitous computing.
At the 2011 Google I/O, Google announced their intention to work with Arduino to create an open-source development environment for creating Android peripherals. Arduino manufactures open-source microcontroller boards that can be easily attached to physical devices and programmed using an open-source programming language (also called Arduino).
In this post, I introduce the Arduino board family and show how quickly and easily they can be wired and programmed for physical computing. It should be noted that Arduino is simply one of many microcontroller boards currently available.
The Arduino family of boards come in various shapes, sizes and capabilities and currently includes the Uno, Duemilanove, Diecimila, Nuova Generazione, Extreme, USB, Serial, Mega, Mini, Nano, and the LilyPad (a round microcontroller made to be sewn into clothing). Some of these are shown below (click here for more information on a particular board):
This summer, I created a small mobile robot and chose the Arduino Uno as its “brains.” I chose the Uno because it had a built-in USB port (some Arduino boards require a “shield” that provides a temporary USB port for downloading) and had enough ports and power for the project as I envisioned it. The Arduino Uno is a 20MIP ATmega328 running at 20MHz. A datasheet for the Uno is available here.
Notice the rows of pin sockets at the top and bottom right edges of the board. The upper row has 13 sockets that can be used to connect digital input or output along with a common ground socket. The bottom rows of sockets can be used for analog input or output along with power and ground connections.
The board can be powered by a 9V power supply plugged into the power jack located at the lower left corner of the board, or through a USB connection to the port at the upper left corner. Software is downloaded to the board via a USB connection directly from within the Arduino development environment.
Here is a screen shot of the Arduino programming environment:
The Arduino language is a modified version of the Processing language. The program shown above is one of the example programs provided with the Arduino software. It simply blinks an LED connected to the digital I/O pin 13. This program demonstrates the ease with which physical devices can be connected to the Arduino board. To wire the LED to the board you could simply stick the long lead (positive) of the LED into digital pin 13 and the short lead (negative) to ground.
After a program is downloaded to the board, it runs the setup() method once and then continues running the loop() method until the power is removed from the board or another program is downloaded. As stated previously, the board can be powered either through a battery pack or through the USB connection.
The robot I created this summer with the Arduino Uno board had the following connected to it:
- Two servos to handle the left and right wheels.
- Two servos to handle the pan/tilt functions of the robot’s neck.
- Two infrared motion detectors mounted as ears on the robot’s head.
- An ultrasonic distance sensor for eyes.
- A miniature speaker for the mouth.
In addition to creating robots, microcontroller boards like the Arduino can be used to create mobile phone peripherals, sensor networks and other physical computing devices.
Mobile phone peripherals are in their infancy and represent a relatively untapped new market and turn smartphones into powerful handheld tools. One example is Square, a device/app combination that allows the iPhone or iPad to read credit cards. All manner of field test equipment could be connected to smartphones via microcontroller-based hardware (such as Arduino).
Arduino board capabilities can be enhanced through the use of shields. Shields either clip or are soldered onto an Arduino board to provide additional capabilities such as wired or wireless ethernet, cellular functionality, data logging, motor control, video display control, touch pad capabilities, audio capabilities, etc.
Sensor networks can be constructed by creating Arduino modules with sensors that communicate either wired or wirelessly with a central microcontroller or host computer. In effect, sensor networks are like a distributed robot whose body/senses are spread across a large area.
Inexpensive, easy to use microcontrollers represent a significant step toward spreading intelligence throughout the physical world. Considering Moore’s Law, the price and size of microcontrollers can be expected to halve every 18-24 months. How long before we can feasibly imbue almost everything we touch with intelligence?