You are on page 1of 15

## Guitar Tuner (/) With an Arduino

By EE421ACDC (/member/EE421ACDC/) in Technology (/technology/) > Arduino (/technology/arduino/) 7.865 20 5 Featured

## (https://cdn instructables com/F78/MTV3/J20PJQ1H/F78MTV3

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 1/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

## (https://cdn instructables com/F60/3YNM/J20PJQ0R/F603YNMJ20PJQ0R LARGE jpg)

Pitch is everywhere, but what exactly is it? This website will document the steps to create
your very own Arduino guitar tuner.

## (https://cdn instructables com/FR4/PEGI/J1V7VBVZ/FR4PEGIJ1V7VBVZ LARGE gif)

Pitch, which is often thought of as how high or low a sound is, can be de ned as the
human perception of frequency. It is clear that humans can not detect frequency with the
naked ear, however, our natural idea of pitch can get us most of the way there. Pitches are
denoted by the seven letters A,B,C,D,E,F,G and A which is one octave above the initial A
with a frequency of 2A. If we look at the keys of a piano we see a repetition of those same

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 2/15
27/02/2019 musical notes. Each set of eight notes is known
Guitar Tuner asArduino:
With an
Guitar Tuner With an Arduino by EE421ACDC (/member/EE421ACDC/)
Follow
an octave and(with
Pictures) can be at Favorite
(lower) or sharp (higher) than the ideal pitch frequency. Lets take a look at rather small
frequencies between 50 and 0.

## Starting with C the frequencies are, C0 = 16.35, D0 = 18.35, E0 = 20.60, F0 = 21.83, G0 =

24.50 A0 = 27.50, B0 = 30.87 all in HZ. We de ne a pitch as any multiple of the zero
frequency i.e. A*N where N is any real number greater than 0. That means that 55.00 HZ,
110 HZ, 220 Hz, ... are all considered musically A. The same goes for the remaining G
through B. Using these repeating domains allows us to convert any input frequency (in
Hertz) to it's corresponding pitch.

We were not given this natural ability to perfectly detect pitch or frequency, but with
technology and our understanding of signals, this can be done. This demonstration will
outline how AC/DC achieved a means to detect the pitch of a guitar string through
frequency analysis.

## (https://cdn instructables com/FPF/8TJR/J20PGD3O/FPF8TJRJ20PGD3O LARGE jpg)

This image indicates the frequency layout for any note the guitar signal might produce.
These ranges allow the user to tell if the note being played is sharp or at, and this is
displayed in a later video.

## Step 3: Building the Amplifying Circuit

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 3/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

## (https://cdn instructables com/F6K/2AMR/J20PGGTV/F6K2AMRJ20PGGTV LARGE jpg)

How exactly do we get frequency from a raw input sine wave? We'll get into how the
Arduino handles the conversion later, for now, lets build the input circuit. The input is taken
directly from the audio jack which intern receives the signal through the audio cable from
the inductive pickups located on the guitar. We need to collect the signal and then amplify
it, after that the raw voltage value is inputted into the board as an analog input to be
processed.

1) Lets begin by building the op-amp circuit. Take the time to gather all the components
listed below.

## (x1) lots of wire/jumpers

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 4/15
27/02/2019 (x1) bread board/ prototyping board
Guitar Tuner With an Arduino: 8 Steps (with Pictures)
Guitar Tuner With an Arduino by EE421ACDC (/member/EE421ACDC/)

NOTE: The Op Amp circuit takes the sound waves and increases the amplitude, so that the
Arduino can read it easily. The waveform without it would not be in the detectable range of
the Arduino of 0 to 5V. It then sends the signal into the Arduino to be sampled, which then
samples the frequency of the sound waves, and records it on the serial port so the user can
see.

## Step 4: Design and Construction of LCD Circuit

(https://cdn instructables com/FPA/FTIL/J20PGRZE/FPAFTILJ20PGRZE LARGE jpg) (https://cdn instructables com/FSF/UL2C/J20PGS0P/FSFUL2CJ20PGS0P LARGE jpg)

We need some way to out put the processed data from the arduino, for this Guide we will
be using the following schematic to output with the 16x2 LCD display. For this you will use
the same arduino connected to the op-amp circuit as well as;

## (x1) 10 kOhm potentiometer for the LCD back-light

(x1) large value resistor (for power to the LCD) we used 22 kOhm.

more wires...

and that's it. This is pretty simple, just connect the wires in the same way that they are
shown in the schematic.

NOTE: We used a 10 kOhm potentiometer as a variable resistor to adjust the gain of the op
amp. The gain is the amplitude of the output voltage divided by the amplitude of the input
voltage.

## Step 5: Full Pitch Detection Circuit

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 5/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

This video shows the full circuit put together, walks through the schematic and parts list,
and goes over important parts of the code.

## Step 6: Lets Code This Thing!

//Free for use and modi cation //Written by: Noah St. Pierre and Ethan Gibson //Credit for
frequency detection code to: //https://github.com/akellyirl/Arduino-Guitar-Tuner // include
the library code: #include

## #de ne LENGTH 512

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 6/15
27/02/2019 byte rawData[LENGTH]; int count; char
Guitar noteName;
Tuner With an Arduino: 8 Steps (with Pictures)
Guitar Tuner With an Arduino by EE421ACDC (/member/EE421ACDC/)

## // Sample Frequency in kHz const oat sample_freq = 8919;

int len = sizeof(rawData); int i,k; long sum, sum_old; int thresh = 0; oat freq_per = 0; byte
pd_state = 0;

//Base 0 octave frequencies // oat freq = 415; // dont neet this oat Ffreq; oat Note;

char testput; String out = “b—-[[ ]]—-#”; int octave_counter; oat C = 16.35; oat D =
18.35; oat E = 20.60; oat F = 21.83; oat G = 24.50; oat A = 27.50; oat B = 30.87;

// initialize the library with the numbers of the interface pins //Pin 12 = RS //Pin 11 = E //Pin
5 = DB4 //Pin 4 = DB5 //Pin 3 = DB6 //Pin 2 = DB7 LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

## analogReference(EXTERNAL); // Connect to 3.3V analogRead(A0);

//string output = 0; // set up the LCD’s number of columns and rows: lcd.begin(16, 2);
lcd.setCursor(0,0); lcd.print(” EE421: Signals”); lcd.setCursor(0,1); lcd.print(” Guitar Tuner”);
delay(3000); lcd.clear(); lcd.setCursor(2,0); lcd.print(“[“); lcd.setCursor(13,0); lcd.print(“]”); //
Print a message to the LCD.

count = 0; } oat freq; void loop() { if (count < LENGTH) { count++; rawData[count] =
analogRead(A0)>>2; } else { sum = 0; pd_state = 0; int period = 0; for(i=0; i < len; i++) { //
Autocorrelation sum_old = sum; sum = 0; for(k=0; k < len-i; k++) sum += (rawData[k]-128)*
(rawData[k+i]-128)/256; // Serial.println(sum);

## // Peak Detect State Machine if (pd_state == 2 && (sum-sum_old) <=0) { period = i;

pd_state = 3; } if (pd_state == 1 && (sum > thresh) && (sum-sum_old) > 0) pd_state = 2; if
(!i) { thresh = sum * 0.5; pd_state = 1; } } // for(i=0; i < len; i++) Serial.println(rawData[i]); //
Frequency identi ed in Hz if (thresh >100) { freq_per = sample_freq/period;
//Serial.println(freq_per);

//Filter out frequencies that are too high to matter if(freq_per < 400) { freq = freq_per; } else
{ freq = -1; }

## if((15.89<=Ffreq) & (Ffreq<=17.34)){ Note = C; noteName = ‘C’; } else if((17.35<=Ffreq) &

(Ffreq<19.475)){ Note = D; noteName = ‘D’; } else if((19.475<=Ffreq) & (Ffreq<21.215)){
Note = E; noteName = ‘E’; } else if((21.215<=Ffreq) & (Ffreq<23.185)){ Note = F; noteName
= ‘F’; } else if((23.185<=Ffreq) & (Ffreq<26.00)){ Note = G; noteName = ‘G’; } else
if((26.00<=Ffreq) & (Ffreq<29.185)){ Note = A; noteName = ‘A’; } else if((29.185<=Ffreq) &
(Ffreq<31.785)){ Note = B; noteName = ‘B’; }

## oat closeness0 = (Ffreq/Note); int cl1 = 0; cl1 = int((closeness0-1)*100); // round to

nearest whole number if(Ffreq==Note){out = “b—-[[ ]]—-#”;} else if(cl1==-1) out = “b—-[[ ]]
—-#”; else if(cl1==1) out = “b—-[[ ]]—-#”; else if(cl1==-2) out = “b—<<< >—–#”; else
if(cl1==2) out = “b—–< >>>—#”; else if(cl1==-3) out = “b–<<<< >—–#”; else if(cl1==3) out

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 7/15
27/02/2019 = “b—–< >>>>–#”; else if(cl1==-4) outTuner
Guitar = “b-<<<<< >—–#”;
With an Arduino:
Guitar Tuner With an Arduino by EE421ACDC (/member/EE421ACDC/)
Follow
else(with
8 Steps if(cl1==4)
Pictures)out = “b—–<
>>>>>-#”; else if(cl1==-5) out = “b<<<<<< >—–#”; else if(cl1==5) out = “b—–< >>>>>>#”;
} else{ Ffreq = -1; } // -1 one for too low // count++;

## lcd.setCursor(3,0); lcd.print(freq); lcd.setCursor(11,0); lcd.print(“Hz”); lcd.setCursor(0,1);

lcd.print(out); lcd.setCursor(7,1); lcd.print(noteName); lcd.setCursor(8,1);
lcd.print(octave_counter); }

oat getFfreq( oat freq){ octave_counter++; if(freq > B){ return getFfreq(freq/2);} else return
freq; }

## Step 7: Video Demonstration

This video consists of Ethan running through tuning process with our electric guitar tuner
and comparing its results with a commercial guitar tuner.

## Arduino Electric Guitar Tuner (LCD Closeup)

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 8/15
27/02/2019
Guitar Tuner With an Arduino by EE421ACDC (/member/EE421ACDC/) Follow |
Guitar Tuner With an Arduino:
Comment
8 Steps (with Pictures)

Step 8: References

The construction of the LCD circuit was setup and designed from an online tutorial from the
following linked web page. This link also includes the circuit schematics for the LCD circuit.

https://www.arduino.cc/en/Tutorial/HelloWorld
(https://www.arduino.cc/en/Tutorial/HelloWorld)

The electric guitar signal amplifying circuit was developed with aid of another Instructable.
The link contains the corresponding circuit diagrams.

https://www.instructables.com/id/Arduino-Guitar-Tuner/
(https://www.instructables.com/id/Arduino-Guitar-Tuner/)

## Additional online resources used for Arduino frequency detection:

http://www.akellyirl.com/arduino-guitar-tuner/
(http://www.akellyirl.com/arduino-guitar-tuner/)

http://www.akellyirl.com/reliable-frequency-detection-using-dsp-techniques/
(http://www.akellyirl.com/reliable-frequency-detection-using-dsp-techniques/)

https://github.com/akellyirl/Arduino-Guitar-Tuner (https://github.com/akellyirl/Arduino-
Guitar-Tuner)

## Thanks for reading our Instructable, we hope you enjoy it!

Share
Did you make this project? Share it with us!

Recommendations

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 9/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

(/id/Vintage-Look-Media-PC/)

## Vintage Look Media PC From an Old Laptop (/id/Vintage-Look-Media-PC/)

by diyperspective (/member/diyperspective/) in Technology (/technology/)

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 10/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

(/id/Ever-Blooming-Mechanical-Tulip/)

## Ever Blooming Mechanical Tulip (/id/Ever-Blooming-Mechanical-Tulip/)

by jiripraus (/member/jiripraus/) in Arduino (/technology/arduino/)

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 11/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

(/id/Crazy-Circuits-an-Open-Source-Electronics-Learning/)

## Crazy Circuits: an Open Source Electronics Learning System (/id/Crazy-Circuits-an-Open-Source-Electronics-Learning/)

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 12/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

(/class/Arduino-Class/)

## Arduino Class (/id/Arduino-Class/)

77,829 Enrolled

(/contest/organize19/)

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 13/15
27/02/2019 Guitar Tuner With an Arduino: 8 Steps (with Pictures)

(/contest/epilog10/)

(/contest/remix2019/)

| Post Comment

## We have a be nice policy.

5 Discussions

Hey! The coding is making a lot of 'errors' pop up on my Arduino site, any suggestions?

ВалерийЛ
(/member/%25D0%2592%25D0%25B0%25D0%25BB%25D0%25B5%25D1%2580%25D0%25B8%25D0%25B9%25D0%259B3/) (/member/
Question

Good afternoon. Why is not the code you wrote written compiled? A lot of mistakes. Do you need any

https://www.instructables.com/id/Guitar-Tuner-With-an-Arduino/ 14/15
27/02/2019
Guitar Tuner With an Arduino(/member/Swansong/)
Guitar
Swansong
by EE421ACDC (/member/EE421ACDC/)
Tuner With an Arduino:
(/member/Swansong/)
Follow
1 year 8 Steps (with Pictures) Reply
ago
Favorite

Post Comment

## Categories About Us Resources Find Us

Technology (/technology/) Who We Are Residency Program
Craft (/craft/) Why Publish? 9/residency/home) (http://www.instagram.com

## Home (/home/) (/create/) Community (/topics/)

Food (/food/) Jobs Sitemap (/sitemap/)
Play (/play/) (/topics/Positions- Help (/id/how-to-write-a- (http://www.pinterest.com/

## Outside (/outside/) available-at- great-instructable/)

Costumes (/costumes/) Instructables/)
Contact
(/contact/)