Joy is a well-made object, equaled only to the joy of making it.

A Canadian Native American tribe saying, as quoted by Mark Fraunfelder (author, co-founder of BoingBoing, & former editor of MAKE Magazine)

Physical and Ubiquitous Computing

Welcome to our website! Here, we explore the materiality of computing, the physicality of humans, and harnessing the wonderful expressivity and potential interplay of both. This website is intended to complement the physical and ubiquitous computing courses at the University of Washington but may also be more broadly useful.

Example projects from some physical computing-related courses taught by Jon E. Froehlich Example projects from Tangible Interactive Computing.

Table of Contents

  1. Why now?
  2. Learning prerequisites
  3. Learning philosphy: learn by doing
  4. Example Hardware Kits
  5. About this website
    1. Acknowledgments

Why now?

This is a particularly interesting time to survey and explore physical computing because of three, interrelated technology and social trends:

  • The DIY/Makers movement, which has led to widespread opportunities to interface and work with hardware that has rather low barriers of entry (e.g., the Arduino), provides new opportunities for coupling form with computation (e.g., through digital fabrication), and provides countless online materials/tutorials to help us along (see a resource list here).
  • The pervasiveness of powerful mobile computers and IoT devices that are constantly on and nearly constantly with us (or around us) and imbued with a rich array of sensors such as accelerometers, gyroscopes, and location-sensing that allow for new types of off-the-desktop interaction
  • Advancements in machine learning and computer vision and maturing ML/CV toolkits/APIs that enable us to process and use sensor data in new ways for human-computer interaction (without being experts in ML or CV ourselves!) Taken together, we can no longer simply consider the GUI and WIMP interfaces as primary interaction models for computing.

Enabled by the above three points, our goal is to explore new human-computer interaction possibilities. We will use materials to help us think and to push our own boundaries of what interactive computing is and could be.

And we are not alone, the content here is inspired by a rich set of courses, including NYU’s ITP Physical Computing, UC Berkeley’s Critical Making and Interactive Device Design. See Inspirations and the Resource list for more.

Learning prerequisites

We assume the following background about our learners:

  • Some coding experience. For the introductory lessons, we assume comfort and familiarity with basic coding concepts such as functions, loops, variables, and conditionals. We’ll be using C/C++ to program our microcontrollers; however, no previous C/C++ experience is expected and, indeed, the language itself is rather unimportant. If you’ve programmed in a typed, compiled language like Java, Processing, C#, or other similar languages, you should be fine. If you’ve programmed in a dynamically-typed language like JavaScript, Python, or Ruby, then C/C++ may take some getting used to but the overall structure of coding is not that different. Later lessons require more advanced programming concepts such as memory management, library development, etc.

  • No previous experience with hardware. In contrast, we assume no previous experience with electronics or microcontrollers.

As physical and ubiquitous computing are inherently multidisciplinary fields spanning electrical engineering, computer science, signal processing, human-computer interaction, machine learning, and more (e.g., applied anthropology) there are many diverse topic areas—and too many to cover in one course or website. The content here reflects what we teach to graduate and upper-level bachelor students (typically with engineering and/or computer science backgrounds). The Intro to Arduino lessons were written for a more general audience and should be suitable for interaction design courses in information science or design fields (but again, do assume some coding experience).

Learning philosphy: learn by doing

A key pedagogical philosophy underlying our teaching is learn by doing. From years of experience, we’ve found that the best way to teach physical computing is via hands-on exercises. So, we we expect that you will build along with our guides and lessons.

Example Hardware Kits

Here are some example hardware kits that we provide students in our classes.

About this website

This website began as a response to teaching physical computing remotely due to Covid-19. My initial (humble) goal is simply to translate my lectures slides to more readable online versions; however, I am hopeful that it will expand further.


Diagrams, animations, pictures, and videos are by Jon E. Froehlich unless otherwise noted and were created using Tinkercad Circuits, Fritzing, Autodesk Eagle, and Microsoft PowerPoint. For some Fritzing diagrams, we use the Adafruit Fritzing Library.

As noted, for course and content inspirations, see our Resources page and our Inspirations page.