USB Volume Control

9,834

202

7

Posted

Introduction: USB Volume Control

Epilog Challenge 9

This is an entry in the
Epilog Challenge 9

First Time Author Contest 2018

This is an entry in the
First Time Author Contest 2018

In this project, we'll build a USB volume control using an Arduino compatible Trinket from Adafruit, and a rotary encoder. Finally, we'll 3D print a housing, fill the base with lead shot to add weight and stability, and laser cut an acrylic bottom cover.

The Arduino code and underlying design were originally found on the Adafruit website. More information can be found Here. The Arduino code will require the Adafruit Trinket libraries, which can be downloaded Here (You'll specifically want the "TrinketHidCombo" library). The actual Arduino code can be downloaded Here.

Step 1: Gather Your Parts

(Hover over the items in the photo for details and links to order):

  • Adafruit Pro Trinket, 5V, 16MHz (be sure to get the 5V version, NOT the 3.3V one).
  • Rotary Encoder (the one shown here is a D-shaft, but there are also encoders with splined shafts, depending on the knob you use)
  • About 2.5" of 5 conductor ribbon cable. Strip and tin the ends as shown in the photo.
  • Five 1/2" long pieces of 1/8" heat shrink tubing.

Step 2: Wiring the Trinket to the Rotary Encoder

The rotary encoder has five pins - three on one side, and two on the other. The two pins on the one side are for the button. They make contact when the encoder's shaft is pressed. This will become the mute function. These pins are not polarity sensitive, and there is no difference in how the button wires connect to them. The three pins on the other side are the signal pins. If you hold the encoder facing the side with the three pins, with the shaft pointing up, the left pin is Signal "A", the center is Common and the right pin is Signal "B". This is also shown on the photo of the data sheet.

Wire the Trinket to the encoder as follows:

  • Trinket Pin #0 to encoder's "A" signal pin.
  • Trinket Pin #1 to one of the encoder's button pins.
  • Trinket pin #2 to encoder's "B" signal pin.
  • Trinket pin 5V to the other encoder button pin.
  • Trinket pin GND to encoder's common pin.

Be sure to slip a piece of heat shrink tubing over each wire before soldering, and slide it as far over the pin as possible before shrinking it. The base will later be filled with lead shot, and these pins need to be as insulated as possible because they will be in contact with the shot when finished.

Step 3: Prepare for Programming the Trinket

Open the Arduino IDE. Download and install the Adafruit Trinket libraries, and the volume control code (links in the beginning of the project). Set the Board Type as "Adafruit Trinket 16MHz", and the Programmer as "USBtinyISP".

The Trinket must be in Bootloader mode in order to upload code to it. When first plugged into the computer's USB port, the green LED will come on steady and the red LED will blink for 10 seconds and then go out. During this 10 second window, the Trinket is in Bootloader mode. You can enter the Bootloader mode at any time by pressing the button at the end of the Trinket opposite the USB port.

I've found that the Arduino IDE takes a bit longer than 10 seconds to compile and verify the code before being sent to the board, so when you send the code to the board, watch the green progress bar in the lower right corner of the IDE window. When it's at the halfway point, press the reset button on the Trinket. The video above shows the green progress bar. When it's about half way, I press the reset button on the Trinket. As long as the green progress bar gets all the way to the right before the 10 second window closes, the Trinket will accept the code. You can see the code transferring by the red LED going solid before turning off. If the transfer doesn't start before the Bootloader time ends, you will see an orange error message on the Arduino IDE. If this happens, just repeat the sequence and try again.

Step 4: Testing the Encoder

Once the programming completes successfully, and the Trinket reboots, you will be able to control your volume with the rotary encoder. Rotating the encoder clockwise should increase your computer's volume, and counter-clockwise should decrease it. Pressing the shaft should mute your computer. If you find that the direction of rotation has the opposite effect (volume increases when it should be decreasing), then you have the encoder "A" and "B" leads reversed. You can either swap the wires at the encoder, or just swap the pin definitions (0 and 2) on lines 3 & 4 of the Arduino code, and then send it to the Trinket again. In the video clip above, you'll see the rotary encoder controlling the volume and mute on the PC.

Step 5: 3D Printing the Base

The 3D Printing file can be downloaded from Thingiverse by clicking Here. I printed it using PLA, 0.15mm layer height and an 0.4mm nozzle. The rectangular block just outside the base in the print file is only used to minimize support material on the outside, since that support would be too thin and tall to remain stable while printing. Use concentric supports everywhere. The only difficult to remove support material is under the bridge that supports the Trinket. I use a combination of small screwdriver, angled tweezers and needle nosed pliers to remove it. It's important to get it out (or at least as much as you can), because that space will later be filled with lead shot.

Step 6: Add the Electronics

Install the Trinket in the base. All of the mounting holes in the 3D printed base are sized for 2-56 screws to self tap. Use two 2-56 x 1/4" screws to fasten the back end of the board. If you want a pack of 100 screws, they can be purchased from McMaster Carr by clicking Here.

Alternatively, if you'd like to buy just what's needed to build your project, a set of screws (for both the Trinket and the bottom cover), as well as the laser cut acrylic cover, rubber feet and optionally the lead shot can be purchased together from my eBay page Here.

Insert the rotary encoder through the hole in the top of the base, add the flat washer and nut and tighten securely.

Step 7: Add Weight to the Base

The base is filled with #7.5 (0.095") lead shot to add weight and stability (about 6 ounces, or 175 gm). This prevents it from slipping around on your desk when you rotate the knob. The lead shot can be purchased Here, in a kit that also includes the base, screws and feet. If you'd prefer to purchase the lead shot alone in larger quantities, it's available in either 1 pound by clicking Here, or two pounds by clicking Here.

Be sure to avoid getting any shot in the cavity where the Trinket is housed. Use angled tweezers to "push" the shot under the bridge, and fill it up to the tops of the bottom plate mounting posts and the walls surrounding the Trinket cavity. Level it out. You want the base to be full enough that it doesn't sound like a maraca when you shake it, but not so much that the bottom cover won't sit flush when installed.

Step 8: Make and Install the Bottom Cover

The DXF file for the bottom cover is included in the Thingiverse page for the base, or click Here for a direct link to the file for the bottom cover. I laser cut it out of 3mm (1/8") acrylic. You can use the same 2-56 x 1/4" screws as you used for mounting the Trinket to attach the bottom cover. Optionally, you can countersink the holes and use flat head screws so the bottom is flush. If you choose to use flat head screws, you can also order a 100 pack from McMaster Carr by clicking Here.

Alternatively, if you'd like to buy just what's needed to build your project, a set of screws (for both the Trinket and the bottom cover), as well as the laser cut acrylic cover, rubber feet and optionally the lead shot can be purchased together from my eBay page Here.

Finish off the bottom by adding four clear rubber feet to prevent slipping.

Step 9: Finish Up

Add a 38mm diameter knob of your choice. The knob I used can be purchased Here. Note that this knob has a set screw, so it is intended to be used with a D-shaft encoder. If you chose to use an encoder with a splined shaft, be sure to select a knob that is for a splined shaft. The knob's shaft hole will have matching splines, and not be smooth. You can choose any knob you like, as long as the outer diameter is 38mm, and it's compatible with the 6mm shaft of your encoder.

Finally, plug your USB cable in, give the computer about 15 seconds to detect the device (the Trinket has to get through its 10 second Bootloader sequence before the PC will detect it), and you're all set.

Share

Recommendations

  • Epilog Challenge 9

    Epilog Challenge 9
  • First Time Author Contest 2018

    First Time Author Contest 2018
  • Sew Warm Contest 2018

    Sew Warm Contest 2018
user

We have a be nice policy.
Please be positive and constructive.

Tips

Questions

6 Comments

This is cool, never thought of having an external control knob like this.

Any particular reason you decided to use a clear acrylic cover for the bottom? I don't have access to a laser cutter, so I would probably just 3D print the cover as well.

I just used the acrylic because I have a laser cutter, and cutting it out of acrylic was easier than printing a cover. Plus, the transparent bottom cover just looks really cool.

What a great idea! I like the concept of adding a little bit of weight. Does the lead shot cause any short for the electricity?

A bit of hot glue in any place that you think might be exposed to shorting with the shot is a good way to insulate things.

That's why the leads of the rotary encoder have heat shrink tubing on them, and why it's important to slide the tubing as far up the lead as possible before shrinking. This leaves just the bend at the top of the lead exposed. So, while there is a slight possibility of contact, it's not likely to cause any issues. I have made five of these so far with not a single incident of malfunction caused by the lead shot. If you're concerned, you could apply a dab of silicone sealant to the exposed tops of the encoder leads. An alternative would be just to cut down slightly on the amount of shot you use. Since the tiny exposed portion of the leads are at the very top of the base cavity when the unit is sitting on your desk, eliminating a small amount of shot would leave an "air pocket" at the top.

Thanks for your comments!