Syllabus
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 |