VC-1: Volume control for guitar using Arduino

As explained here, here and here, the VC-1 is a volume control for guitar (or bass) that can use a potentiometer, a variable analog signal or a Midi command to change the output volume.


In this picture, the blue wires on the left/bottom are for the guitar input and circuit output to the amplifier. The two black round parts are the opto-isolators (LSR) and their control circuit is just above. On the right, the IC is a 6138 optocoupler wired in a standard Midi IN circuit. The picture below shows the whole arrangement.

I just assembled the first VC-1 using a Spikenzielabs Arduino shield and I mounted the components to reduce hum. I added a Midi IN circuit to the shield.

Basically, one PWM pin on the Arduino is controlling the volume. That Arduino pin supplies 0 to 5 Volts (max volume) to the control circuit. The circuit takes care of impedance matching.

Since the control circuit input needs to vary from 0 to 5 Volts, it could be connected directly to +5 volts through a potentiometer and would work the same. That could be used without an Arduino. Leaving the Arduino out will reduce parasitic noise. That little micro-controller can act as a formidable “hum” generator, and even a radio antenna! Component placement is the key here.

The advantage of using the Arduino is that it can process an incoming signal and translate it to the 0-5 V. For example, an analog pin could be used to read a sensor (flex sensor, temperature or whatever) or a potentiometer. This can be translated and calibrated for the output pin.

Another use of the Arduino is Midi. In my test setup, the Arduino receives a Midi signal (Control Change) from a slider on my keyboard and translates the Midi value to a voltage on the output pin.


Here’s the test code:


VC-1: Volume control 1
Copyright Robert Turenne/

This sketch will receive a midi CC to control
the volume of the VC-1 by sending 0-5 Volts to pin 5,
which in turn controls the volume circuit

This sketch is expecting an Arduino Mega 2560 board.

MIDI_CREATE_INSTANCE(HardwareSerial, Serial1, MIDI);

const int volPin = 5; //the pin that will receive the control signal
const int midiCC = 23; //Which MIDI Control Change to react to

void handleCC(byte inChannel, byte CCNumber, byte CCValue)
if (CCNumber = midiCC)
analogWrite(volPin, CCValue*2);

void setup() {

pinMode(volPin, OUTPUT); //use the PWM functionality of this pin
analogWrite(volPin, 255); //default to maximum volume

void loop() {;


I tested the volume control and it is doesn’t seem to affect tone. It’s built to respect impedance. The volume circuit would prefer a low impedance input load but it worked fine with my guitar. I also tested it with a little line buffer and it was fine.

I would recommend using just the necessary wire lengths when placing the circuit in a box to prevent interference.


3 responses to “VC-1: Volume control for guitar using Arduino”

  1. Tyler Avatar

    Are you selling these, if so how much? Can there be a midi in and out?

  2. Jim Darnell Avatar
    Jim Darnell

    Hi and excellent work! I understand that the PWM signal generated by the Arduino controls the 0 to 5V input to the LDR’s. Would it be possible to use a digital to analog converter IC, (or I2R ladder network maybe) instead of the PWM approach to generate the 0 to 5V out from the Arduino? I think the D-A converter may be a “quieter” approach than generating PWM pulses. Thanks and let me know what you think!
    Jim “Chip” Darnell

    1. Hi Jim,
      ANYTHING that generates 0 to 5V can be used to control the LDR stage.I did some tests with a DAC on this circuit and it performed as well as the PWM.Because of the RC circuit on the control side, the circuit on the sound side does not pick up measurable (audible?) parasites.Of course, the more “analog” the control signal, the more transparent the sound. But I just trust my ears…

Leave a Reply

Your email address will not be published. Required fields are marked *