In my thesis, I show that computer control of electronic devices can be simplified through the use of an object-oriented hardware device, called a Physical Object Device (or POD). My PODs have performed well, and one was previously employed to measure and graph the temperature in the server room in the Computer Science Department at Brigham Young University (unfortunately, it is no longer in service here).

I defended my thesis on February 19, 2004. A PDF of the presentation may be found here, along with videos of the demonstrations used in the defense: Beep, Finding North, Robot. The PDF of my thesis is here.


Computer control of electronic hardware can be a difficult challenge for programmers. Often, they waste time and misplace effort working through low-level implementation details of electronic devices, rather than using the devices to accomplish higher-level tasks and algorithms.

In this work, we introduce the Physical Object Device (POD), an extensible object-oriented environment that allows simple control of electronic devices through an object-oriented interface. Programming occurs through the use of libPOD, a simple, yet powerful, library designed to simplify the use of PODs by programmers. By building intelligence into electronic devices and by treating these devices as hardware objects, programmers are given a user interface directly targeted for them.

We detail a number of PODs that we have constructed, and demonstrate their use through several case studies. Our work shows that PODs provide a flexible, modular design, a familiar and uniform programming environment, and rapid design of complex electronic systems.


In my Thesis work, I have developed a C++ library for working with and controlling my PODs. This library provides a useful interface to the hardware devices, and simplifies programming. libPOD is easy to download and install using the following process:

Here are several simple examples of libPOD use:


Each of the PODs was designed using the Cadsoft Eagle Layout Editor. I created a small Eagle library with a number of new parts, and used that library when creating my Eagle projects.

I wrote C code for the Atmel ATMega8L microcontrollers, compiled it using AVR-GCC, and programmed them using uisp.



Michael G. Robertson, Scott V. Hansen, Franklin E. Sorenson and Charles D. Knutson. "Modeling IrDA Performance: The Effect of IrLAP Negotiation Parameters on Throughput." Proceedings of the Tenth IEEE International Conference on Computer Communications and Networks (ICCCN '01), Phoenix, Arizona, October 15-17, 2001. paper

F. Sorenson, E. Sorenson, K. Flanagan, H. Zhou, A System-Assisted Disk I/O Simulation Technique, Proceedings of the 7th International Symposium on Modeling, Analysis and Simulation of Computer and Telecommunication Systems, College Park, Maryland, 24-28 October, 1999. conference | paper

S. Peng, K. Flanagan, F. Sorenson, Client-Based Web Prefetch Management, The Eighth International World Wide Web Conference, Toronto, Canada, May 11-14, 1999.

K. Flanagan and F. Sorenson, A National Trace Collection and Distribution Resource, 1999 SPEC Workshop, San Jose, California, January 25, 1999.

Niki C. Thornock, Xiao-Hong Tu, J. Kelly Flanagan, Frank Sorenson, A Stochastic Disk I/O Simulation Technique, Proceedings of the Winter Simulation Conference 1997, December, 1997. paper


My wife, Elizabeth, recently completed her Dissertation in Computer Science at Brigham Young University. Her Thesis and Dissertation work deals with memory reference locality.

In one of our classes (CS580), we did a fun project involving embedded programing and an autonomous blimp.