Hai kawan-kawan, sejak beberapa minggu kebelakangan ini, saya berusaha untuk menghubungkan semula dengan cinta saya terhadap gitar. Bermain gitar kotak adalah bagaimana saya berehat beberapa tahun yang lalu sebelum saksofon mengambil alih. Kembali ke gitar, setelah 3 tahun jarang memetik kord, saya mendapati antara lain bahawa saya tidak lagi tahu bagaimana setiap tali harus berbunyi, untuk memasukkannya ke dalam kata-kata rakan saya, "Pendengaran saya tidak lagi disetel" dan Akibatnya, saya tidak dapat menala gitar tanpa bantuan papan kekunci atau aplikasi mudah alih yang kemudian saya muat turun. Minggu berlalu hingga beberapa hari yang lalu ketika pembuatnya menjadi termotivasi dan saya memutuskan untuk membina Guitar Tuner yang berpusat di Arduino. Dalam tutorial hari ini, saya akan berkongsi cara membina DIY Arduino Guitar Tuner anda sendiri.
Bagaimana Penala Gitar Berfungsi
Sebelum kita beralih ke elektronik, penting untuk memahami prinsip di sebalik pembuatannya. Terdapat 7 nota muzik utama yang dilambangkan dengan huruf; A, B, C, D, E, F, G dan biasanya diakhiri dengan A lain yang selalu berada di oktaf lebih tinggi daripada A. yang pertama. Dalam muzik, beberapa versi nota ini wujud seperti A pertama dan yang terakhir A. Nota-nota ini masing-masing dibezakan dari variasi mereka dan satu sama lain dengan salah satu ciri bunyi yang dikenali sebagai nada. Pitch didefinisikan sebagai kelantangan atau rendahnya suara dan ini ditunjukkan oleh frekuensi suara itu. Oleh kerana frekuensi nota ini diketahui, untuk kita menentukan sama ada gitar disetel atau tidak, kita hanya perlu membandingkan frekuensi not tali tertentu dengan frekuensi sebenar nota yang ditunjukkan oleh rentetan.
Kekerapan 7 nota muzik adalah:
A = 27.50Hz
B = 30.87Hz
C = 16.35Hz
D = 18.35Hz
E = 20.60Hz
F = 21.83Hz
G = 24.50 Hz
Setiap variasi nota ini selalu berada pada nada yang sama dengan FxM di mana F adalah frekuensi dan M adalah bilangan bulat bukan sifar. Oleh itu untuk A terakhir yang seperti yang dijelaskan sebelumnya, berada pada oktaf lebih tinggi daripada A pertama, frekuensi adalah;
27.50 x 2 = 55Hz.
Gitar (Gitar timah / kotak) biasanya mempunyai 6 tali yang dilambangkan dengan nota E, A, D, G, B, E pada tali terbuka. Seperti biasa, E terakhir akan berada di oktaf lebih tinggi daripada E. pertama. Kami akan merancang penala gitar kami untuk membantu menala gitar menggunakan frekuensi nota ini.
Menurut penalaan gitar standard, nota dan frekuensi yang sesuai bagi setiap rentetan ditunjukkan dalam jadual di bawah.
Rentetan |
Kekerapan |
Notasi |
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 |
The aliran projek adalah agak mudah; kami menukar isyarat bunyi yang dihasilkan oleh gitar menjadi frekuensi kemudian membandingkan dengan nilai frekuensi tepat rentetan yang ditala. Gitaris diberitahu menggunakan LED apabila nilainya berkorelasi.
Pengesanan / penukaran frekuensi melibatkan 3 peringkat utama;
- Menguatkan
- Mengimbangi
- Penukaran Analog ke Digital (persampelan)
Isyarat suara yang dihasilkan akan terlalu lemah untuk dikenali oleh ADC Arduino sehingga kita perlu memperkuatkan isyaratnya. Setelah penguatan, untuk memastikan isyarat berada dalam jarak yang dapat dikenali oleh ADC Arduino untuk mengelakkan kliping isyarat, kami mengimbangi voltan isyarat. Setelah diimbangi, isyarat kemudian dihantar ke Arduino ADC di mana ia diambil sampel dan frekuensi bunyi itu diperoleh.
Komponen yang diperlukan
Komponen berikut diperlukan untuk membina projek ini;
- Arduino Uno x1
- LM386 x1
- Condenser Mic x1
- Soket mikrofon / Audio x1
- Potensiometer 10k x1
- Kapasitor O.1uf x2
- Perintang 100ohms x4
- Perintang 10ohms x1
- Kapasitor 10uf x3
- LED kuning 5mm x2
- LED hijau 5mm x1
- Biasanya Buka Butang Tekan x6
- Wayar pelompat
- Papan roti
Skematik
Sambungkan komponen seperti yang ditunjukkan dalam Diagram Litar Guitar Tuner di bawah.
Butang tekan disambungkan tanpa perintang penarik atas / bawah kerana perintang penarik Arduino yang dibina akan digunakan. Ini untuk memastikan litar sesederhana mungkin.
Kod Arduino untuk Guitar Tuner
Algoritma di sebalik kod untuk Guitar Tuner Project ini mudah. Untuk menyesuaikan rentetan tertentu, gitaris memilih tali dengan menekan butang tekan yang sesuai dan memetik memainkan rentetan terbuka. Suara dikumpulkan oleh tahap penguatan dan diteruskan ke Arduino ADC. Kekerapannya disahkod dan dibandingkan. Apabila frekuensi input dari rentetan kurang dari frekuensi yang ditentukan, untuk tali itu salah satu LED kuning menyala menunjukkan bahawa tali harus diketatkan. Apabila frekuensi yang diukur lebih besar daripada frekuensi yang ditentukan untuk tali itu, LED lain akan menyala. Apabila frekuensi berada dalam julat yang ditentukan untuk tali itu, LED hijau menyala untuk memandu pemain gitar.
Kod Arduino lengkap diberikan di akhir, di sini kita telah menerangkan secara ringkas bahagian penting kod.
Kita mulakan dengan membuat susunan untuk menahan suis.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Seterusnya, kami membuat susunan untuk menahan frekuensi yang sesuai untuk setiap rentetan.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // semua dalam Hz
Dengan ini, kami kemudian menyatakan pin yang disambungkan LED dan pemboleh ubah lain yang akan digunakan untuk mendapatkan frekuensi dari ADC.
int lowerLed = 7; int lebih tinggiLed = 6; int justRight = 5; #tentukan LENGTH 512 byte rawData; kiraan int;
Seterusnya adalah fungsi setup void () .
Di sini kita mulakan dengan mengaktifkan tarikan dalaman Arduino untuk setiap pin yang mana suis disambungkan. Selepas itu kami menetapkan pin yang disambungkan LED sebagai output dan melancarkan monitor bersiri untuk memaparkan data.
batal persediaan () { untuk (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowLed, OUTPUT); pinMode (lebih tinggiLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Seterusnya, adakah fungsi gelung void , kita melaksanakan pengesanan dan perbandingan frekuensi.
gelung void () { if (kiraan <PANJANG) { kiraan ++; rawData = analogRead (A0) >> 2; } lain { jumlah = 0; pd_state = 0; tempoh int = 0; untuk (i = 0; i <len; i ++) { // Autocorrelation sum_old = sum; jumlah = 0; untuk (k = 0; k <len-i; k ++) jumlah + = (rawData-128) * (rawData-128) / 256; // Serial.println (jumlah); // Peak Detect State Machine jika (pd_state == 2 && (sum-sum_old) <= 0) { period = i; pd_state = 3; } jika (pd_state == 1 && (jumlah> ambang) && (sum-sum_old)> 0) pd_state = 2; jika (! i) { ambang = jumlah * 0.5; pd_state = 1; } } // Kekerapan yang dikenal pasti dalam Hz jika (ambang> 100) { freq_per = sample_freq / period; Serial.println (freq_per); untuk (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == TINGGI) { if (freq_per - freqarray <0) { digitalWrite (LowerLed, HIGH); } lain jika (freq_per - freqarray> 10) { digitalWrite (HigherLed, TINGGI); } lain { digitalWrite (justRight, TINGGI); } } } } kiraan = 0; } }
The kod lengkap dengan video demonstrasi diberikan di bawah. Muat naik kod ke papan Arduino anda dan pergi.