Assignment: Clock Controls

Make the controls for a desk or bedside clock or timer.  At minimum this should include controls to set the hour and minute. Automated time setting is not permitted for this assignment. Your controls should be clear enough that the user can figure out how to set the time without a manual. Here are a few methods for setting the time on a clock.

You should add at least one extra feature to your clock. Consider the following:

Whatever features your clock has, you should provide tangible controls to set and control those features.

Your clock’s display should be as simple as possible. The simplest version might be a serial output to a computer. You could also control a p5.js clock animation. You could also write to an LCD display or LED display. Since this is a one-week assignment, avoid mechanical clocks and focus on the input controls.

Your clock doesn’t have to keep accurate time, but you might consider using the realtime clock on the M0 processor, and the Arduino RTC library. There are several examples using the RTC library in the clock club repository.

Work alone on this. It’s due in week 3.

Assignment: USB Human Interface Device (HID)

Make an alternate HID device for a specific purpose. Consider some of the following as examples:

Most of these provide either limited keyboard messages or mouse messages in order to support specific user capabilities, or specific applications like media control or editing. Consider similar applications. You can build most of these using the Mouse and Keyboard libraries for Arduino, or the HID-Project library also supports additional HID functions, like game controllers, consumer keys (e.g. the media control keys on a laptop keyboard), system keys (e.g. the sleep and power down keys) and more. This repository of Mouse and Keyboard examples may help.

You can make a general controller for a user with differing physical abilities, or you can make an application-specific controller like some of the ones above. Your device should not require additional software drivers on the computer on which it is used — it should show up as a known USB HID device.

Incorporate local feedback in your device so the user knows it’s responding: LEDs, sound, or vibration, as appropriate.

Make a housing for your controller. Document it according to the project documentation guidelines at the end of this page.

You’ll work in pairs on this assignment. It’s due in week 8.

Assignment: Musical Instrument Controller

Make a device to control playback of synthesized or pre-recorded music using MIDI. You do not have to build the playback engine, just the physical control device. Your device will send MIDI messages to another device which will play the music. This set of sound & music exercises may be useful. These lessons on musical theory may help as well.

You won’t be working for yourself on this. We’ll have a set of guest musicians that you’ll work with. Follow their guidance on what an instrument needs, minimum, to be playable.  You’ll work in pairs, each pair from the class working with a guest musician. At the end of the semester, your guest musician will improvise on your instrument for the class.

Your device should support the following features:

    • start and stop the playing of a note
    • play multiple notes simultaneously
    • sustain a note
    • pitch-bend a note


Make a housing for your controller. Document it according to the project documentation guidelines at the end of this page.


For the following assignments, you’ll need a microcontroller that can be programmed to be a USB HID device (keyboard or mouse) or a MIDI Device. Any board with an ARM M0 processor will do the trick:

  • Arduino MKRZero, MKR1000, MKR1010, or other MKR series boards
  • Adafruit Feather M0 boards

Other boards may work as well, but these ones have been tested and are on the floor.

Project documentation Guidelines

Blog posts about your production assignments should include:

  • A short paragraph describing the project
  • Photos and video of the project in action
  • System diagram
  • Circuit diagram/Schematic
  • Links to Source code
  • Any construction drawings you made for laser cutting, CNC, etc.
  • Citation of all example code or example drawings or documentation that you learned from or used