Introduction: Arduino Guitar Effector

About: A guy who likes to make.

This is an Arduino based guitar preamp+effector. This instructable contains basic information about how to build a circuit on a breadboard and an Arduino code to drive the system. The guitar effects are not implemented here, but some examples can be found from another project of mine: https://www.instructables.com/id/ATTiny44-Guitar-E...

This instructable will illustrate how to get the guitar signal properly through a biased input, and how to use weighted pins for output in order to get signal resolution higher than 10-bits.

Step 1: What You Need for the Circuit

This is everything you need for the breadboard circuit. The list of material will include:

  • LM386
  • any Op-amp (I used what I had at the moment)
  • 2 x 10k resistors
  • 1 x 10 ohm resistor
  • 1 x 1k resistor
  • 1 x 1.2k resistor
  • 1 x 1.5k resistor
  • 1 x 30k resistor
  • 1 x 390k resistor
  • 1 x 10k potentiometer
  • 1 x 0.05 uF capacitor
  • 1 x 0.1 uF capacitor
  • 1 x 2.2 uF capacitor
  • 1 x 47 uF capacitor
  • 1 x 250 uF capacitor

The detailed resistor and capacitor values in the output stage is up to what headphone is going to be used. Also I heavily low-pass filtered the output sound, and different filter design can be experimented for better sound quality.

Step 2: Build the Circuit

Let's make the circuit on a breadboard. You will also need jumpers between the circuit and an Arduino.

  • Two output pins in the diagram goes to D5, D6
  • The input pin goes to A0
  • Vcc and GND from Arduino also connected to the circuit.
  • Guitar input pin is connected to a 1/4" jack.
  • The ground pin on the jack goes to ground in the circuit.
  • Output pin can simply be connected to a headphone with banana clips (or a regular headphone jack can be used)

Step 3: Code

And upload the code below to your Arduino.

void setup()
{

TCCR0B = TCCR0B & 0b11111000 | 1; TCCR0A &= ~B11; TCCR0A |= B011;

pinMode( 5, OUTPUT ); pinMode( 6, OUTPUT );

analogWrite( 5, 0 );

analogWrite( 6, 0 );

analogReference( DEFAULT );

_SFR_BYTE( ADCSRA ) &= ~_BV( ADPS2 );

_SFR_BYTE( ADCSRA ) |= _BV( ADPS1 );

_SFR_BYTE( ADCSRA ) |= _BV( ADPS0 );

}

void loop()

{

int input = ( (analogRead( 0 ) ) * 64 ) - 32768;

if(input>=65536) input = 65535;

if(input<0) input = 0;

unsigned short output = input + 32768;

analogWrite( 5, output >> 8 );

analogWrite( 6, output & 255 );

}

Note: this code is made based on http://pastebin.com/9zphwpvA

Step 4: Play the Guitar

Here is a sample of the preamp. More effects can be implemented by modifying the code in the loop(). For a few other examples please visit my other instructable: https://www.instructables.com/id/ATTiny44-Guitar-E...

Arduino Amp (2) by Sang Leigh