Bok, momci, tijekom posljednjih nekoliko tjedana radio sam na ponovnom povezivanju sa svojom ljubavlju prema gitari. Svirajući box gitaru, opuštam se nekoliko godina prije nego što je saksofon preuzeo vlast. Vraćajući se gitari, nakon 3 godine rijetkog sviranja akorda, između ostalog otkrio sam da više nisam znao kako bi svaka od žica trebala zvučati, da se izrazim riječima mog prijatelja, "Sluh mi više nije bio podešen" i kao rezultat toga, nisam uspio podesiti gitaru bez pomoći tipkovnice ili mobilne aplikacije koju sam kasnije preuzeo. Tjedni su prolazili do prije nekoliko dana kada je proizvođač u meni postao motiviran i odlučio sam izraditi Arduino tuner za gitaru. U današnjem uputstvu podijelit ću kako izraditi vlastiti DIY Arduino tuner za gitaru.
Kako radi gitarski tuner
Prije nego što prijeđemo na elektroniku, važno je razumjeti princip koji stoji iza izrade. Postoji 7 glavnih glazbenih nota označenih abecedom; A, B, C, D, E, F, G i obično završavaju s drugim A koji je uvijek na oktavi veći od prvog A. U glazbi postoji nekoliko verzija ovih nota poput prve A i posljednje A. Ove bilješke razlikuju se svaka od svojih varijacija i jedna od druge po jednoj od karakteristika zvuka poznatom kao visina tona. Smola je definiran kao glasnoće zvuka ili niskosti za njegovo i označeno učestalosti tog zvuka. Budući da je učestalost ovih nota poznata, da bismo utvrdili je li gitara podešena ili ne, trebamo samo usporediti učestalost note određene žice sa stvarnom frekvencijom note koju žica predstavlja.
Frekvencije 7 glazbenih nota su:
A = 27,50Hz
B = 30,87Hz
C = 16,35Hz
D = 18,35Hz
E = 20,60Hz
F = 21,83Hz
G = 24,50 Hz
Svaka varijacija ovih nota uvijek je na visini jednakoj FxM gdje je F frekvencija, a M cijeli nula. Dakle, za posljednju A koja je, kako je ranije opisano, na oktavi višu od prve A, frekvencija je;
27,50 x 2 = 55Hz.
Gitara (Lead / box gitara) obično ima 6 žica označenih notama E, A, D, G, B, E na otvorenoj žici. Kao i obično, posljednji E bit će na oktavi višoj od prvog E. Dizajnirat ćemo naš gitarski tuner kako bismo pomogli uštimavanju gitare pomoću frekvencija ovih nota.
Prema standardnom podešavanju gitare, nota i odgovarajuća frekvencija svake žice prikazana je u donjoj tablici.
| Žice | Frekvencija | Notacija | 
| 1 (E) | 329,63 Hz | E4 | 
| 2 (B) | 246,94 Hz | B3 | 
| 3 (G) | 196,00 Hz | G3 | 
| 4 (D) | 146,83 Hz | D3 | 
| 5 (A) | 110,00 Hz | A2 | 
| 6 (E) | 82,41 Hz | E2 | 

Tok projekt je vrlo jednostavna; zvučni signal koji generira gitara pretvaramo u frekvenciju, a zatim uspoređujemo s točnom vrijednošću frekvencije strune koja se podešava. Gitarist se obavještava pomoću LED diode kada vrijednost korelira.
Detekcija / pretvorba frekvencije uključuje 3 glavne faze;
- Pojačavajući
- Preboj
- Analogno digitalna konverzija (uzorkovanje)
Zvučni signal koji se proizvodi bit će preslab da bi ga Arduino ADC prepoznao pa moramo pojačati signal. Nakon pojačanja, kako bismo zadržali signal unutar opsega prepoznatljivog Arduinovog ADC-a kako bismo spriječili odsijecanje signala, pomaknuli smo napon signala. Nakon offset-a, signal se zatim prenosi na Arduino ADC gdje se uzorkuje i dobiva frekvencija tog zvuka.
Potrebne komponente
Za izgradnju ovog projekta potrebne su sljedeće komponente;
- Arduino Uno x1
- LM386 x1
- Kondenzatorski mikrofon x1
- Priključak za mikrofon / audio x1
- 10k potenciometar x1
- O.1uf kondenzator x2
- Otpor od 100 ohma x4
- Otpor od 10 ohma x1
- 10uf kondenzator x3
- 5mm žuta LED x2
- 5mm zelena LED x1
- Uobičajeno otvoreni gumbi x6
- Žice kratkospojnika
- Breadboard
Sheme
Spojite komponente kao što je prikazano na donjem shematskom dijagramu gitarskog tunera.

Gumbi su spojeni bez pull-up / down otpora jer će se koristiti ugrađeni Arduino otpornici. Ovo je kako bi se osiguralo da je sklop što jednostavniji.

Arduino kod za gitarski tuner
Algoritam koji stoji iza koda za ovaj projekt gitare je jednostavan. Za ugađanje određene žice, gitarist odabire žicu pritiskom na odgovarajući gumb i bubnja svira otvorenom žicom. Zvuk se prikuplja u fazi pojačanja i prosljeđuje Arduino ADC-u. Frekvencija se dekodira i uspoređuje. Kad je ulazna frekvencija iz niza manja od navedene frekvencije, za taj se niz upali jedna od žutih LED dioda koja ukazuje da bi trebalo zategnuti niz. Kad je izmjerena frekvencija veća od propisane frekvencije za taj niz, svijetli druga LED dioda. Kad je frekvencija unutar predviđenog raspona za tu žicu, uključuje se zelena LED dioda koja vodi gitarista.
Kompletni Arduino kôd dan je na kraju, ovdje smo ukratko objasnili važne dijelove koda.
Počinjemo stvaranjem niza za držanje prekidača.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Dalje, kreiramo niz koji sadrži odgovarajuću frekvenciju za svaki niz.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // sve u Hz
Nakon toga deklariramo igle na koje su LED diode povezane i ostale varijable koje će se koristiti za dobivanje frekvencije iz ADC-a.
int nižeLed = 7; int higherLed = 6; int justRight = 5; #define LENGTH 512 bajta rawData; int count;
Sljedeća je funkcija void setup () .
Ovdje započinjemo omogućavanjem unutarnjeg izvlačenja na Arduinu za svaku iglu na koju su spojene sklopke. Nakon toga postavljamo pinove na koje su LED diode spojene kao izlaze i pokrećemo serijski monitor za prikaz podataka.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (higherLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Dalje, je funkcija praznine petlje , mi provodimo otkrivanje i usporedbu frekvencije.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } else { zbroj = 0; pd_state = 0; int razdoblje = 0; for (i = 0; i <len; i ++) { // Automatska korelacija sum_old = sum; zbroj = 0; za (k = 0; k <len-i; k ++) zbroj + = (rawData-128) * (rawData-128) / 256; // Serial.println (zbroj); // Maksimalno otkrivanje državnog stroja 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; ako (! i) { vrš = zbroj * 0,5; pd_state = 1; } } // Frekvencija identificirana u Hz if (thresh> 100) { freq_per = sample_freq / period; Serial.println (freq_per); for (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } else if (freq_per - freqarray> 10) { digitalWrite (higherLed, HIGH); } else { digitalWrite (justRight, HIGH); } } } } count = 0; } }
Kompletan kod sa Videoprezentaciju je dano u nastavku. Učitajte kod na svoju Arduino ploču i odšetajte dalje.

