An old VCR head drum was sitting in the bottom of a junk tub for years. I quite like the spin - it's heavy and runs on a couple of smooth bearings. I also wanted to learn about things like optical encoders, gray code and USB. So I put the drum to use as a PC volume control knob.
Everything is open with code, schematic and PCB layout hosted at gitlab.
Here I incorporated some learnings from the intervening years. Upgrades incorporated into the second (current) revision included:
Schematic and PCB layout completely redone but using KiCad instead of Eagle.
Microcontroller changed from an AT90usb162 AVR to an ATmega32U4.
Remove the serial Tx/Rx connector.
Remove the reset tact-switch.
Use smd components instead of through-hole.
Connect with a USB type C connector instead of a USB type B.
Have the PCB fabricated (JLCPCB) instead of the home-made copper-etch method.
A couple of LEDs on the bottom of the PCB purely to visualise the gray code (Rev 1 had LEDs but they only barely shone through etched sections of the PCB).
Generally improved and cleaner code (still using the LUFA library).
In action. The LEDs are a fun way of visualising the gray code.
I love the look, but I don't know if my years as a video repair and maintenance tech would allow me to put my grubby fingers on a drum like that!