- Paano Gumagana ang Guitar Tuner
- Mga kinakailangang sangkap
- Mga Skema
- Arduino Code para sa Guitar Tuner
Kumusta mga tao, sa huling ilang mga linggo, nagtatrabaho ako sa muling pagkonekta sa aking pag-ibig para sa gitara. Ang pagpapatugtog ng kahon ng gitara ay kung paano ako nakakapagpahinga ng ilang taon bago ang sakup na sakupin. Bumabalik sa gitara, pagkatapos ng 3 taon na bihirang mag-strum ng isang kuwerdas, natuklasan ko kasama ng iba pang mga bagay na hindi ko na alam kung paano dapat tunog ang bawat string, upang ilagay sa mga salita ng aking kaibigan, "Ang aking pandinig ay hindi na na-tono" at bilang isang resulta nito, hindi ko nagawang i-tune ang gitara nang walang tulong ng isang keyboard o isang mobile app na kalaunan ay na-download ko. Ang mga linggo ay dumaan hanggang ilang araw na ang nakararaan nang ang taga-gawa sa akin ay naganyak at nagpasya akong bumuo ng isang Arduino batay sa Guitar Tuner. Sa tutorial ngayon, magbabahagi ako kung paano bumuo ng iyong sariling DIY Arduino Guitar Tuner.
Paano Gumagana ang Guitar Tuner
Bago kami lumipat sa electronics, mahalaga na maunawaan ang prinsipyo sa likod ng pagbuo. Mayroong 7 pangunahing tala ng musikal na tinukoy ng mga alpabeto; A, B, C, D, E, F, G at karaniwang nagtatapos sa isa pang A na palaging nasa isang oktaba na mas mataas kaysa sa unang A. Sa musika maraming mga bersyon ng mga tala na ito ang umiiral tulad ng unang A at ang huling A. Ang mga tala na ito ay nakikilala ang bawat isa mula sa kanilang pagkakaiba-iba at mula sa bawat isa sa pamamagitan ng isa sa mga katangian ng tunog na kilala bilang pitch. Ang pitch ay tinukoy bilang ang lakas o kakulangan ng tunog at ito ay ipinahiwatig ng dalas ng tunog na iyon. Dahil ang dalas ng mga tala na ito ay kilala, upang matukoy namin kung ang tono ng gitara o hindi, kailangan lamang naming ihambing ang dalas ng tala ng partikular na string sa aktwal na dalas ng tala na kinakatawan ng string.
Ang mga frequency ng 7 tala ng musikal ay:
A = 27.50Hz
B = 30.87Hz
C = 16.35Hz
D = 18.35Hz
E = 20.60Hz
F = 21.83Hz
G = 24.50 Hz
Ang bawat pagkakaiba-iba ng mga tala na ito ay palaging nasa isang pitch na katumbas ng FxM kung saan ang F ay ang dalas at ang M ay isang non-zero integer. Kaya para sa huling A na tulad ng inilarawan nang mas maaga, ay nasa isang oktaba na mas mataas kaysa sa unang A, ang dalas ay;
27.50 x 2 = 55Hz.
Ang gitara (Lead / box gitara) ay karaniwang may 6 na mga string na tinukoy ng mga tala E, A, D, G, B, E sa bukas na string. Tulad ng dati, ang huling E ay nasa isang oktaba na mas mataas kaysa sa unang E. Magdidisenyo kami ng aming tuner ng gitara upang matulungan ang pag-tune ng gitara gamit ang mga frequency ng mga tala na ito.
Ayon sa karaniwang pag-tune ng gitara, ang tala at kaukulang dalas ng bawat string ay ipinapakita sa talahanayan sa ibaba.
Mga kuwerdas |
Dalas |
Notasyon |
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 |
Ang daloy ng proyekto ay medyo simple; binago namin ang signal ng tunog na nabuo ng gitara sa isang dalas pagkatapos ihambing sa eksaktong halaga ng dalas ng string na inaayos. Ang gitarista ay aabisuhan gamit ang isang LED kapag ang halaga ay tumutugma.
Ang dalas ng pagtuklas / conversion ay nagsasangkot ng 3 pangunahing yugto;
- Nagpapalaki
- Offsetting
- Analog sa Digital conversion (sampling)
Ang tunog signal na ginawa ay magiging masyadong mahina para makilala ng ADC ng Arduino kaya kailangan nating palakasin ang signal. Pagkatapos ng paglaki, upang mapanatili ang signal sa loob ng saklaw na makikilala ng Arduino's ADC upang maiwasan ang pag-clipping ng signal, pinapalitan natin ang boltahe ng signal. Pagkatapos ng offsetting, ang signal ay ipinapasa sa Arduino ADC kung saan ito ay na-sample at ang dalas ng tunog na iyon ay nakuha.
Mga kinakailangang sangkap
Ang mga sumusunod na sangkap ay kinakailangan upang buuin ang proyektong ito;
- Arduino Uno x1
- LM386 x1
- Condenser Mic x1
- Mikropono / Audio jack x1
- 10k potentiometer x1
- O.1uf capacitor x2
- 100ohms risistor x4
- 10ohms risistor x1
- 10uf capacitor x3
- 5mm dilaw na LED x2
- 5mm berde LED x1
- Karaniwan Buksan ang Mga Push Button x6
- Jumper wires
- Breadboard
Mga Skema
Ikonekta ang mga sangkap tulad ng ipinapakita sa Diagram ng Guitar Tuner Circuit sa ibaba.
Ang mga pindutan ng itulak ay konektado nang walang pull up / down resistors dahil gagamitin ang built in na resistors resistors ng Arduino. Ito ay upang matiyak na ang circuit ay kasing simple hangga't maaari.
Arduino Code para sa Guitar Tuner
Ang algorithm sa likod ng code para sa Guitar Tuner Project na ito ay simple. Upang ibagay ang isang partikular na string, pipiliin ng gitarista ang string sa pamamagitan ng pagpindot sa kaukulang pushbutton at strums na tumutugtog ng isang bukas na string. Ang tunog ay nakolekta sa pamamagitan ng yugto ng paglaki at ipinasa sa Arduino ADC. Ang dalas ay na-decode at inihambing. Kapag ang dalas ng pag-input mula sa string ay mas mababa sa tinukoy na dalas, para sa string na iyon ang isa sa mga dilaw na LED ay nagmumula na nagpapahiwatig na ang string ay dapat na higpitan. Kapag ang sinusukat na dalas ay mas malaki kaysa sa tinukoy na dalas para sa string na iyon, ang isa pang LED ay darating. Kapag ang dalas ay nasa loob ng itinakdang saklaw para sa string na iyon ang berdeng LED ay pumupunta upang gabayan ang gitarista.
Ang kumpletong Arduino code ay ibinibigay sa dulo, dito namin maikling ipinaliwanag ang mga mahahalagang bahagi ng code.
Nagsisimula kami sa pamamagitan ng paglikha ng isang array upang hawakan ang mga switch.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Susunod, lumikha kami ng isang array upang hawakan ang kaukulang dalas para sa bawat isa sa mga string.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // lahat sa Hz
Sa tapos na ito, idedeklara namin ang mga pin kung saan nakakonekta ang mga LED at iba pang mga variable na magagamit para sa pagkuha ng dalas mula sa ADC.
int lowerLed = 7; int mas mataasLed = 6; int justRight = 5; #define LENGTH 512 byte rawData; int count;
Susunod ay ang void setup () na pagpapaandar.
Nagsisimula kami dito sa pamamagitan ng pagpapagana ng panloob na paghila sa Arduino para sa bawat isa sa mga pin kung saan nakakonekta ang mga switch. Pagkatapos nito ay itinakda namin ang mga pin kung saan ang mga LED ay konektado bilang mga output at ilunsad ang serial monitor upang maipakita ang data.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (mas mataas naLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Susunod, ay ang void loop function, ipinapatupad namin ang detection ng dalas at paghahambing.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } iba pa { sum = 0; pd_state = 0; int period = 0; para sa (i = 0; i <len; i ++) { // Autocorrelation sum_old = sum; kabuuan = 0; para sa (k = 0; k <len-i; k ++) kabuuan + = (rawData-128) * (rawData-128) / 256; // Serial.println (kabuuan); // Peak Detect State Machine kung (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } kung (pd_state == 1 && (sum> thresh) && (sum-sum_old)> 0) pd_state = 2; kung (! i) { thresh = sum * 0.5; pd_state = 1; } } // Frequency na kinilala sa Hz kung (thresh> 100) { freq_per = sample_freq / period; Serial.println (freq_per); para sa (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == TAAS) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } iba pa kung (freq_per - freqarray> 10) { digitalWrite (higherLed, HIGH); } iba pa { digitalWrite (justRight, HIGH); } } } } bilangin = 0; } }
Ang kumpletong code na may isang demonstration video ay ibinibigay sa ibaba. I-upload ang code sa iyong Arduino board at strum ang layo.