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

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
<p>Where is Wprogram.h and Wconstants.h?</p>
<p>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:<br><a href="http://forum.arduino.cc/index.php?topic=147680.0">http://forum.arduino.cc/index.php?topic=147680.0</a></p>
<p>Thank You!</p>
Hi there!<br>Trying to make this one and have three things to ask. <br>First - can you upload a (complete) circuit diagram with input/output wiring, or just say where positive wires from jacks goes?<br><br>Second - i want to replace battery with dc power supply - will it be enough just to replace batteries terminals with those of my supply?<br><br>Third - i want to use mono female-jacks - and dont care about that feature, described in Step 13 - can i just skip that step?<br><br>Thanks in advance ?
<p>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). <br><br>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). <br><br>3) You could leave that out I suppose.</p>
<p>Thanks for answering randofo!^)</p><p>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 ^^</p><p>but...still need ur help</p><p>Im using Arduino Leonardo with 32u4 chip, so firstly i refactored code to work with it (replaces 2nd timer for 4th). it compiles - good.</p><p>Then built circuit upon corrections from comments and all (two times).</p><p>Pots, switch - are OK - checked with serial.</p><p>Preamp works well - i can get clear sound and change vol with pot(R9).</p><p>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.</p><p>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.</p><p>Have u got any suggestions on how to solve it working with leonardo?</p><p>Looking for ur answer (btw thanks for soldering lesson - came quite handy^^)</p>
What modifications are need to work with a bass guitar? Thanks! Great project<br>
<p>hi ... is ther a project like this one base on raspberry pi</p>
<p>Where is your input and output connect with ??</p>
<p>Guitar goes to the input. Output goes to a guitar amp.</p>
<p>may i ask which jack is output and which jack is input? </p>
<p>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.</p>
<p>what is this wire will connect with? thx</p>
<p>That black wire goes to ground.</p>
<p>i want to know ,too.please.</p>
<p>I cant find the pieces, can somebody help me?</p>
<p>If the Radioshack links don't work, you can find all the parts at digikey.com</p>
<p>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 &quot;extra&quot; 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.<br><br>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.</p>
<p>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. </p><p>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.</p><p>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.</p>
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!
<p>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.</p><p>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.</p><p>My recent interest has been using the Raspberry Pi and a USB interface to do guitar effects using Puredata. This blog (https://guitarextended.wordpress.com/audio-effects-for-guitar-with-pure-data/) and Google in general has some decent info on this approach.</p>
And thank you for your response :)
yeah.. i have been trying to breadbord it..
<p>I can't find the attached template for the holes- can anyone point me to it?</p>
<p>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?</p>
<p>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.</p><p>Does anyone have any troubleshooting tips for me?</p>
<p>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.</p>
<p>Hey. I am starting with arduino. I play guitar and bassguitar.</p><p>Can I use something like TDA4050B as the preamplifier?</p><p>Thank you very much!</p>
<p>Do you think it's possible to run timer1 as an LFO while using this sketch? </p><p>As far as I see it does not use timer1. </p>
<p>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 : </p><p><br></p><p>https://www.youtube.com/watch?v=66G0tyxa3vw</p>
<p>It would be great if we could hear some of the effects (other than the distortion sound in the video)</p>
<p>I compiled and uploaded the code without a problem. Changed WConstants.h and WProgram.h to Arduino.h, then no problem.<br>I get the guitar signal through it with different power/jack-setups, but no effects..<br>What can be causing this? Please help<br><br></p>
<p>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</p>
<p>Disculpen no entiendo bien la parte de conectar los jacks, me pueden explicar a donde va cada conexion por favor, gracias</p>
<p>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</p>
<p>Could someone can give me working code. Im using arduino uno</p>
<p>Could this pedal be used as a delay pedal or a distortion pedal?</p>
<p>did you watch the video?</p>
I've been following this tutorial and I've some issues with the code, I already changed the &quot;WProgram.h&quot; and &quot;WConstants.h&quot; with &quot;Arduino.h&quot; but I still get some errors:<br> <br> dsp.cpp: In function 'void output(int, short int)':<br> dsp.cpp:23: error: 'OCR2B' was not declared in this scope<br> dsp.cpp:24: error: 'OCR2A' was not declared in this scope<br> <br> I'm using Arduino 1.0.3 and my board is an Arduino Leonardo
<p>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</p>
<p>Hello I am using an Arduino Leonardo as well. First, in new IDE's (mine is 1.5.6 r2) we need to change &quot;WProgram.h&quot; and &quot;WConstants.h&quot; with &quot;Arduino.h&quot; 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</p><p>timers.cpp: In function &lsquo;void waveformGenerationMode(int, int)&rsquo;:</p><p>timers.cpp:29: error: &lsquo;TCCR2B&rsquo; was not declared in this scope</p><p>timers.cpp:30: error: &lsquo;TCCR2A&rsquo; was not declared in this scope</p><p>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. </p><p>For fixing it, do yo have declared the OCR2A and OCR2B variables in the time.h file? </p><p>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. <a href="http://arduino.cc/en/Reference/Define" rel="nofollow">http://arduino.cc/en/Reference/Define</a></p><p>Does someone over here knows what is the difference betwen Arduino one and leonardo in terms of libreries?</p>
<p>I got the the code running for a Leonardo, the problem was that OCR2A, OCR2B, TCCR2A and TCCR2B references to the timer 2, The arduino Leonardo does not have that timer, then we need to change the timer 2 for one that Leonardo really has. Leonardo has 0, 1, 3, 4 ones (but not 2, weird). Moreover the other timers are not linked to the same pins in Leonardo and in UNO.</p><p>It is necesary to reorganize them.</p><p>Open the file </p><p>/arduino-1.5.6-r2/hardware/arduino/avr/variants/leonardo/pins_arduino.h, </p><p>Mine is linked as following</p><p>TIMER0B,/* 3 */ TIMER3A,/* 5 */ TIMER4D,/* 6 */ TIMER1A,/* 9 */</p><p>TIMER1B,/* 10 */ TIMER0A,/* 11 */ TIMER4A,/* 13 */</p><p>The definitions on the file timers.h must be </p><p>#define pwm3 OCR0B</p><p>#define pwm5 OCR3A</p><p>#define pwm6 OCR4D</p><p>#define pwm9 OCR1A</p><p>#define pwm10 OCR1B</p><p>#define pwm11 OCR0A</p><p> ********and timers.cpp must content the following code: (et voil&agrave;)</p><p>#include &quot;timers.h&quot;</p><p>#include &quot;Arduino.h&quot;</p><p>int getTimer(int pin) {</p><p> switch(pin) {</p><p> case 5: case 6: return 0;</p><p> case 9: case 10: return 1;</p><p> }</p><p> return 2; // 3, 11</p><p>}</p><p>int getChannel(int pin) {</p><p> switch(pin) {</p><p> case 6: case 10: case 11: return 0;</p><p> }</p><p> return 1; // 3, 9, 5</p><p>}</p><p>// - - -- timer settings</p><p>void waveformGenerationMode(int pin, int type) {</p><p> int timer = getTimer(pin);</p><p> int wgm = type == phaseCorrect ? B001 : B011;</p><p> if(timer == 0) {</p><p> TCCR3A &amp;= ~(B1 &lt;&lt; 3); // clear WGM02</p><p> TCCR0A &amp;= ~B11; // clear WGM01 and WGM00</p><p> TCCR0A |= wgm; // set WGM01 and WGM00</p><p> } else if(timer == 2) {</p><p> TCCR0B &amp;= ~(B1 &lt;&lt; 3); // clear WGM23</p><p> TCCR0A &amp;= ~B11; // clear WGM21 and WGM20</p><p> TCCR0A |= wgm; // set WGM21 and WGM20</p><p> } </p><p>}</p><p>void waveformGenerationMode(int pin, int type, int bits) {</p><p> int timer = getTimer(pin);</p><p> if(timer == 1) {</p><p> TCCR1B &amp;= ~(B11 &lt;&lt; 3); // clear WGM13 and WGM12</p><p> TCCR1A &amp;= ~B11; // clear WGM11 and WGM10</p><p> TCCR1B |= (type &lt;&lt; 3); // set WGM12</p><p> TCCR1A |= (bits - 7);</p><p> }</p><p>}</p><p>void timerPrescale(int pin, int prescale) {</p><p> int timer = getTimer(pin);</p><p> if(timer == 0) {</p><p> TCCR3A &amp;= ~B111; // clear CS02 CS01 CS00</p><p> TCCR3A |= getPrescale01(prescale);</p><p> } else if(timer == 1) {</p><p> TCCR1B &amp;= ~B111; // clear CS12 CS11 CS10</p><p> TCCR1B |= getPrescale01(prescale);</p><p> } else if(timer == 2) {</p><p> TCCR0B &amp;= ~B111; // clear CS22 CS21 CS20</p><p> TCCR0B |= getPrescale2(prescale);</p><p> }</p><p>}</p><p>int getPrescale01(int prescale) {</p><p> switch(prescale) {</p><p> case 1: return B001;</p><p> case 8: return B010;</p><p> case 64: return B011;</p><p> case 256: return B100;</p><p> case 1024: return B101;</p><p> default: return B000;</p><p> }</p><p>}</p><p>int getPrescale2(int prescale) {</p><p> switch(prescale) {</p><p> case 1: return B001;</p><p> case 8: return B010;</p><p> case 32: return B011;</p><p> case 64: return B100;</p><p> case 128: return B101;</p><p> case 256: return B110;</p><p> case 1024: return B111;</p><p> default: return B000;</p><p> }</p><p>}</p><p>// - - -- analog prescaling</p><p>void analogPrescale(int divisionFactor) {</p><p> ADCSRA &amp;= ~B111; // clear analog prescale</p><p> ADCSRA |= divisionFactor;</p><p>}</p>
<p>i have the same problem but start's with analogWrite not declared in scoop</p>
use version 20
<p>I have a couple of questions. First would it be possible to add a selector switch to switch the pedal to different effects functions? Then, if this is added, would it then be possible to add an LCD screen to display which function is currently selected? Does anyone who has made this have a video anywhere of them using it that is a little bit more detailed than the one at the top of the post (I am not criticising the video. I understand it is an advert rather than a demonstration)</p><p>I'm looking forward to making it though. </p>
<p>Hi all, I attempted this this week. Some important things:</p><p>1. It will only work if you compile with an older version of the Arduino software. I used version 0021 found here: <a href="http://arduino.cc/en/Main/OldSoftwareReleases" rel="nofollow">http://arduino.cc/en/Main/OldSoftwareReleases</a></p><p>2. The schematic uses a capacitor (C2, 100nF if I remember right) not found in the bill of materials at the top of this article, the only reason I had enough is because I ordered two of everything because I'm experienced at being inexperienced. I used the other 82nF in its place and all was well. </p><p>3. The design relies on you using a switched type of 6mm jack. I ordered non-switched ones because I am a fool. I don't like this method of turning it on and off, I would rather the main switch included more poles and throws so I think my solution will be to buy another foot switch for this build. It would be the easiest to plumb in to the case.</p><p>4. The article doesn't state whether or not you need a special spade bit for metal. I've yet to cut the larger holes in my Hammond enclosure but I would suspect it would make short work of spade bits intended for wood (most of the ones for sale seem to be, otherwise they are prohibitively expensive). I would be tempted to print the enclosure on my reprap in future. I had to phone my father regarding this issue, he's going to email me some tips.</p><p>5. Some pots have a low range over the ADC I think this may be corrected in code somehow. I measured the voltages and they seemed to sweep uniformly between 0 and 5V.</p><p>I'll report back when I've got my case made up and the selector wheel installed.</p>
<p>You could use a &quot;stepped&quot; drill bit to get the holes to size, or use consecutively larger drill bits.</p>
mantap om
<p>I'm so excited to discover this series of DIY pedal posts. I need to to thank you for your time for this particularly wonderful read!! I definitely liked every little bit of it and i also have you book-marked to check out new things. I also have a blog (<a href="http://www.guitarpedal.org" rel="nofollow">www.guitarpedal.org</a>), If you have time to check on it, I will be so happy.</p>
<p>it's possible to activate different effects at the same time? instead of using a rotatory switch, i want to use 3 three-state switch connected for example to D4,D5,D6... and eliminate the A3 pin of the rotatory switch</p>

About This Instructable




Bio: My name is Randy and I founded the Instructables Design Studio. I'm also the author of the books 'Simple Bots,' and '62 Projects to ... More »
More by randofo:Custom Print Kimono Mad Scientist Extension Cord DIY Life-Sized Cardboard Cutout 
Add instructable to: