Syllabus

Tue-Fri 3:30-5:30PM
June 28-August 5
Location: Hunt Library A10 (Physical Computing Lab)
Instructor: Dr. Garth Zeglin
Teaching Assistant: Ian Friedman

Course Description

This project-based course introduces students to the fundamentals of electronic and software engineering in the context of developing a pinball machine. This objective combines elements of electromechanical systems, real-time software, human interaction, and physical dynamics. The specific outcome is flexible and might combine elements of traditional pinball game design and musical kinetic sculpture. The course will culminate in one or more working machines to be performed or played at a final show.

The course will begin with a series of skill-building labs to learn basic electronics theory, Arduino microprocessor programming, and the properties of the sensor and actuator components. The students will then develop a detailed project concept, followed by developing and testing a series of progressively more detailed prototype revisions.

Project Description

Students will work in small teams to design and program a pinball machine from scratch. The emphasis of the course is on electronics and software, including sensors for human input and ball detection, actuators for game board features, ball striker actuation, and microprocessor control to implement reactive behaviors and game logic.

Students will participate in the conceptual design and sketching of the game board, but the wood fabrication will be performed by the instructor, i.e., the course does not directly include CAD or CNC fabrication, although the students will observe the process. However, students will develop the concept, implement the sensing and actuation elements, and develop the control software.

Course Goals

Upon completing this course students will be able to do the following:

  • apply basic electronic theory to build and analyze simple sensor and actuator circuits
  • write Arduino software to implement real-time control of an electromechanical system
  • develop reactive behaviors
  • design state machines for implementing control logic
  • develop a machine prototype through multiple iterations
  • observe good lab discipline and etiquette

Course Resources

The course will be hosted in Carnegie Mellon’s IDeATe Physical Computing Lab. Students will have access to Arduino microcontrollers, a variety of electronic components and test equipment, prototyping supplies, and programming software on university computers. Project materials will be free to students.

Policies

Coming to class is mandatory. The coursework will primarily take place during the lab sessions.

The classroom for the course in the IDeATe Physical Computing Lab in Hunt A10. It is part of the IDeATe@Hunt Collaborative Making Facility and students will be required to follow the IDeATe@Hunt policies.

All lab users are expected to abide by the Physical Computing Lab Policies. The lab inventory of components and materials is available online as a Google Sheet named Physical Computing Lab Inventory.

Calendar

The general plan is as follows:

Week 1
rapid introduction to Arduino microcontroller programming
basic electrical theory and practice
basic physical input/output
Week 2
basic principles of state machine design and programming
actuators and sensors
discussion of pinball concept and history
Week 3
project ideation: what kind of machine(s) will we build?
writing a development and testing plan
basic real-time programming techniques
feasibility experiments
Week 4
design and fabrication of physical structure
ball actuator tests (solenoids, servos, speakers, LED modules)
ball sensor tests (microswitches, photoreflectors)
game or performance software prototype
Week 5
installing actuator systems
installing sensor systems
testing, testing, testing
Week 6
play-testing
software finalization
final documentation
performance and presentation

During the first two weeks of lab sessions we will explore many basic programming and circuit principles via in-class technical exercises. Then the emphasis will shift to developing the implementing the project idea.

The following course calendar will be filled in as we go:

Date Day Class Activity
06/28 Tue 1 Introduction to the Arduino
06/29 Wed 2 Basic Circuit Theory
06/30 Thu 3 Voltage Divider Circuits
07/01 Fri 4 Digital Inputs and Outputs
07/05 Tue 5  
07/06 Wed 6  
07/07 Thu 7  
07/08 Fri 8  
07/12 Tue 9  
07/13 Wed 10  
07/14 Thu 11  
07/15 Fri 12  
07/19 Tue 13  
07/20 Wed 14  
07/21 Thu 15  
07/22 Fri 16  
07/26 Tue 17  
07/27 Wed 18  
07/28 Thu 19  
07/29 Fri 20  
08/02 Tue 21  
08/03 Wed 22  
08/04 Thu 23  
08/05 Fri 24