The class meets regularly on Tuesdays and Thursdays 10:30-noon Pacific in 123/123/137 Kerckhoff. Unless you have extenuating circumstances, the meetings are mandatory. Most class meetings involve working on exercises and projects. Some meetings will involve live instruction, which is posted on the Schedule overview page.

Course structure

In this course, we provide you with two design challenges. First, you will design and build a pulse oximeter. After completing that project, you will tackle the more challenging project of designing and building a cyclic voltameter. We provide basic specifications and most construction materials for these devices, and it is your job to implement the specification and demonstrate a working prototype.

At the beginning of the term, you will complete a series of exercises to bring you up to speed using the Arduino platform and interfacing with Arduino using Python-based tools. After that, you work on design projects.

You can work at your own pace, but it is your responsibility to have your exercises, projects, and writeups completed according to the due dates on the Schedule overview page. You are working independently, and the course staff is here to help you, but it is your responsibility to keep your projects moving with a good time line.

Course communications

Please use the course Ed page for all communication related to course material. All course announcements will be made using Ed, so please set your alerts appropriately. While the course staff will address student questions, we strongly encourage students to answer and to engage in discussions on the Ed page.

For private matters, such as extension requests, contact the course staff directly using email.


We will be using shared equipment and components in the lab. It is your responsibility to keep everything in good shape and to keep the lab neat.

Submission of exercises and project write-ups

Each project write-up and exercise must be submitted as a ZIP file via email to The files names are for follow-along exercises and for do-it-yourself exercises, where ## it the two-digit exercise number, .e.g., 06 or 14. For the projects, the file names are and If you use bzip2 or gzip, you should use the appropriate suffixes. The subject line of the email is the same as the file name of the ZIP file, minus the .zip.


Each exercise falls into one of three classes.

  1. Thinking exercise

  2. Follow-along exercise

  3. Do-it-yourself exercise

Thinking exercises

In a thinking exercise, you do not need to build anything. They typically are thinking questions or back-of-the-envelope calculations. You do not need to submit anything for thinking exercises; they are for you to ponder on your own and maybe discuss with your classmates and TAs.

Follow-along exercises

In a follow-along exercise, you follow instructions for setting up your board and the code. These are meant to provide an active reading experience as you read through the course materials. Unless otherwise noted, when you submit a follow-along exercise, the following must be included in the ZIP file.

  1. A photo or photos of your board/breadboard.

  2. A brief movie of your circuit functioning. (In lieu of a brief movie, you may show your circuit functioning to a member of the course staff and indicate that you did that in your submission.)

Do-it-yourself exercises

In a do-it-yourself exercise, you apply techniques covered in the course materials and in the follow-along exercises to make your own circuit. These exercises are meant to help you build the expertise you need to complete the projects. When you submit a do-it-yourself exercise, the following must be included in the ZIP file unless otherwise indicated in the exercise statement.

  1. A Jupyter notebook with a write-up of how you went about completing the exercise. This should include a schematic of your ciruit, and also a pictorial schematic if you think it is necessary and/or helpful. You can use Fritzing to make these. You should also include code from any sketches you wrote in your notebook, in addition to including sketches in the ZIP file. This helps with grading. If you interact with your device through JupyterLab, that can also be included in the notebook.

  2. An HTML rendering of the Jupyter notebook.

  3. Any Arduino sketches you wrote.

  4. If you wrote any other code, for example to build a Bokeh app to control your device, include the .py files.

  5. A brief movie of your circuit functioning. (Again, in lieu of a movie, you may show your functioning circuit to a member of the course staff and indicate that on your submission.)

  6. A photo or photos of your board/breadboard if anything is unclear from the movie.

To include Arduino sketches in Jupyter notebooks, use the following syntax in a Markdown cell.

// Enter your sketch code here.

IF syntax highlighting does not properly work, you can instead use C++ highlighting.

// Enter your sketch code here.

Project write-ups

You will complete two major design projects in the course. You will construct a pulse oximeter and a cyclic voltameter. Your goal is to develop a prototype to achieve the provided design specification. Each project has a description on the course website with some background information, overall design specification, and a set of details about the specification.

In designing your project, you also need to design and implement a user interface for controlling the device and acquiring data from it. You can use Bokeh to do this.

The project writeup must include the following in delineated sections, written in a Jupyter notebook.

  • Section 1: Overview. A one- or two-paragraph summary of the design objectives.

  • Section 2: Design and design considerations. Include circuit diagrams and a pictorial representation of the breadboard (which you can make with Fritzing. You should also include a description and rationale behind design choices you made in executing the prototype per specification. These choices also include how you designed the user interface. Discuss potential limitations or trade offs for major design decisions.

  • Section 3: Instructions for use. Instructions on how to use your device.

  • Section 4: Demonstration and assessment. A demonstration of the device’s functionality and assessment of its performance. Metrics for performance should be clearly delineated and assessed.

  • Section 5: Analysis of data. Analysis of any relevant data you acquired from your device. This involves making plots and determining parameters of the biological system you are probing with your device.

  • Section 6: Suggestions for the next design phase. Since you are building a prototype, give a discussion for changes or enhancements to consider in the next phase of design.

In the submitted ZIP file, you must have the following

  1. The Jupyter notebook described above.

  2. An HTML rendering of the notebook.

  3. Any code you wrote outside of the notebook, especially code for the user interface.

  4. A photo or photos of your devices.

  5. A movie of your device functioning. This should also include a video of the user interface in action.

The movies are required for the projects, and you must also demonstrate your functioning device to a member of the course staff.

Collaboration policy

  • You may discuss all of the course material and objectives, including the exercises and projects, with other students in the course. If you get useful help from another student, please be sure to cite them appropriately in your write-up.

  • You may use whatever internet resources you need. If you took substantial ideas from sources outside of the course materials, clearly cite them.


  • 30% of your grade is determined from exercises and 65% of your grade is determined from your projects, with 30% of your grade coming from the pulse oximeter project and 35% from the cyclic voltameter project. The remaining 5% of your grade is determined but your lab technique and citizenship. You need to keep your workspace and the communal space tidy and organized.

  • Each assignment has a defined due date and time. For assignments submitted after this time, you will receive a score of (your score)/2(ceil(number of days late)). The exception is the cyclic voltameter write-up, which will not be accepted late because it is due at the end of the term. Extensions may be granted for good reason upon request from the course instructor.