Vactrol – A Lazy Walk

I have a little project coming up that requires a Vactrol at its heart! I searched the internet but cannot seem to find much info about Vactrol based hobby electronics projects. And, seeing as the Vactrols are not easily available nowadays, I had planned to build and test one at home. Well, let us see the slipstreams…

What is a Vactrol?

A Vactrol is a combination of a light depending resistor (LDR) and light source both put into a small light-proof case. In earlier designs incandescent lamps were used as light sources, but today light emitting diodes (LEDs) are commonly used because of certain advantages.

Electrically, Vactrol is a simple resistive opto-isolator (RO) in which a resistance is controlled by the current flowing through the light source. In the dark state, the resistance typically exceeds a few mega Ohm, and when illuminated, it decreases as the inverse of the light intensity. Even though RO is the first and slowest opto-isolator, it’s still used in some audio equipment, guitar amplifiers and analog synthesizers owing to their good electrical isolation, low signal distortion and ease of circuit design.

It is worth noting that RO is called as Vactrol after a generalized trademark introduced by Vactec, Inc. in the 1960s. Further reading

The key advantage of a Vactrol in audio electronics when compared with other solutions is that it acts like a normal Ohm resistor and can handle higher voltages up to the supply rail of the circuitry without causing distortion. However, the exact behavior of a Vactrol depends upon the light receiver (LDR) type and especially from the light-sensitive material used for the LDR.

An impatient move

I expected to find several cheap Vactrols online but found nothing to whet my appetite. While searching online I came across the quite popular Xvive VTL5C3 (Xvive5C3-R) Vactrol (look below) but sadly that ‘fast response’ device is not within my quick reach. So, I decided to make one myself.

A side note: It has been around 24 years since my first experiments with homemade Vactrols began. The first one is the “Tremolo Unit for Electric Guitar” – a little project published later in ‘Electronics for You’ magazine during 1997. Now you can see it in Page 156 of ‘Electronics Projects-Vol.18’ book (https:/ / Also catch another little project “Power Failure Alarm” published here in year 2014 (

I built a couple of Vactrols with the common LEDs and LDRs I had at hand. The LDR is a cheap standard 5mm type GL5528, that you can get in quantities at web shops. I’m not sure what you found to be the best LED. I used a 5mm amber one together with the LDR in a light-tight package. You might need to experiment a bit here. I also tried to design a universal breakout board – good for homemade and ready made Vactrols (see below figure). You could put some female headers on to the breakout board so you can swap in/out Vactrols – ie test in circuit and see how they feel.

Vactrols are a bit hard to buy as they are not a ‘fast moving’ item for most vendors. If you cannot get one, you can build your own with a common LED and LDR. It is very important to make sure that the LED shines directly onto the LDR to obtain maximum coupling efficiency. You will also need black heat-shrink tubing to ensure it is a light-tight construct. For reference, I attached a sample photo (borrowed from web) below.

Testing Vactrols

As previously discussed, I have been building some projects with Vactrols and need to test them quite frequently. I put together the following test circuit to see their operating characteristics.

I used an Arduino Uno as a simple dc voltmeter as you can see in the below schematic.

This is the Arduino Sketch. I know the adopted code presented here can be made into a more refined one to get better outcomes. Hope you do it!


const int readVolt = A0; // A0 to LDR1 – see schematic

int voltValue = 0;

float Vin = 5; // Input voltage – see schematic

float Vout = 0;

float buff = 0;

float buff2 = 0;

float Rref = 1000; // R2 value in Ohms – See schematic (R2 = 1K)

float R = 0;

float R1 = 0;

float R2 = 0;

float R3 = 0;


int x = 0;

const int pwmOut = 10; // D10 to L+ of the LED (see schematic)

void setup(){

pinMode(readVolt, INPUT);




void loop()


for (x=0;x<256;x++) // 0-255 steps (duty cycle increment 0.4)



voltValue = analogRead(readVolt);

buff = (Vin * voltValue);

Vout = (buff)/1024.0;

R1 = (Rref * Vout)/(Vin - Vout);

voltValue = analogRead(readVolt);

Serial.print("analog read is : ");


buff = (Vin * voltValue);

Vout = (buff)/1024.0;

Serial.print("x is: ");


Serial.print("Vout is: ");


R2 = (Rref * Vout)/(Vin - Vout);

voltValue = analogRead(readVolt); // Read R2+VUT potential divider

Serial.print("Analog Read is : ");


buff = (Vin * voltValue);

Vout = (buff)/1024.0;

R3 = (Rref * Vout)/(Vin - Vout);

R=(R1 + R2 + R3)/3;


Serial.print("Resistance Read is: ");





This is a screen capture of the Arduino Serial Monitor. As you can see here, I got results around in KΩ to Ω resistance range, even with a ‘poor’ Vactrol, which might be right for some sort of audio/guitar-effect projects. In general, controlling a Vactrol through a PWM signal works!

As explained in the beginning, my ‘Vactrol’ is a homemade one composed of one 5mm amber (golden yellow) LED and a common 5mm (GL5528) LDR. In the Arduino breadboard setup, a PCB mountable fuse holder served as the ‘black box’ to make the Vactrol nearly light proof. You can see a casual snap of my hardware setup with the uncovered Vactrol, at the end of this post.

Further in the future!

Next thing you can do is to put the values ​​(resistance read) into an array for each step of pwm (x value). I played with this as well but not confident enough to bring you the dirty code yet. If you have finished it to this point, then you can hopefully figure the array concept out. There are a lot of posts on the web about how to do this – you may get some tidbits from this site

The recommended Arduino setup seems a bit subtle if you view it differently from me as you can make the LED steady for a while (see one clue below) and roughly measure the voltage divider at A0.

// LED hard on/off output – Example 1

  analogWrite (pwmout, 255); // LED on

  delay (5000);

  analogWrite (pwmOut, 0);   // LED off

  delay (5000)


// LED hard on/off output – Example 2

digitalWrite (pwmOut, HIGH);

delay (5000);

digitalWrite (pwmOut, LOW);

delay (5000);

Or simply leave the Arduino, power up the test circuit from a regulated 5VDC power source and use a digital multimeter for measurements.

Still lots left to do…

As of this writing, there are still many things to do. Next I need to develop a real DIY project with Vactrol, write codes, test the hardware and software rigorously, and finally build it all up. In the meantime, I hope the write-up here is at least mildly interesting.

Conclusion and pointers for further study

The write-up shared here only scratches the surface, but obviously there is a fertile ground for further experimentation. If you want to learn more about the ideas, check out the following:

Leave a Comment