USB Volume Knob





Introduction: USB Volume Knob

Arduino Contest 2016

Runner Up in the
Arduino Contest 2016

CNC Contest 2016

Runner Up in the
CNC Contest 2016

A USB volume knob enables you to finely tune your music on your computer. Rather than using the keys on the upper right side of my macbook's keyboard I like to use a physical knob. I decided to make my own :)


Step 1: The Electronics

Emulating a keyboard is relatively simple and easy with the help of a Trinket. The Trinket's USB port is used for uploading the code, but you can also use it for some basic USB 1.1 devices (such as a volume control input). Since I wanted to us a physical turning knob I decided to use a rotary encoder as an input.

I decided to buy the Pro trinket, more pins so an expansion later on would be possible.

The rotary encoders pins are connected as seen in the diagram: common pin on ground, "A" signal encoder's pin on pin #0 and "B" on pin #2. For an extra mute function the encoder's last pin is connected to pin #1. I used pin 3, 4 & 5 on the Pro trinket. As long as you make sure the pins correspond to the pins in your code it is ok to switch to a different set.

The next step would be uploading the code and testing. Adafruit made a great turorial on that:

You download the latest Trinket library, install it in Arduino, copy the code from their website (adjust it if you want extra features) and upload the sketch


The 5 enclosure parts were designed in Rhino. Consisting of a bottom and top aluminium case (CNC milled), a wooden cover (CNC milled), an acrylic/aluminium knob and the trinket. Everything is kept together with countersunk hex M3 bolts.

The wooden cover should represent the waves of the sound. These were actually modelled in combination with the CAM generated code for the CNC mill. Inspiration was found in parametrically designed waves.

Step 3: CNC'ing the Wooden Cover With RhinoCAM

In this step by step screenshot overview I will explain the process. All toolpaths were directly created in RhinoCAM and exported to a .iso file; the gcode. This code is then interpreted by my CNC milling machine in Mach3

This short RhinoCAM tutorial is focussing on the main steps of the process. To use RhinoCAM you would also need to setup your machine parameters, tool parameters, cutting parameters (depth of cut, entry and exit of the tool, etc.) and a work zero. This depends of course on the machine, cutting tools and stock material you select.

In the PMB the CNC mill works with toolpaths block or parallel strategy tool paths. This can result in some unwanted texture in the material (the finer the distance between tool path and smaller the cutter, the less texture we will see)I made me look for a different way of milling. Would it be possible to mill each wave in one single toolpath? After some research I found out the Plug-in "RhinoCAM" would allow me to make a code to mill everything in one go. There is a very nice tutorial online explaining the process. The author calls process is called 'IsocurveTexture' and there is a tutorial in these links:

Step 4: NURBS STEP 1 | 2 | 3

Step 1: The curves for the doubled surface was created together with the overall design. I started with a contour curve and 2 guiding curves for a patch surface.

Step 2: The double curved top surface was created with a patch surface, the side with a extrusion form a contour curve and the bottom from a trimmed planar surface. this creates a closed polysurface.

Step 3: The engraving lines are created with the help of a cage editing. A set of polylines is divided into a fixed amount of control points. The cage (black line) edits multiple points at the same time, resulting a in flowing characteristic (blue lines). I've also experimented with grasshopper to create boundary regions (white lines). Later on I decided to use just the singular isocurves in the milling process instead of the boundary regions.


Step 1: selecting your curves and geometry to CNC. From the main design I copied the top cover with all necessary curves into a new file to start the milling operations.

Step 2: Since I was using a thicker peace of Tasmanian Blackwood, I had to reduce the overall thickness of the plank first. This was done in a rough cutting operation. The biggest tool I have (10 mm end mill) mills large bits of material in a spiraling manner. I ended with a rough dome shape. The RhinoCAM simulation shows the final milling paths.

Step 3: A 6 mm ballnose creates the double curved dome shape from the rough blank. In a parallel finishing path (climbing cut to create a good surface finish!) the dome shape was milled. Some light sanding before the next step resulted in a smooth double curved surface.

Step 4: The decorative ripple effect was created with the same ballnose mill. They were created with an engraving toolpath, slightly different from the tutorial. Because of the double curved surface, all ripples seem to fade into the surface.

Step 5: The inner ring and outer contour was cut with a 2.5 mm end mill in a profiling operation. The part was lightly sanded again, removed from the inc machine and finished with some oil and wax.

Step 6: RESULT

The oiled and waxed top cover.


I could have milled the aluminium enclosure on the same machine as the wooden top cover, but I decided to to this on the machine in my university's workshop. Very accurate and fast :)

Step 8: THE KNOB

The knob was turned first in 2 separate part. An acrylic ring first and secondly a aluminium cylinder. Pressed together they formed the knob. I first thought of using a small set screw to mount the knob on the encoder. To not show any imperfections I chose to press fit the knob with a small leaf spring.


I decided to add a NEOPIXEL LED ring to improve aesthetics. The code was adapted to adjust the color of each neopixel according to the position of the volume knob.

All of the effort resulted in a functional and aesthetic desk accessory



  • Epilog Challenge 9

    Epilog Challenge 9
  • Pocket-Sized Contest

    Pocket-Sized Contest
  • Pro Tips Challenge

    Pro Tips Challenge

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




What a disapointment. This Instructable caught my attention because it took the design from the Arduino tutorial and incorporated a neopixel ring. I already have an unused Trinket Pro and some extra neopixel rings, so I thought this would be a great project.

I don't have access to CNC, but that's not a show stopper for me. I can just craft a box and dial in my woodshop, and fill it with the electronics from this Instructable.

Unfortunately, the electronics is where this Instructable falls apart. The author took the USB volume knob from the Arduino tutorial and improved it by adding a Neopixel ring, but they failed to include any information on how that was done. It is very frustrating to see there is no updated code and no updated wiring diagram.

The CNC portion on this Instructable looks very impressive, but the omission of detail for the electronics drags it down.

If the author would update it with the code and an updated wiring diagram, it could be a really great Instructable.

Probably because it's just an led light ring. All he did was give it power.

You seem to have the creativity to craft something in your woodshop and courage to comment on the Instructable, I guess you can also come up with an idea of how to solve the electronics part in your preferred way. If you already decide to create your own enclosure, I've reached my goal with this Instructable; inspiring you to make something! That's whats Instructables is all about, invention!

If I wanted to make a tutorial on how to exactly copy this gadget, I would have uploaded all CAD, CAM and Arduino files. For me it is frustrating to see that some readers are complaining about not getting access to the parts they don't seem to have knowledge about. I would have never been able to make this if I just copied things. You will become a better designer and maker by trying things.

Get out there, use your imagination and practice!

Instructables is about invention, but it is also about learning. Its not just showing of something you invented, it is showing people how they can do it too. It's right there is the site's name: Instruct.

Inspiration is great, but this site is founded on instructing and learning. If you only want to inspire and not instruct, there is already a site for that, its called Pinterest.

You will note I'm not the only one who has asked for the code. That should tip you off that maybe it should have been included. These people aren't just complaining for the sake of it, they've been inspired, but are stuck like me because they don't possess the same knowledge as you. Telling them to "figure it out" is cruel.

I have been learning to code Arduinos, but I'm just beginning. For someone with no programing experience, it is like learning a foreign language. Someday I hope to be to the point where I can conceive an idea and code it from scratch, but that is a long ways off. Looking at other people's code allows someone like me who is still learning to look at it and see how it works! Once I understand how it works, I can use it as-is, or modify it for another project.

Don't think by offering a little hand-holding you are preventing people from learning. It is quite the opposite. Show us how it is done so we can take that knowledge and run with it!

I like this and think that I will make an attempt to make this. Thanks for the instructable.

@Trochilidesign this is a really cool idea. Want to give it a try. Will you be able to share the modified code to accommodate the NeoPixel ring as well as the wiring schematics? Thanks

Question: Does anyone know how to make something like this that
would be able to adjust volume on several programs? As well as change
songs? The useful programs would we windows media player, VLC player,
and then some internet web pages like and

I know people have ripped apart other controllers and made things taht
will change the song or volume while you are on that page, I want to be
able to do it while on other pages.

You can use AutoHotKey which is a scripting program that you could use to tie keyboard (or wheel commands in this case) to programs, key combinations, etc. It is fairly simple and straight forward to learn but can be as complicated as you want it. There is also a huge user community for support and many prewritten scripts you could modify.

You can do that if those softwares accept hotkeys for doing those actions. See, this device act as if it is a keyboard (the wheel that exist on some keyboards, actually). The OS traps the code sent and understands that you want to get volume up or down, and send this command to the system mixer. This mixer is just a software, you can do the same with other programs, but you need to assign a hotkey to that, and send those codes from this device.

Nice project..!!! But most of all, does it go up to "11" ?????