Sveiki puiši, pēdējo nedēļu laikā esmu strādājis, lai atjaunotu saikni ar mīlestību pret ģitāru. Spēlējot ģitāru, es atpūšos dažus gadus atpakaļ, pirms saksofons pārņēma vadību. Atgriežoties pie ģitāras, pēc tam, kad 3 gadus reti grasījos akordu, es atklāju, cita starpā, ka es vairs nezinu, kā katrai no stīgām jāizklausās, sakot to drauga vārdiem: “Mana dzirde vairs nebija noskaņota” kā rezultātā es nevarēju noskaņot ģitāru bez tastatūras vai mobilās lietotnes palīdzības, kuru es vēlāk lejupielādēju. Nedēļas pagāja pirms dažām dienām, kad manis veidotājs kļuva motivēts, un es nolēmu uzbūvēt Arduino balstītu ģitāras skaņotāju. Šodienas apmācībā es dalīšos, kā izveidot savu DIY Arduino ģitāras skaņotāju.
Kā darbojas ģitāras skaņotājs
Pirms mēs pārietam uz elektroniku, ir svarīgi saprast principu, kas ir pamatā. Ir 7 galvenās mūzikas notis, kuras apzīmē ar alfabētiem; A, B, C, D, E, F, G un parasti beidzas ar citu A, kas vienmēr ir oktāvā augstāks nekā pirmais A. Mūzikā pastāv vairākas šo piezīmju versijas, piemēram, pirmā A un pēdējā A. Šīs piezīmes ir atšķirīgi katrs no to variācijas un viens no otra ar vienu no skaņas īpašībām, kas pazīstams kā piķis. Piķis ir definēts kā skaņas skaļums vai mazums, un to norāda ar šīs skaņas biežumu. Tā kā šo piezīmju biežums ir zināms, lai mēs varētu noteikt, vai ģitāra ir noregulēta, mums jāsalīdzina tikai konkrētās stīgas piezīmes biežums ar faktisko notis frekvenci, ko stīga pārstāv.
7 mūzikas notis ir šādas:
A = 27,50Hz
B = 30,87Hz
C = 16,35Hz
D = 18,35Hz
E = 20,60Hz
F = 21,83Hz
G = 24,50 Hz
Katra šo piezīmju variācija vienmēr ir augstumā, kas vienāds ar FxM, kur F ir frekvence un M ir vesels skaitlis, kas nav nulle. Tādējādi pēdējam A, kas, kā aprakstīts iepriekš, ir oktāvā, kas ir augstāks par pirmo A, frekvence ir;
27,50 x 2 = 55Hz.
Ģitārai (Lead / box guitar) parasti ir 6 stīgas, kuras uz atvērtas stīgas apzīmē ar piezīmēm E, A, D, G, B, E. Kā parasti, pēdējais E būs oktāvā augstāks nekā pirmais E. Mēs izstrādāsim savu ģitāras skaņotāju, lai palīdzētu noskaņot ģitāru, izmantojot šo piezīmju frekvences.
Saskaņā ar standarta ģitāras skaņošanu katras stīgas notis un atbilstošā frekvence ir parādīta zemāk esošajā tabulā.
Stīgas |
Biežums |
Apzīmējums |
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 |
Projekts plūsma ir diezgan vienkāršs; mēs pārveidojam ģitāras radīto skaņas signālu frekvencē, pēc tam salīdzinām ar precīzu noskaņotās stīgas frekvences vērtību. Ģitāristam tiek paziņots, izmantojot LED, kad vērtība korelē.
Frekvences noteikšana / pārveidošana ietver 3 galvenos posmus;
- Pastiprinoši
- Ieskaite
- Analogs uz ciparu pārveidošanu (paraugu ņemšana)
Izgatavotais skaņas signāls būs pārāk vājš, lai Arduino ADC to atpazītu, tāpēc mums ir jāpastiprina signāls. Pēc pastiprināšanas, lai saglabātu signālu diapazonā, kuru atpazīst Arduino ADC, lai novērstu signāla sagriešanu, mēs kompensējam signāla spriegumu. Pēc nobīdes signāls tiek nodots Arduino ADC, kur tiek ņemts paraugs, un tiek iegūta šīs skaņas frekvence.
Nepieciešamās sastāvdaļas
Lai izveidotu šo projektu, ir nepieciešami šādi komponenti;
- Arduino Uno x1
- LM386 x1
- Kondensatora mikrofons x1
- Mikrofona / audio ligzda x1
- 10k potenciometrs x1
- O.1uf kondensators x2
- 100 omu rezistors x4
- 10ohm rezistors x1
- 10uf kondensators x3
- 5 mm dzeltena LED x2
- 5 mm zaļa LED x1
- Parasti atveriet spiedpogas x6
- Džemperu vadi
- Maizes dēlis
Shēmas
Pievienojiet komponentus, kā parādīts zemāk esošajā ģitāras skaņotāja shēmas diagrammā.
Spiedpogas ir savienotas bez pievilkšanas / nolaišanas rezistoriem, jo tiks izmantoti iebūvētie Arduino rezistori. Tas ir paredzēts, lai nodrošinātu, ka shēma ir pēc iespējas vienkāršāka.
Arduino kods ģitāras skaņotājam
Šī ģitāras skaņotāja projekta koda algoritms ir vienkāršs. Lai noskaņotu konkrētu stīgu, ģitārists izvēlas stīgu, nospiežot atbilstošo spiedpogu, un nospiež atvērto virkni. Skaņu savāc pastiprināšanas posms un nodod tālāk Arduino ADC. Biežums tiek atšifrēts un salīdzināts. Kad ievades frekvence no virknes ir mazāka par norādīto frekvenci, šai virknei iedegas viena no dzeltenajām gaismas diodēm, norādot, ka virkne ir jāpievelk. Kad izmērītā frekvence ir lielāka par noteikto frekvenci šai virknei, iedegas vēl viena LED. Kad frekvence ir noteiktajā diapazonā šai stīgai, iedegas zaļā LED, lai vadītu ģitāristu.
Pilnīgs Arduino kods ir norādīts beigās, šeit mēs īsi izskaidrojām svarīgās koda daļas.
Mēs vispirms izveidojam masīvu, lai turētu slēdžus.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Pēc tam mēs izveidojam masīvu, lai noturētu atbilstošo frekvenci katrai virknei.
pludiņa frekvence = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // viss Hz
Pēc tam mēs paziņojam tapas, kurām ir pievienotas gaismas diodes, un citus mainīgos, kas tiks izmantoti, lai iegūtu frekvenci no ADC.
int zemāksLed = 7; int augstāksLed = 6; int justRight = 5; #define LENGTH 512 baitu rawData; int skaits;
Nākamā ir funkcija void setup () .
Šeit mēs sākam, iespējojot Arduino iekšējo pievilkšanu katrai tapai, kurai ir pievienoti slēdži. Pēc tam mēs iestatām tapas, kurām LED ir pievienotas kā izejas, un palaižam sērijveida monitoru, lai parādītu datus.
void setup () { for (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (augstāksLed, OUTPUT); pinMode (justRight, OUTPUT); Sērijas sākums (115200); }
Tālāk ir spēkā neesoša cilpa funkcija, mēs ieviešam frekvences noteikšanu un salīdzināšanu.
void loop () { if (skaits <LENGTH) { skaits ++; rawData = analogRead (A0) >> 2; } cits { summa = 0; pd_state = 0; int periods = 0; par (i = 0; i <len; i ++) { // Autokorelācijas summa_vecākā = summa; summa = 0; par (k = 0; k <len-i; k ++) summa + = (rawData-128) * (rawData-128) / 256; // Seriālais.println (summa); // Peak Detect State Machine, ja (pd_state == 2 && (sum-sum_old) <= 0) { periods = i; pd_state = 3; } if (pd_state == 1 && (summa> kulšana) && (summa-summa_old)> 0) pd_state = 2; ja (! i) { kulta = summa * 0,5; pd_state = 1; } } // Frekvence, kas noteikta Hz, ja (kulšana> 100) { frekv_per = parauga_frekvence / periods; Serial.println (frekv_per); par (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 (augstāksLed, AUGSTS); } else { digitalWrite (justRight, HIGH); } } } } skaits = 0; } }
Komplektā kods ar demonstrācijas video ir norādīts zemāk. Augšupielādējiet kodu savā Arduino dēlī un aizlaidieties prom.