What makes a good laboratory assignment?

V. Hunter Adams

Creating a laboratory assignment for a microcontrollers design course is harder than you might think! Designing these labs is a multiobjective optimization problem. No lab is perfect, but this webpage describes the properties that the perfect laboratory assignment would have.

The intended audience for this webpage is 4760 students.

The perfect laboratory assignment . . .

1. is self-motivating

Students often begin a laboratory assignment in a mindset of work. The goal is to get them quickly into the mindset of play. We learn much better when we're playing rather than working!

A laboratory assignment should never ask the student to do anything that’s contrived. Instead, it should ask them to build tools, toys, and devices that are interesting in their own right, completely separate from the techniques and algorithms that are required to create them. These tools, toys, and devices should use the techniques and algorithms of interest in some critical and unavoidable way, so that the student must understand them to actualize the device.

For example, one of the topics that we introduce in ECE 4760 is Direct Digital Synthesis, an algorithm that produces sine waves of a specified frequency. We could introduce this topic via a lab that asks the students to generate a frequency sweep through a speaker, but that's boring and unmotivating. Instead, we can ask the students to use this algorithm to generate birdsongs and cricket chirps.

The students are then motivated to finish not because they want to learn a particular algorithm, but instead because they want to build a birdsong synthesizer! Both a frequency-sweep lab and a birdsong synthesizer lab teach the same topics, but the former is work and the latter is play (for many students).

2. is extensible

At Max Planck's 60th birthday party, Albert Einstein gave a speech. In it, he describes the three personality types that he observes among scientists. I think those personality types also apply to engineers. I'm paraphrasing, but they include include:

  • The competitors: These folks derive great pleasure from setting and achieving goals. Science [engineering] is the domain in which engage in this activity.
  • The artisans: These folks get pleasure from the act of doing science [engineering]. The objective is incidental, it's the process that's enjoyable to them.
  • The searchers: These folks do science [engineering] because the can't not do it. Whether or not they actually enjoy it doesn't particularly matter.

For what it's worth, I think we all have some competitor, artisan, and searcher in us. The relative weights change with age, experience, and circumstance.

A laboratory exercise must have clear enough objectives to satisfy the competitors in the class, but must also be extensible for the artisans in the class. For students that develop deep interests in a particular lab, there must be interesting directions that they can take it that are beyond or adjacent to the written specifications. If any student wants to take an idea from a lab and run with it, there should be interesting places to run to.

(And I have no idea how to appeal to the searchers.)

3. adds new tools to the students' toolbelts

This one is obvious, but not always easy to implement! A new lab should introduce new hardware peripherals, new algorithms, new techniques, etc. But, as explained in the first criterion, it cannot do so in a contrived way. If a lab introduces Direct Memory Access (DMA) to interact with some peripheral, there must be a good reason that DMA is the best idea for interacting with that peripheral. Perhaps, as in the animal flocking lab, DMA frees up CPU time to animate a larger swarm of animals, which looks cooler! Or maybe DMA is the only way to sample the ADC fast enough to see some high-frequency signal in an audio spectrogram.

4. appeals to students with a variety of interests

Electrical and computer engineering is a broad department which includes students that are interested in topics as varied as MEMS design, computer architecture, robotics, digital signals processing, computer graphics, analog circuits, control theory, and more. A particular lab (and, more importantly, the sequence of labs which compose a course) should aim to appeal to students with a variety of interests. The big ones that I aim to hit include audio synthesis and digital signal processing, computer graphics, algorithms, control theory, robotics, and sensor integration/fusion.

5. makes the students notice new things about the world.

This one can be the hardest to achieve, but the most important for long-term information retention. A well designed lab can sometimes fundamentally change the way that a student sees some aspect of the world, or make them notice and appreciate things that they never have before. After the birdsong lab, for instance, students report that they notice birds singing. Previously, birdsong was background noise. After the lab, it's something that they notice and appreciate. The same is true of the the animal flocking lab (students report noticing flocking behavior in nature and movies after this lab).

This criterion is hard to achieve, and seems to never be universal, but when it works it's really valuable.

6. is interesting to the instructor!

This is extremely important!. It makes my job infinitely easier if we’re doing projects that I find fascinating, and I find every one of our lab assignments absolutely fascinating. So much so, in fact, that for each I’ll ask you to indulge me a lecture or a half-lecture just going over what makes these projects cool, and how they connect with the real world (nature, industry, etc.). Being interested in these projects makes them a pleasure to teach, and (hopefully) a pleasure to be taught. Last semester I jokingly described myself as “a guy with a crazy low threshold for wonder.” I think you’ll quickly discover that’s a pretty accurate description of me.

7. is at the correct level of abstraction

Every laboratory exposes some concepts and hides others. The perfect laboratory assignment exposes the "right" concepts, and clearly communicates the concepts that are being hidden. For instance, all of the laboratory assignments use the C SDK for the RP2040. This SDK abstracts away low-level register manipulations to function calls. The lab should ask for the student to use the SDK (otherwise we'd spend weeks getting all the register manipulations right for even the simplest applications), but it should be obvious that, under the hood, these SDK functions are touching registers.

8. is teachable in 2-3 weeks

The definition of "teachable" changes throughout the semester. In the beginning of the semester, it means covering the vast majority of the topics (SDK functions, hardware peripherals, etc.) relevant to the lab in lecture, and discussing how to use datasheets and technical documentation to find information about those topics. As students become more competent with using technical documentation, "teaching" a lab becomes signicantly more high-level.

9. is scalable and maintainable

It must be affordable to procure the materials for 30-50 copies of the lab, and it must be possible to build and store 30-50 copies of the lab in the teaching laboratory. A fully assembled lab musn't take up more than a tabletop, and should be able to be stored compactly. Furthermore, it must be relatively simple to fix the system when it breaks. Modular designs and mechanical connections are good! Avoid glue whenever possible, and utilize off-the-shelf solutions like Legos!