Živjo fantje, v zadnjih nekaj tednih sem delal na ponovnem povezovanju s svojo ljubeznijo do kitare. Igranje boksarske kitare se je sprostilo nekaj let nazaj, preden je saksofon prevzel moštvo. Ko sem se vrnil k kitari, sem po treh letih redkega brenkanja z akordom med drugim odkril, da nisem več vedel, kako naj zveni vsaka struna, če rečem po prijatelju: "Moj sluh ni bil več uglašen" in zaradi tega nisem mogel uglasiti kitare brez pomoči tipkovnice ali mobilne aplikacije, ki sem jo kasneje prenesel. Tedni so minili do pred nekaj dnevi, ko se je proizvajalec v meni motiviral in sem se odločil zgraditi Arduino tuner za kitare. V današnji vadnici bom delil, kako zgraditi svoj lasten tuner za kitaro DIY Arduino.
Kako deluje kitarski uglaševalnik
Preden preidemo na elektroniko, je pomembno razumeti načelo gradnje. Obstaja 7 glavnih glasbenih not, ki jih označuje abeceda; A, B, C, D, E, F, G in se običajno končajo z drugim A, ki je vedno v oktavi višji od prvega A. V glasbi obstaja več različic teh opomb, kot sta prva A in zadnja A. Te opombe se med seboj razlikujejo po svoji različici in med seboj po eni od značilnosti zvoka, znanega kot smola. Smola je definirana kot glasnostjo ali lowness zvoka in njene označeno s frekvenco tega zvoka. Ker je pogostost teh opomb znana, moramo zato, da ugotovimo, ali je kitara uglašena ali ne, primerjati le pogostost opombe določenega niza z dejansko frekvenco note, ki jo niz predstavlja.
Frekvence 7 glasbenih not so:
A = 27,50 Hz
B = 30,87 Hz
C = 16,35 Hz
D = 18,35 Hz
E = 20,60 Hz
F = 21,83 Hz
G = 24,50 Hz
Vsaka različica teh opomb je vedno na višini, enaki FxM, kjer je F frekvenca in M celo ničlo število. Tako je za zadnji A, ki je, kot je opisano prej, v oktavi višji od prvega A frekvenca;
27,50 x 2 = 55 Hz.
Kitara (Lead / box kitara) ima navadno 6 strun, označenih z notami E, A, D, G, B, E na odprti struni. Kot ponavadi bo zadnji E na oktavi višji od prvega E. Oblikovali bomo naš kitarski sprejemnik, ki bo pomagal uglasiti kitaro z uporabo frekvenc teh opomb.
Glede na standardno uglasitev kitare je opomba in ustrezna frekvenca vsake strune prikazana v spodnji tabeli.
Strune |
Pogostost |
Zapis |
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 zelo preprost; zvočni signal, ki ga ustvarja kitara, pretvorimo v frekvenco, nato primerjamo z natančno frekvenčno vrednostjo uglašenega niza. Kitarist je obveščen z LED, ko se vrednost ujema.
Zaznavanje / pretvorba frekvence vključuje 3 glavne stopnje;
- Ojačevalni
- Pobot
- Analogno digitalna pretvorba (vzorčenje)
Zvočni signal, ki se proizvaja, bo prešibak, da bi ga Arduino ADC lahko prepoznal, zato moramo signal ojačati. Po ojačitvi smo izravnali napetost signala, da je signal v območju, ki ga prepozna Arduinov ADC, da se prepreči odrezovanje signala. Po izravnavi se signal nato posreduje v Arduino ADC, kjer se vzorči in dobi frekvenca tega zvoka.
Zahtevane komponente
Za gradnjo tega projekta so potrebne naslednje komponente;
- Arduino Uno x1
- LM386 x1
- Kondenzatorski mikrofon x1
- Priključek za mikrofon / zvok x1
- 10k potenciometer x1
- O.1uf kondenzator x2
- Upor 100 ohmov x4
- Upor 10 ohmov x1
- 10uf kondenzator x3
- 5 mm rumena LED x2
- 5 mm zelena LED x1
- Običajno odprti gumbi x6
- Jumper žice
- Breadboard
Sheme
Priključite komponente, kot je prikazano na spodnjem vezju kitarskega uglaševalnika.
Potisni gumbi so povezani brez uporov navzgor / navzdol, ker se bodo uporabljali vgrajeni vlečni upori Arduino. To zagotavlja, da je vezje čim bolj preprosto.
Koda Arduino za kitarski uglaševalec
Algoritem za kodo tega projekta Guitar Tuner je preprost. Da bi uglasil določeno struno, kitarist izbere struno s pritiskom ustreznega gumba in zaigra na odprto struno. Zvok zbira stopnja ojačanja in ga posreduje Arduino ADC. Frekvenca se dekodira in primerja. Če je vhodna frekvenca iz niza manjša od določene frekvence, se za ta niz prižge ena od rumenih LED, ki označuje, da je treba niz zategniti. Ko je izmerjena frekvenca večja od predpisane frekvence za ta niz, zasveti druga LED. Ko je frekvenca znotraj predpisanega območja za to struno, zasveti zelena LED, ki vodi kitarista.
Na koncu je podana celotna koda Arduino, tukaj smo na kratko razložili pomembne dele kode.
Začnemo z ustvarjanjem polja za držanje stikal.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Nato ustvarimo matriko, ki zadrži ustrezno frekvenco za vsak niz.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // vse v Hz
Ko to storimo, nato razglasimo nožice, na katere so priključene LED, in druge spremenljivke, ki bodo uporabljene za pridobivanje frekvence iz ADC.
int lowerLed = 7; int višjiLed = 6; int justRight = 5; #define LENGTH 512 bajtov rawData; štetje int;
Sledi funkcija void setup () .
Tu začnemo z omogočanjem notranjega vlečenja na Arduinu za vsak zatič, na katerega so priključena stikala. Nato nastavimo nožice, na katere so LED diode priključene kot izhode, in zaženemo serijski monitor za prikaz podatkov.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (višjiLed, IZHOD); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Nato je funkcija void loop , izvajamo zaznavanje in primerjavo frekvence.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } sicer { vsota = 0; pd_state = 0; int obdobje = 0; for (i = 0; i <len; i ++) { // avtokorelacija sum_old = sum; vsota = 0; za (k = 0; k <len-i; k ++) vsota + = (rawData-128) * (rawData-128) / 256; // Serial.println (vsota); // Peak Detect State Machine, če (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; če (! i) { prag = vsota * 0,5; pd_state = 1; } } // Frekvenca, določena v Hz, če (prag> 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); } sicer če (freq_per - freqarray> 10) { digitalWrite (višjaLed, VISOKO); } else { digitalWrite (justRight, HIGH); } } } } štetje = 0; } }
Popolna številka s predstavitveni videoposnetek je naveden spodaj. Naložite kodo na svojo ploščo Arduino in zapustite.