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! In this video, we are 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. The cardboard person and mountain background scene was created in partnership with two of my favorite makers: a kindergartner and preschooler! You can learn how to make this in our HandPose Serial lesson.
Welcome π!
Weβre so glad you are here. This interactive textbook is a place to learn, to invent, and to have fun exploring physical computing and interaction device design. Join us in exploring, playing, making, iterating, and learning!
Hi ππ½ββοΈ, Iβm Jon E. Froehlich, a professor in computer science and human-computer interaction at the University of Washington. I originally built this site to help teach my physical computing courses at UW but itβs grown beyond my imagination! The website is designed to help you learn through animations, movies, embedded code, and simulation.
What youβll learn
By following along with our lessons and guides, you will explore:
- β‘Intro to Electronics: The fundamentals of electricity (voltage, current, resistance), circuit schematics, and safely building circuits with LEDs and resistors.
- π€ Intro to Arduino: Programming microcontrollers in
C/C++to read analog/digital inputs, control actuators, and build your first interactive devices. - π‘ Sensors & Advanced I/O: Deep dives into how sensors capture the world (force, light, distance, motion) and how to control advanced outputs like OLED displays and haptic vibromotors.
- π» Computer Communication: Bridging hardware and software using Web Serial, p5.js, and ml5.js for browser-based interactions and applied machine learning.
- βοΈ Internet of Things (IoT) with ESP32: Building wireless, internet-connected projects using the powerful ESP32 microcontroller.
- π Signals & Data Science: Using Python and Jupyter Notebooks for digital signal processing, frequency analysis, and building machine-learning gesture recognizers.
- πΉοΈ Circuit Playground Express (CPX): An accessible, beginner-friendly introduction to physical computing using Adafruitβs CPX and drag-and-drop visual programming (MakeCode).
Why learn physical computing?
This is a particularly exciting time to explore physical computing, driven by three interrelated trends:
- The Maker Movement: Low barriers to entry for hardware interfacing and digital fabrication have made it easier than ever to couple physical form with computation.
- Pervasive IoT & Mobile: Ubiquitous, sensor-rich devices allow us to break away from traditional keyboards and mice, exploring off-the-desktop interaction models.
- AI & Computer Vision: Maturing toolkits allow us to process complex sensor data for human-computer interaction without needing to be machine learning experts.
Learning prerequisites
We assume the following background:
- Some coding experience: For the introductory Arduino lessons, we assume familiarity with basic concepts like functions, loops, variables, and conditionals. We use
C/C++, but previous experience with it is not required. If you know Java, Python, or JavaScript, you will be fine. - No hardware experience: We assume zero previous experience with electronics or microcontrollers.
If you have limited coding experience, explore our Circuit Playground Express (CPX) lessons! We use the visual drag-and-drop language MakeCode, which is excellent for introductory interaction design.
Learning philosophy: learn by doing
Our core pedagogical philosophy is learn by doing. The best way to understand physical computing is through hands-on practice. We expect you to build along with our guides, make mistakes, iterate, and experiment.
Example projects from our courses.
Example Hardware Kits
Here are some example hardware kits that we provide students in our classes:
- CSE493F Physical Computing: Spring β26
- CSE493F Prototyping Interactive Systems with AI: Spring β24
- CSE490 Physical Computing: Spring β21
- CSE590 Ubiquitous Computing: Spring β20
- HCID521 Prototyping Studio: Winter β20
Global Impact & Testimonials
Since our launch in Spring 2020, we have received over 700k views from 209+ countries (via Google Analytics). π
Our materials have been used in university courses and maker workshops across the globe, including at CMU, Stanford, UW ECE, Purdue, OCAD, Wayne State, NYU Shanghai, RPI, Univ. of Victoria, UDIT in Madrid, Sussex, Dundee, and beyond.
βYour site is exactly what I was looking for. My students and I are grateful to your intuitive explanations, animations, and step-by-step problem-solving approaches.β β University Professor
βInsanely useful & highly relevant.β
- University of Queensland Professor
βIβd highly recommend taking this class; it was one of my favorites at UW. I donβt come from too much of a tinkering, embedded, hardware background. This class helped me think about HCI in a really different way.β β UW Student
Use This Website In Your Courses/Workshops
We β€οΈ it when others use and benefit from this material! If you incorporate or use any pieces of this website in your teaching or workshops, please let me know at jonf@cs.uw.edu. I love hearing about the ways our materials help you learn and teach!
For our tutorials, we often link to example code in the following repositories:
Website Code
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, start coding, and make a pull request!
Acknowledgments
Diagrams, animations, pictures, and videos are by Jon E. Froehlich unless otherwise noted, created using Tinkercad Circuits, Fritzing, Autodesk Eagle, and Microsoft PowerPoint. Fritzing diagrams often use the Adafruit Fritzing Library.
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.
This website is built in Jekyll with the Just the Docs theme.