Hai teman-teman, selama beberapa minggu terakhir, saya telah bekerja untuk menghubungkan kembali kecintaan saya pada gitar. Memainkan gitar kotak adalah cara saya bersantai beberapa tahun yang lalu sebelum saksofon mengambil alih. Kembali ke gitar, setelah 3 tahun jarang memetik akor, saya menemukan antara lain bahwa saya tidak lagi tahu bagaimana setiap senar harus berbunyi, dengan kata-kata teman saya, "Pendengaran saya tidak lagi disetel" dan Sebagai akibatnya, saya tidak dapat menyetem gitar tanpa bantuan keyboard atau aplikasi seluler yang kemudian saya unduh. Minggu-minggu berlalu hingga beberapa hari yang lalu ketika pembuat dalam diri saya menjadi termotivasi dan saya memutuskan untuk membangun Guitar Tuner berbasis Arduino. Dalam tutorial hari ini, saya akan membagikan cara membuat Guitar Tuner Arduino DIY Anda sendiri.
Bagaimana Guitar Tuner Bekerja
Sebelum kita beralih ke elektronik, penting untuk memahami prinsip di balik build. Ada 7 not musik utama yang dilambangkan dengan huruf; A, B, C, D, E, F, G dan biasanya diakhiri dengan A lain yang selalu memiliki oktaf lebih tinggi dari A.Dalam musik beberapa versi nada ini ada seperti A pertama dan A. Catatan ini dibedakan satu sama lain dari variasinya dan satu sama lain oleh salah satu karakteristik suara yang dikenal sebagai nada. Pitch didefinisikan sebagai kenyaringan atau rendahnya suara dan ditunjukkan oleh frekuensi suara tersebut. Karena frekuensi nada-nada ini diketahui, bagi kita untuk menentukan apakah gitar itu disetel atau tidak, kita hanya perlu membandingkan frekuensi nada dari string tertentu dengan frekuensi sebenarnya dari nada yang diwakili oleh string tersebut.
Frekuensi dari 7 not musik 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 nada ini selalu pada nada yang sama dengan FxM di mana F adalah frekuensi dan M adalah bilangan bulat bukan nol. Jadi untuk A terakhir yang seperti dijelaskan sebelumnya, berada pada oktaf lebih tinggi dari A pertama, frekuensinya adalah;
27,50 x 2 = 55Hz.
Gitar (Lead / box guitar) biasanya memiliki 6 senar yang dilambangkan dengan nada E, A, D, G, B, E pada senar terbuka. Seperti biasa, E terakhir akan memiliki oktaf lebih tinggi dari E. Kami akan merancang tuner gitar kami untuk membantu menyetem gitar menggunakan frekuensi not-not ini.
Sesuai dengan penyeteman gitar standar, not dan frekuensi yang sesuai dari setiap senar ditampilkan pada tabel di bawah.
String |
Frekuensi |
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 proyek cukup sederhana; kami mengubah sinyal suara yang dihasilkan oleh gitar menjadi frekuensi kemudian membandingkan dengan nilai frekuensi yang tepat dari string yang disetel. Gitaris diberitahu menggunakan LED ketika nilainya berkorelasi.
Deteksi / konversi frekuensi melibatkan 3 tahap utama;
- Memperkuat
- Mengimbangi
- Konversi Analog ke Digital (pengambilan sampel)
Sinyal suara yang dihasilkan akan terlalu lemah untuk dikenali oleh ADC Arduino sehingga kita perlu memperkuat sinyal tersebut. Setelah penguatan, untuk menjaga sinyal dalam kisaran yang dikenali oleh ADC Arduino untuk mencegah pemotongan sinyal, kami mengimbangi tegangan sinyal. Setelah offsetting, sinyal kemudian diteruskan ke Arduino ADC di mana ia diambil sampelnya dan frekuensi suara itu diperoleh.
Komponen yang dibutuhkan
Komponen berikut diperlukan untuk membangun proyek ini;
- Arduino Uno x1
- LM386 x1
- Kondensor Mic x1
- Mikrofon / Soket audio x1
- 10k potensiometer x1
- Kapasitor O.1uf x2
- 100ohms resistor x4
- Resistor 10ohms x1
- Kapasitor 10uf x3
- 5mm LED kuning x2
- 5mm LED hijau x1
- Biasanya Buka Tombol Tekan x6
- Kabel jumper
- Papan tempat memotong roti
Skema
Hubungkan komponen seperti yang ditunjukkan pada Diagram Sirkuit Guitar Tuner di bawah ini.
Tombol tekan terhubung tanpa resistor pull up / down karena resistor pullup bawaan Arduino akan digunakan. Ini untuk memastikan rangkaiannya sesederhana mungkin.
Kode Arduino untuk Guitar Tuner
Algoritme di balik kode untuk Guitar Tuner Project ini sederhana. Untuk menyetem senar tertentu, gitaris memilih senar dengan menekan tombol tekan yang sesuai dan memetik senar terbuka. Suara dikumpulkan oleh tahap amplifikasi dan diteruskan ke Arduino ADC. Frekuensi diterjemahkan dan dibandingkan. Ketika frekuensi input dari string kurang dari frekuensi yang ditentukan, untuk string itu salah satu LED kuning akan menyala yang menunjukkan bahwa string harus dikencangkan. Ketika frekuensi yang diukur lebih besar dari frekuensi yang ditentukan untuk string itu, LED lain akan menyala. Ketika frekuensi berada dalam kisaran yang ditentukan untuk senar itu, LED hijau akan menyala untuk memandu gitaris.
Kode Arduino lengkap diberikan di bagian akhir, di sini kami telah menjelaskan secara singkat bagian-bagian penting dari kode.
Kami mulai dengan membuat array untuk menahan sakelar.
int buttonarray = {13, 12, 11, 10, 9, 8}; //
Selanjutnya, kami membuat array untuk menampung frekuensi yang sesuai untuk setiap string.
float freqarray = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63}; // semua dalam Hz
Setelah ini selesai, kami kemudian mendeklarasikan pin yang dihubungkan dengan LED dan variabel lain yang akan digunakan untuk mendapatkan frekuensi dari ADC.
int lowerLed = 7; int lebih tinggiLed = 6; int justRight = 5; # Tentukan PANJANG 512 byte rawData; hitungan int;
Berikutnya adalah fungsi void setup () .
Di sini kita mulai dengan mengaktifkan tarikan internal pada Arduino untuk masing-masing pin yang dihubungkan dengan sakelar. Setelah itu kami mengatur pin yang dihubungkan dengan LED sebagai output dan meluncurkan monitor serial untuk menampilkan data.
void setup () { untuk (int i = 0; i <= 5; i ++) { pinMode (buttonarray, INPUT_PULLUP); } pinMode (lowerLed, OUTPUT); pinMode (higherLed, OUTPUT); pinMode (justRight, OUTPUT); Serial.begin (115200); }
Selanjutnya adalah fungsi void loop , kita menerapkan deteksi frekuensi dan perbandingan.
void loop () { if (count <LENGTH) { count ++; rawData = analogRead (A0) >> 2; } lain { jumlah = 0; pd_state = 0; periode int = 0; untuk (i = 0; i <len; i ++) { // Autocorrelation sum_old = sum; jumlah = 0; untuk (k = 0; k <len-i; k ++) sum + = (rawData-128) * (rawData-128) / 256; // Serial.println (jumlah); // Mesin Deteksi Puncak Status if (pd_state == 2 && (sum-sum_old) <= 0) { periode = i; pd_state = 3; } jika (pd_state == 1 && (sum> thresh) && (sum-sum_old)> 0) pd_state = 2; jika (! i) { thresh = jumlah * 0,5; pd_state = 1; } } // Frekuensi diidentifikasi dalam Hz jika (ambang> 100) { freq_per = sample_freq / periode; Serial.println (freq_per); untuk (int s = 0; s <= 5; s ++) { if (digitalRead (buttonarray) == HIGH) { if (freq_per - freqarray <0) { digitalWrite (lowerLed, HIGH); } lain jika (freq_per - freqarray> 10) { digitalWrite (higherLed, HIGH); } lain { digitalWrite (justRight, HIGH); } } } } hitungan = 0; } }
The kode lengkap dengan video demonstrasi diberikan di bawah ini. Unggah kode ke papan Arduino Anda dan petik.