Link Search Menu Expand Document (external link)

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

- A Haida saying

Video. Welcome to our Physical Computing virtual learning space! We’re so glad you are here. Please feel free to explore, play, make, iterate, and learn. In this video, we are demonstrating using real-time computer vision to track the user’s hand, which is then transmitted to Arduino to control a cardboard-crafted person with a servo motor. You can learn how to make this in our HandPose Serial lesson. The cardboard person and mountain background scene was created in partnership with two of my favorite makers: a kindergartner and preschooler!

Welcome 👋!

This website is a place to learn and explore the materiality of computing, the physicality of humans, and harnessing the wonderful expressivity and potential interplay of both. It was built to complement the physical and ubiquitous computing courses at the University of Washington but has proved more broadly useful.

Join us in learning and making together! 🚀

Why learn physical computing?

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, classes, 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 projects from some physical computing-related courses taught by Jon E. Froehlich Example projects from our courses.

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.

All code on this website is open source, including the website itself. If you’d like to contribute, please read the web dev setup guide here, start coding, and make a pull request!

For our tutorials, we often link to example code in the following repositories:


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.

This website site is built in Jekyll with the Just the Docs theme.