Push Button Vibrato

Video Tutorial

Project Summary 

In this tutorial we will be adding a button controlled vibrato effect using a photoresistor, LED, and Arduino microcontroller. By using an external circuit for vibrato we are able to free up our LFO for other forms of modulation.  







2 x 1kΩ resistors 

1 x LED


1 x Photocell







1 x Pushbutton





1 x Arduino Microcontroller



1 x 10kΩ Potentiometer


Please download hi res images & Fritzing files for this project HERE.

For this mod we will be using an Arduino Uno micro controller.  The Arduino is based around the ATMEL series of micro processor IC's, and is a very versatile tool across multiple disciplines. Refer to Figure 1 for a closer look at the exact digital and analog I/O configuration for the Arduino. For more information regarding the Arduino please visit arduino.cc

Figure 1. Arduino UNO

This project is an extension of our previous photocell project. By using a microcontroller to control the fade rate of an LED we can simulate a vibrato effect by oscilating the control voltage through a photocell.  First we will need to connect an LED to a PWM pin on the Arduino.  LED's are polarized and the positive leg is longer than the negative leg, Figure 2 shows a diagram. 


Figure 2. LED polarization diagram. 


We will need to place a resistor in between the PWM output and our positive LED leg, this will ensure we don't burn our LED out quickly. Experiment with different values to change the amount of vibrato modulation.  1kΩ is a good value for a multipurpose vibrato effect.  


Next we will want to connect our pushbutton to control when the vibrato effect is on or off.  Most pushbutton legs are connected diagonally when pressed and connected on either side at all times. Figure 3 shows a connection diagram.


Figure 3. Diagonally Green and Blue lines are connected when pressed while vertical Green and Blue lines are always connected. 



Run a signal line from a pushbutton leg to a digital input on the Arduino. We will need to run a pulldown 1kΩ resistor to ground to keep our button reliable.  On the diagonal leg from the signal leg run a jumper to V+ on the Arduino.  


You can share this V+ with the photocell to send a control voltage to the Werkstatt.  Photocell's are non polarized so either leg works for V+.  Finally we will want to place our 10kΩ Potentiometer in the breadboard and connect A to Ground, W to an Analog input, and B to V+.  Figure 4 shows the AWB pot terminal standard. 


Figure 4. A, Wiper, B terminals on a standard potentiometer. 


Now that our pot is wired into our Arduino we can control the overall blinking rate of our LED by turning the pot.  This pot has a similar function to the RATE knob on the Werkstatt when using the LFO as our vibrato modulation. 


We will need to upload our code to the Arduino for this mod to work properly.  To upload simply plug your Arduino into your computer, open vibrato.pde in the Arduino IDE,  and press upload.  As long as the moog_werkstatt library is in the IDE's path, the code will compile and upload. 


This patch is written to be uploaded right out of the box and work, however if you want to make modifications there are several places where that is possible.  The LED pin can of course be changed, just be sure that you are select a PWM output pin.  The rate pin is set to A0 by default, if you change this be sure you select another analog input pin to ensure reading our rate potentiometer is possible. The most dynamic variables to change are the LED low, center, and high settings. 


The low variable sets what the lowest point of brightness of our LED during the vibrato fade.  Center designates what brightness the LED has when the pushbutton is not pressed. High sets the peak brightness of our LED during the vibrato fade.  By default these settings come set to create a vibrato and oscillates up and down around the fundamental frequency.  By changing these you could conceivably create vibrato that only oscillates in one direction, in a reverse order, or with a favoring of a specific direction.  



Fritzing is an open source visual breadboarding software.




The Arduino is a micro controller and programming environment for interactive systems. 



Volume Knob
Fine Tune
LFO Rate Quantizer