DESIGN CHALLENGE: Make a device to control playback of pre-recorded music. You do not have to build the playback engine, just the physical control device. Your device will send asynchronous serial messages to another device which will play the music. All serial messages should be terminated by a linefeed. The playback device will echo your message back to you as an acknowledgement message when it executes your command. Your device should support the following features:

  • Your device should be operable by a user who cannot see the device.
  • The user should get an acknowledgement when they activate any control.
  • Start or stop the playback of a track (start plays track from the beginning). 
  • Pause or resume playback of a track (resume plays track from last position stopped). 
  • Skip ahead one track in the playlist. 
  • Skip back one track in the playlist. 
  • Fast-forward the current track (double speed of the track). 
  • Skip to a random track in the playlist. 

Make a housing for your controller. 


Because this music controller should be designed for a blind person to be able to use, I decided to follow the standard layout for music player controllers. Here was the initial design I drew, which all of my iterations have in common. 

I wanted the playhead to be central, with "backward" and "forward" buttons grouped around it, and the start/stop and random buttons on either side. I figure the playhead button, as an arrow, can provide directionality for how the entire device should be oriented.

The most challenging part of the assignment was getting p5 and the Arduino to talk to each other. I'd done this a year ago, but had forgotten how it worked, and the p5 Serial communication tools and workflow had changed since then. I ended up supplementing Benedetta and Tom's guide with Angela's tip to open the local server in Incognito. 

Once I understood how p5 Serial worked, the Arduino code was easier to program as well. My process became:

  1. Run the p5 Serial tutorial to ensure the Serial port is working properly 
  2. Test Tom's p5 Music Controller code to make sure it's working with keyboard keys
  3. Merge the p5 Serial tutorial with the p5 Music Controller code
  4. Code the Arduino to Serial.write() the specified number codes when switches are pressed
  5. Update the p5 Music Controller code with the correct port
  6. Run the p5 Serial Monitor GUI (still not sure why we do this)
  7. Run  the p5 sketch in a local server in Incognito mode
  8. Test to ensure the physical Music Playback Controller is effectively controlling the music

Here's a sadly vertical video of the raw device working: 

I ended up with a number of different iterations of this project, and realized that with product design, the number of potential iterations and improvements must be limitless. Eventually I had to stop. 

Big and sloppy! This was a prototype to measure wiring.

This version was housed in a 3" x 9" silverware divider from The Container Store, topped with a piece of laser cut cardboard. After putting it together, I decided I might as well opt for a wood top for a more stable feel. Here's a photo I took of the wiring mess as a reference for keeping my inputs in order for this version. 


This version is internally neater, with wiring trimmed to size and a solid encasing. It's still far from perfect. 

Ultimately this is a straightforward product that I think could be ever-improved. 

Ideally I would love to make my own buttons for this product. I think casting them from silicone or ceramics would be nice- anything that had a tactile sign of its function. I designed the signs on this last prototype to be placed on the actual button, but ultimately decided to put them underneath because wood-covered buttons didn't provide enough assurance that they had been pressed. 

I would also like to incorporate haptic feedback. I started out with haptic feedback, but soon eliminated it because I was spending too much time troubleshooting.