Introduction: Arduino Guitar Pedal

Picture of Arduino Guitar Pedal

The Arduino Guitar Pedal is a digital multi-effect pedal based upon the Lo-Fi Arduino Guitar Pedal originally posted by Kyle McDonald. I made a few modifications to his original design. The most noticeable changes are the built-in preamp, and the active mixer stage which lets you combine the clean signal with the effects signal. I also added a sturdier case, foot switch, and rotary switch to have 6 discreet steps between the different effects.

The cool thing about this pedal is that it can be endlessly customized. If you don't like one of the effects, simply program another one. In this way, this pedal's potential is largely dependent upon your skills and imagination as a programmer.

Step 1: Go Get Stuff

Picture of Go Get Stuff

You will need:

(x1) Arduino Uno REV 3 (Radioshack #276-128)
(x1) Make MakerShield Prototyping Kit (Radioshack #276-138)
(x3) 100K-Ohm Linear-Taper Potentiometer (Radioshack #271-092)
(x1) 2-Pole, 6-Position Rotary Switch (Radioshack #275-1386)
(x4) Hexagonal Control Knob with Aluminum Insert (Radioshack #274-415)
(x1) TL082/TL082CP Wide Dual JFET Input Op Amp (8-Pin DIP) (Radioshack #276-1715)
(x2) 1/4" Stereo Panel-Mount Audio Jack (Radioshack #274-312)
(x4) 1uF 63v capacitor (Radioshack #55047191)
(x2) 47uF 16v capacitor (Radioshack #55047280)
(x1) 100pF 50V 10% Hi-Q Ceramic Disc Capacitor (Radioshack #272-123)
(x1) 0.082µf 100V Mylar Capacitor (Radioshack #55046837)
(x1) 5pf 50V Ceramic Disc Capacitor (Radioshack #55047529)
(x6) 10K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1335)
(x2) 1M Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1356)
(x1) 390K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #55049555)
(x1) 1.5K Ohm 1/4W 5% Carbon Film Resistor (Radioshack #271-1120)
(x1) 510K Ohm 1/4W 5% Carbon Film Resistor (Radioshack #55049227)
(x1) 330K Ohm 1/4W 5% Carbon Film Resistor (Radioshack #44049468)
(x1) 4.7K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1330)
(x1) 12K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #55049436)
(x1) 1.2K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #55049409)
(x1) 1K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1321)
(x2) 100K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1347)
(x1) 22K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1339)
(x1) 33K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #55048044)
(x1) 47K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #271-1342)
(x1) 68K Ohm 1/4-Watt Carbon Film Resistor (Radioshack #55049451)
(x1) Heavy-Duty 9V Snap Connectors (Radioshack #270-324)
(x1) 90-Ft. UL-Recognized Hookup Wire (Radioshack #278-1221)
(x1) Enercell® Alkaline 9 Volt Battery (Radioshack #25-853)
(x1) Box 'BB' Size Orange Powder Coat (Small Bear #0301G)
(x1) DPDT Stomp switch (Small Bear #0203)
(x1) 1/8" x 6" x 6" rubber mat
(x1) 1/8" x 12" x 12" cork mat

Step 2: Header Breakdown

Picture of Header Breakdown

Break the male header strip down to fit properly in the Maker Shield kit.

An easy way to do this is to insert the end of the strip into each of the Arduino sockets and then snap off the excess pins. You will end up with 4 strips of proper size.

Step 3: Solder

Picture of Solder

Insert the male header pins into the Maker Shield and solder them into place.

Step 4: Template

Picture of Template

Print out the attached template on full-sheet adhesive paper.

Cut out each of the two squares.

(The file has the pattern repeated twice in case to optimize use of the paper, and in case you need an extra.)

Step 5: Drill

Picture of Drill

Peel off the backing of the adhesive template and stick it squarely on the front of the casing.

Drill all of the crosses with a 1/8" drill bit.

Starting from the left side, widen the first three holes with a 9/32" drill bit.

Widen the last hole of the top row with a 5/16" dill bit.

And then widen the singular hole in the bottom right with a 1/2" spade bit to finish off the front of the case.

Peel off the adhesive template from the front of the case.

Next, stick the next adhesive template to the back edge. In other words, stick it to the edge face most closely abutting the potentiometer holes.

Drill the crosses first with 1/8" holes and then widen them with larger 3/8" holes.

Peel away this template as well, and the case should be ready.

Step 6: Wire the Pots

Picture of Wire the Pots

Attach three 6" wires to each of the potentiometers.

For simplicity's sake, you should attach a black ground wire to the pin on the left, a green signal wire to the pin in the middle, and a red power wire to the pin on the right.

Step 7: Wire the Rotary Switch

Picture of Wire the Rotary Switch

Attach a 6" black wire to one of the inner pins.

Next, attach 6" red wires to the 3 outer pins both to the immediate left and right of the black inner pin.

To be sure you did this right, you may consider testing the connections with a multimeter.

Step 8: Build the Circuit

Picture of Build the Circuit

Start to build the circuit as pictured in the schematic. To see the schematic larger, click the little "i" in the upper right-hand corner of the image.

For now, while building the circuit, do not worry about the potentiometers, rotary switch, bypass switch, and input jacks.

To better understand what you are doing, this circuit consists of a few different parts:

The preamp uses one of the two op amps packaged in the TL082. The preamp is both boosting the guitar signal to line level and inverting the signal. When it comes out of the op amp the signal is split between the Arduino input and the "clean" volume knob for the mixer.

Arduino Input
The input for the Arduino was copied from Kyle's input circuit. It is basically taking the audio signal from the guitar and constraining it to roughly 1.2V, because the aref voltage within the Arduino has been configured to look for an audio signal in this range. The signal is then being sent to analog pin 0 on the Arduino. From here, the Arduino is then converting this to a digital signal using its built in ADC. This is a processor intensive activity and where most of the Arduino's resources are being allocated.

You can get a faster conversion rate and do more multiprocessing of the audio signal using timer interrupts. To learn more about that, check out this page on Arduino Real-Time Audio Processing.

The Arduino is where all of the fancy-shmancy digital signal processing is happening. I'll explain a bit more about the code later. For now, in relation to the hardware, what you need to know is that there is both a 100k potentiometer connected to analog pin 3 and a 6-position rotary switch connected to analog pin 2.

The 6-position rotary switch is functioning in a similar way to a potentiometer, but rather than sweeping through a resistance range, each pin has a discrete resistance associated with it. As you select different pins,  voltage dividers of different values are created.

Since the analog reference voltage had to be remapped to handle the incoming audio signal, it is important to use aref as the voltage source, as opposed to the standard 5V for both the rotary switch and the potentiometer.

Arduino Output
The Arduino output is only loosely based on Kyle's circuit. The part I kept was the weighted pin approach to get the Arduino to output 10-bit audio using only 2 pins. I stuck with his suggested weighted resistor ratings of 1.5K as the 8-bit value and 390K as the added 2-bit value (which is basically 1.5K x 256). From there I scrapped the rest. His output stage components were unnecessary because the audio was not going to an output, but rather to the new audio mixer stage.

Mixer Output
The effects output from the Arduino goes to a 100K pot connected to the audio mixer op amp. This pot is then used in conjunction with the clean signal coming from the other 100K potentiometer to mix the volume of the two signals together in the op amp.

The second op amp on the TL082 is both mixing the audio signals together, and inverting the signal once again to get it back in phase with the original guitar signal. From here the signal goes through a 1uF DC blocking capacitor and finally to the output jack.

Bypass Switch
The bypass switch toggles between the effects circuit and the output jack. In other words, it either routes the incoming audio to the TL082 and the Arduino, or skips all of this entirely and sends the input straight to the output jack without any altering. In essence, it bypasses the effects (and hence, is a bypass switch).

I have included the Fritzing file for this circuit if you want to look at it closer. The breadboard view and schematic view should be relatively accurate. However, the PCB view has not been touched and probably will not work at all. This file does not include the input and output jacks.

Step 9: Cut Brackets

Picture of Cut Brackets

Cut out two brackets using the template file attached to this step. They both should be cut out of non-conductive material.

I cut out the larger base bracket out of a thin cork mat and the smaller potentiometer bracket out of 1/8" rubber.

Step 10: Insert Knobs

Picture of Insert Knobs

Place the rubber bracket on the inside of the case so that it aligns with the drilled holes.

Insert the potentiometers up through the rubber bracket and the 9/32" holes in the case and lock them firmly in place with nuts.

Install the rotary switch in the same fashion in the larger 5/16" hole.

Step 11: Trim

Picture of Trim

If you use long shaft potentiometers or rotary switches, trim them down such that the shafts are 3/8" long.

I used a Dremel with a metal cutting wheel, but a hacksaw will do the job too.

Step 12: Switch

Picture of Switch

Insert the foot switch into the larger 1/2" hole and lock it in place with its mounting nut.

Step 13: Stereo Jacks

Picture of Stereo Jacks

We will be using stereo jacks for what is fundamentally a mono circuit. The reason for this is that the stereo connection will actually serve as the power switch for the pedal.

The way this works is that when mono plugs are inserted into each of the jacks, it connects the batteries ground connection (which is connected to the stereo tab) with the ground connection on the barrel. So, only when both jacks are inserted can ground flow from the battery to the Arduino and completed the circuit.

To make this work, first connect together the ground tabs on each jack with a short piece of wire.

Next, connect the black wire from the battery snap to one of the stereo audio tabs. This is the smaller tab that touches the jack about halfway up the plug.

Connect a 6" black wire to the other stereo tab on the other jack.

Lastly, connect a 6" red wire to the mono tabs on each of the jacks. This is the large tab that touches the tip of the male mono plug.

Step 14: Insert Jacks

Picture of Insert Jacks

Insert the two audio jacks into the two holes in the side of the case and lock them in place with their mounting nuts.

Once installed, check that none of the metal tabs on the jack are touching the body of the potentiometers. Make adjustments as necessary.

Step 15: Wire the Switch

Picture of Wire the Switch

Wire one of the outer pairs of the DPDT stomp switch together.

Wire one of the jacks to one of the center pins on the switch. Wire the other jack to the other center pin.

Connect a 6" wire to each of the remaining outer pins on the switch.

The wire that is in line with the jack on the right should be the input. The wire that is in line with the switch on the left should be the output.

Step 16: Finish the Wiring

Picture of Finish the Wiring

Trim the wires attached to the components installed inside the case to remove any slack before you solder them to the Arduino shield.

Wire them to the Arduino shield as specified in the schematic.

Step 17: Cork

Picture of Cork

Affix the cork mat to the inside of the case's lid. This will keep the pins on the Arduino from getting shorted on the metal of the case.

Step 18: Program

Picture of Program

The code that this pedal is largely built upon ArduinoDSP which was written by Kyle McDonald. He did some fancy things like mess around with the registers to optimize the PWM pins and change the analog reference voltage. To learn more about how his code is working, check out his Instructable.

One of my favorite effects on this pedal is a slight audio (distortion) delay. I was inspired to try creating a delay line after seeing this really simple code posted on Little Scale blog.

The Arduino was not designed for real-time audio signal processing and this code is both memory and processor intensive. The code that is based on the audio delay is especially memory intensive. I suspect the addition of a stand-alone ADC chip and external RAM will greatly improve the ability for this pedal to do awesome things.

There are 6 spots for different effects in my code, but I have only included 5. I have left a blank spot in the code for you to design and enter your own effect. That said, you can replace any slot with any code that you wish. However, keep in mind that trying to do anything too fancy will overwhelm the chip and keep anything from happening.

Download the code attached to this step.

Step 19: Attach

Picture of Attach

Attach the Arduino to the shield inside the case.

Step 20: Power

Picture of Power

Plug in the 9V battery to the 9V battery connector.

Carefully situate the battery snugly between the DPDT switch and the Arduino.

Step 21: Case Closed

Picture of Case Closed

Put the lid on and screw it shut.

Step 22: Knobs

Picture of Knobs

Place knobs onto the potentiometer and rotary switch shafts.

Lock them in place by tightening the set screws.

Step 23: Plug and Play

Picture of Plug and Play

Plug in your guitar to the input, connect an amp to the output, and rock out.


Ffdream62 (author)2017-12-04

Hello ! It looks workable on an Arduino Nano, could you pls confirm me ?

randofo (author)Ffdream622017-12-06

The code would need to be modified to work with a Nano since you are setting the registers on the Atmel chip directly in the code. Honestly, I would not begin to know how to modify the code to work with a Nano. It would require some research.

randofo (author)Ffdream622017-12-06

The code would need to be modified to work with a Nano since you are setting the registers on the Atmel chip directly in the code. Honestly, I would not begin to know how to modify the code to work with a Nano. It would require some research.

ishank13 (author)2017-05-12

hey, can you provide me with a link for the makershield prototyping kit since i cannot find it

ishank13 (author)2017-05-12

hey, i cant find the makershield kit. it seems asif they dont sell them anymore can you provide me a link to n alternate board and if they dont have one do you mind sending me one??

Martino3241 (author)2017-04-28

I've made it, everything seems to be working except the effects themselves. When I select the effect channel using the DPDT switch, the sound is amplified, is more powerful, but no effects are applied on it. The same thing happens independently from the effect selected through the rotary switch. Can you help me?

Soulwyvern1984 (author)2017-04-27

I've looked for Kyle's codes but it said on his instructable that the host took his down, so please where do you find the dsp codes to program the pedal or is this obsolete?

Soulwyvern1984 (author)2017-04-13

I'm just starting to get parts to make this, is all the info up to date and please where do you find the codes to program into the arduino?

MarinaS53 (author)2017-04-12

Could this mono delay code be modified to be a stereo? I want to use this pedal in a drum synth rather than a guitar. So would be interesting to have it stereo.


GabrielS260 (author)2017-02-14

Where is Wprogram.h and Wconstants.h?

randofo (author)GabrielS2602017-02-14

I have not looked at this code in many years, but it seems that the names of these libraries have changed with the new Arduino software:

GabeS27 (author)randofo2017-02-21

Thank You!

foxthedrummer (author)2017-02-04

Hi there!
Trying to make this one and have three things to ask.
First - can you upload a (complete) circuit diagram with input/output wiring, or just say where positive wires from jacks goes?

Second - i want to replace battery with dc power supply - will it be enough just to replace batteries terminals with those of my supply?

Third - i want to use mono female-jacks - and dont care about that feature, described in Step 13 - can i just skip that step?

Thanks in advance ?

randofo (author)foxthedrummer2017-02-05

1) I'm not going to make a panel mount diagram for this project, but the input and the output go to the center pins on the DPDT switch (one on one side, one on the other).

2) Yes. That will work. However, replacing a power supply with a DC wall wart sometimes creates a hum in the signal (generally speaking with guitar pedals).

3) You could leave that out I suppose.

foxthedrummer (author)randofo2017-02-05

Thanks for answering randofo!^)

I already figured it out in practice.(changed battery for dc supply, used mono jacks and found where in and out goes on diagram - probably was blind last time ^^

but...still need ur help

Im using Arduino Leonardo with 32u4 chip, so firstly i refactored code to work with it (replaces 2nd timer for 4th). it compiles - good.

Then built circuit upon corrections from comments and all (two times).

Pots, switch - are OK - checked with serial.

Preamp works well - i can get clear sound and change vol with pot(R9).

BUT arduino do not process any audio. i tried listening the joint after r16 and 15 - no go. Tried to delete all effects but bitcrusher then remove pots-reading-function and hardcode an fx var, while removing switch and pots from circuit - no use.

Now im stucked and thinking that the problem is in boards and pins. May be integrated AREF is done another way on Leonardo or i messed with timers - i dunno. Think of getting one of UNOr#3 boards and try this one on it.

Have u got any suggestions on how to solve it working with leonardo?

Looking for ur answer (btw thanks for soldering lesson - came quite handy^^)

ErickM56 (author)2017-01-21

What modifications are need to work with a bass guitar? Thanks! Great project

DavidE326 (author)2017-01-18

hi ... is ther a project like this one base on raspberry pi

家葦安 (author)2016-11-17

Where is your input and output connect with ??

randofo (author)家葦安2016-11-18

Guitar goes to the input. Output goes to a guitar amp.

家葦安 (author)randofo2016-11-22

may i ask which jack is output and which jack is input?

randofo (author)家葦安2016-11-27

It does not particularly matter, but the one connected to the power jack should probably be input. The signal wires from the jacks get connect to where it says "in" and "out" on the schematic.

家葦安 made it! (author)2016-11-24

what is this wire will connect with? thx

randofo (author)家葦安2016-11-27

That black wire goes to ground.

DanielL497 (author)家葦安2016-11-26

i want to know ,too.please.

Jacobofdz (author)2016-11-21

I cant find the pieces, can somebody help me?

randofo (author)Jacobofdz2016-11-21

If the Radioshack links don't work, you can find all the parts at

GonzaloS18 (author)2016-07-01

You could use a 3PDT. A DPDT is like having two switches (they switch two different things at the same time) together. A 3PDT is like having three of them. So, if you want to bypass the signal processing stuff and send a clean sound, you can also wire the power line that goes into the signal processing circuits for it to be switched along with the effect/clean sound (through that third "extra" switch). That way, the circuit turns off if the effect isn't enabled. Pretty useful if the circuit is ready to go when you turn it on.

Sorry if it's not, just adding some details. If you powered this off a 9V battery, for instance, disabling power would make it last a lot longer.

Carrion Crow made it! (author)2014-07-20

Here's the finished thing. It works but only after I correctly insulated the pots from the casing. See my other comment for the other things I noticed. Mine doesn't have a switched input jack, instead I opted for a 2.1mm power port on the back, the same kind as used by standard effects pedals. I just use a 9V battery with the correct connector.

Be very careful when pushing the knob on your rotary switch as it can break the switch and they are not fun and games to reassemble. I used a sharp blade to cut down the shaft to the right diameter for it to slide on easily and be secured with the screw.

Also make sure your input and output are the right way around when testing. That seems like an obvious statement to make but it is a likely error. The schematic isn't the easiest to comprehend, my method was to go through with a felt tip pen and colour in each link as I soldered it down. This is definitely worthwhile as it reduces the chance of error.

agazda (author)Carrion Crow2016-05-17

Hello. I have been trying to make this pedal for a long time. I have read all of your comments but could you please be more specific.. how did do IT.. maybe could you please make your schematics? Thank you very much!

Carrion Crow (author)agazda2016-05-17

Honestly, I would no longer recommend this project. It gives you a very noisy output. It is a fun project to get used to using amplifiers and the Arduino but ultimately it gives a very poor result with a poor sample rate.

The schematic I use is the same as the one illustrated in this instructable. Are you bread boarding it before committing to veroboard? It's hard to advise without knowing what stage you're currently at with the project.

My recent interest has been using the Raspberry Pi and a USB interface to do guitar effects using Puredata. This blog ( and Google in general has some decent info on this approach.

agazda (author)Carrion Crow2016-05-17

And thank you for your response :)

agazda (author)Carrion Crow2016-05-17

yeah.. i have been trying to breadbord it..

sdike (author)2016-05-11

I can't find the attached template for the holes- can anyone point me to it?

Avelend (author)2016-04-15

Hi, i made this, the circuit is correct (i hope so), but no effects. I have a guitar sound with some sort of distortion sound (signal going through resistors i think) but no sign of arduino work. What kind of problem could it be? And what kind of value should i have in the input?

futhamucka (author)2016-04-11

I made this using the stripboard layout posted in the comments. When I turn the switch on I don't get any guitar sound, I just get a repetitive clicking noise that is not affected by the audio input. This happens whether I have the arduino plugged in or not. The frequency of the clicks increases slightly when I turn up POT 1.

Does anyone have any troubleshooting tips for me?

futhamucka (author)futhamucka2016-04-13

I found the error that was causing the clicking: C6 was not connected to the right strip. I fixed that, but now I'm getting nothing when the switch is turned on.

agazda (author)2016-04-09

Hey. I am starting with arduino. I play guitar and bassguitar.

Can I use something like TDA4050B as the preamplifier?

Thank you very much!

EduardH1 (author)2016-02-08

Do you think it's possible to run timer1 as an LFO while using this sketch?

As far as I see it does not use timer1.

Loick Jouaud made it! (author)2015-12-29

Hi ! This is my Arduino project pedal, it's a MIDI controller for Whammy, which allows to play Muse songs or Dubstep music with a guitar :

Wezmabini (author)2015-12-22

It would be great if we could hear some of the effects (other than the distortion sound in the video)

DonnyB2 (author)2015-10-16

I compiled and uploaded the code without a problem. Changed WConstants.h and WProgram.h to Arduino.h, then no problem.
I get the guitar signal through it with different power/jack-setups, but no effects..
What can be causing this? Please help

ange_pia (author)2015-07-11

Sorry do not quite understand that part of connect the stereo jacks, please you can explain how connects this, Which is the input and output? Thanks

ange_pia (author)2015-07-11

Disculpen no entiendo bien la parte de conectar los jacks, me pueden explicar a donde va cada conexion por favor, gracias

ange_pia (author)2015-06-25

I am using arduino uno. You could explain me, how use the code? That give me many errors about a main class. And others about to incluide files. Thanks

JustinasB (author)2015-05-27

Could someone can give me working code. Im using arduino uno

rwhite19 (author)2015-05-09

Could this pedal be used as a delay pedal or a distortion pedal?

gra_design (author)rwhite192015-05-22

did you watch the video?

bolongo1992 (author)2013-04-02

I've been following this tutorial and I've some issues with the code, I already changed the "WProgram.h" and "WConstants.h" with "Arduino.h" but I still get some errors:

dsp.cpp: In function 'void output(int, short int)':
dsp.cpp:23: error: 'OCR2B' was not declared in this scope
dsp.cpp:24: error: 'OCR2A' was not declared in this scope

I'm using Arduino 1.0.3 and my board is an Arduino Leonardo

mreed30 (author)bolongo19922015-03-20

did you ever find a solution for these errors? I am getting the same errors. tried uploading code with new Arduino software and Android 0021

Hello I am using an Arduino Leonardo as well. First, in new IDE's (mine is 1.5.6 r2) we need to change "WProgram.h" and "WConstants.h" with "Arduino.h" as you said. I realized that if you select that the board is an Arduino one, the code works perfect but when we change the board for an Arduino Leonardo I have the next error

timers.cpp: In function ‘void waveformGenerationMode(int, int)’:

timers.cpp:29: error: ‘TCCR2B’ was not declared in this scope

timers.cpp:30: error: ‘TCCR2A’ was not declared in this scope

Basically your error are mine are the same, the meaning of the error is that the variables are not defined in the header. Then I saw that there is something extrange. The variable is defined as OCR2A in the file timers.h but it is used as TCCR2A in the timers.cpp, somehow Arduino one manages to get this change but the Leonardo dont.

For fixing it, do yo have declared the OCR2A and OCR2B variables in the time.h file?

I dont understand the difference between #define pwm11 OCR2A and int OCR2A = 11; the 2nd one makes more sense for me, even the sintaxis of #define in the time.h file seems to be different to the standard one.

Does someone over here knows what is the difference betwen Arduino one and leonardo in terms of libreries?

About This Instructable




Bio: My name is Randy and I am a Community Manager in these here parts. In a previously life I had founded and run the Instructables ... More »
More by randofo:Large Motor ProjectsRemove a Wheelchair Motor BrakeBuild a Robot
Add instructable to: