Langsung ke konten utama

Tutorial Membuat Tuner Gitar Menggunakan Arduino

Sebelum kita pindah ke elektronik, penting untuk memahami prinsip di balik pembuatan. Ada 7 not musik utama yang dilambangkan dengan huruf; A, B, C, D, E, F, G dan biasanya berakhir dengan A lain yang selalu pada oktaf lebih tinggi dari A. pertama Dalam musik beberapa versi catatan ini ada seperti A pertama dan A. terakhir Catatan ini masing-masing dibedakan dari variasi mereka dan dari satu sama lain oleh salah satu karakteristik suara yang dikenal sebagai nada. Lapangan didefinisikan sebagai kenyaringan atau rendahnya suara dan ini ditunjukkan oleh frekuensi suara itu. Karena frekuensi nada ini diketahui, bagi kita untuk menentukan apakah gitar disetel atau tidak, kita hanya perlu membandingkan frekuensi nada senar tertentu dengan frekuensi aktual nada yang diwakili oleh senar tersebut.

Frekuensi 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 dari catatan ini selalu berada di pitch 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 satu oktaf lebih tinggi dari A pertama, frekuensinya adalah;
27,50 x 2 = 55Hz.
Gitar (gitar Timbal / kotak) biasanya memiliki 6 senar yang dilambangkan dengan nada E, A, D, G, B, E pada senar terbuka. Seperti biasa, E terakhir akan berada pada satu oktaf lebih tinggi dari E. pertama. Kami akan merancang tuner gitar kami untuk membantu menyetel gitar menggunakan frekuensi catatan ini.
Menurut penyetelan gitar standar, nada dan frekuensi masing-masing senar ditampilkan pada tabel di bawah ini.
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 ke frekuensi kemudian membandingkannya dengan nilai frekuensi yang tepat dari senar yang sedang 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 diproduksi akan terlalu lemah untuk dikenali oleh ADC Arduino sehingga kita perlu memperkuatsinyal. Setelah amplifikasi, untuk menjaga sinyal dalam rentang yang dikenali oleh ADC Arduino untuk mencegah kliping sinyal, kami mengimbangi tegangan sinyal. Setelah diimbangi, sinyal kemudian diteruskan ke ADC Arduino tempat sampel diambil dan frekuensi bunyi tersebut diperoleh.

Komponen yang diperlukan
Komponen berikut ini diperlukan untuk membangun proyek ini;
Arduino Uno x1
LM386 x1
Kondensor Mic x1
Soket Mikrofon / Audio x1
Potensiometer 10k x1
O.1 uF kapasitor x2
100ohms resistor x4
10ohms resistor x1
10 uF kapasitor x3
5mm LED kuning x2
5mm LED hijau x1
Tombol Push Biasanya Terbuka x6
Kabel pelompat
Papan tempat memotong roti

Skema
Hubungkan komponen seperti yang ditunjukkan pada Diagram Sirkuit Gitar Tuner di bawah ini.
 

Tombol-tombol push terhubung tanpa resistor tarik ke atas / ke bawah karena resistor pull-in bawaan Arduino akan digunakan. Ini untuk memastikan sirkuit sesederhana mungkin.
 

Kode Arduino untuk Guitar Tuner
Algoritma di balik kode untuk Proyek Tuner Gitar ini sederhana. Untuk menyetel senar tertentu, gitaris memilih senar dengan menekan tombol yang sesuai dan memetik senar yang dimainkan. 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 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 string itu, LED hijau menyala untuk memandu gitaris .
Kode Arduino lengkap diberikan di 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}; // [E2, A2, D3, G3, B3, E4]

Selanjutnya, kita membuat array untuk menahan frekuensi yang sesuai untuk masing-masing 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 terhubung dengan LED dan variabel lain yang akan digunakan untuk mendapatkan frekuensi dari ADC.
int lowerLed = 7;
int higherLed = 6;
int justRight = 5;
 #define LENGTH 512 byte rawData [LENGTH];
 int count;

Berikutnya adalah fungsi pengaturan batal () .
Di sini kita mulai dengan mengaktifkan tarikan internal pada Arduino untuk masing-masing pin yang terhubung dengan sakelar. Setelah itu kami mengatur pin yang terhubung dengan LED sebagai output dan meluncurkan monitor serial untuk menampilkan data.
void setup ()
 {
   for (int i = 0; i <= 5; i ++)
  {    
 pinMode (buttonarray [i], INPUT_PULLUP);
   }   
pinMode (lowerLed, OUTPUT);
   pinMode (higherLed, OUTPUT);
   pinMode (justRight, OUTPUT);
   Serial.begin (115200);
}

Berikutnya, adalah fungsi void loop , kami menerapkan deteksi frekuensi dan perbandingan .
void loop ()
 {
   if (count <LENGTH)   
{
     count ++;
     rawData [count] = analogRead (A0) >> 2;
   }
   else {
     sum = 0;
     pd_state = 0;
     int periode = 0;
     untuk (i = 0; i <len; i ++)
     {
       // Autocorrelation
       sum_old = jumlah;
       jumlah = 0;
       untuk (k = 0; k <len-i; k ++) jumlah + = (rawData [k] -128) * (rawData [k + i] -128) / 256;
       // Serial.println (jumlah);
       // Mesin Deteksi Puncak Peak
       jika (pd_state == 2 && (sum-sum_old) <= 0)
       {
         period = i;
         pd_state = 3;
       }
      if (pd_state == 1 && (jumlah> thresh) && (jumlah-jumlah_old)> 0) pd_state = 2;
       if (! i) {
         thresh = jumlah * 0,5;
         pd_state = 1;
       }
     }
     // Frekuensi diidentifikasi dalam Hz
     if (thresh> 100) {
       freq_per = sample_freq / period;
       Serial.println (freq_per);
       for (int s = 0; s <= 5; s ++)
       {
         if (digitalRead (buttonarray [i]) == HIGH)
         {
           if (freq_per - freqarray [i] <0)
           {
             digitalWrite (lowerLed, HIGH);
           }
           lain jika (freq_per - freqarray [i]> 10)
           {
             digitalWrite (higherLed, HIGH);
          }
           else
           {
             digitalWrite (justRight, HIGH);
           }
}
       }
     }
     count = 0;
   }
 }

The kode lengkap dengan video demonstrasi diberikan di bawah ini. Unggah kode itu ke papan Arduino Anda dan pergilah.
Kode

int buttonarray [] = {13, 12, 11, 10, 9, 8}; // [E2, A2, D3, G3, B3, E4] 
// masing-masing pin mewakili string gitar 
// selanjutnya kita buat dan susun dengan frekuensi yang cocok dengan masing-masing string di atas 
// sehingga ketika 13 dipilih freq cocok dengan perhatikan e dipilih). 
float freqarray [] = {82.41, 110.00, 146.83, 196.00, 246.94, 329.63};
 // sll in Hz
int lowerLed = 7; 
int higherLed = 6; 
int justRight = 5;
# tentukan PANJANG 512
byte rawData [LENGTH]; 
int count = 0;
// Frekuensi Sampel dalam kHz 
const float sample_freq = 8919; 
int len ​​= sizeof (rawData); 
int i, k; 
jumlah panjang, jumlah_banyak; 
int thresh = 0; 
float freq_per = 0; 
byte pd_state = 0;
void setup () { 
  for (int i = 0; i <= 5; i ++) 
  { 
    pinMode (buttonarray [i], INPUT_PULLUP); 
  } 
  pinMode (lowerLed, OUTPUT); 
  pinMode (higherLed, OUTPUT); 
  pinMode (justRight, OUTPUT); 
  Serial.begin (115200); 

void loop () { 
  
  if (count <LENGTH)  
  { 
    count ++; 
    rawData [count] = analogRead (A0) >> 2; 
  } 
  else { 
    sum = 0; 
    pd_state = 0; 
    int periode = 0; 
    untuk (i = 0; i <len; i ++) 
    { 
      // Autocorrelation 
      sum_old = jumlah; 
      jumlah = 0;
      untuk (k = 0; k <len-i; k ++) jumlah + = (rawData [k] -128) * (rawData [k + i] -128) / 256; 
      // Serial.println (jumlah); 
      
      // Mesin Deteksi Puncak Peak 
      jika (pd_state == 2 && (sum-sum_old) <= 0)  
      { 
        period = i; 
        pd_state = 3; 
      } 
      jika (pd_state == 1 && (jumlah> thresh) && (jumlah-sum_old)> 0) pd_state = 2; 
      if (! i) { 
        thresh = jumlah * 0,5; 
        pd_state = 1; 
      } 
    } 
    // Frekuensi diidentifikasi dalam Hz 
    if (thresh> 100) { 
      freq_per = sample_freq / period; 
      Serial.println (freq_per); 
      untuk (int s = 0; s <= 5; s ++) 
      {
        if (digitalRead (buttonarray [i]) == HIGH) 
        { 
          if (freq_per - freqarray [i] <0) 
          { 
            digitalWrite (lowerLed, HIGH); 
          } 
          lain jika (freq_per - freqarray [i]> 10) 
          { 
            digitalWrite (higherLed, HIGH); 
          } 
          else 
          { 
            digitalWrite (justRight, HIGH); 
          } 
         
        } 
      } 
    } 
    count = 0; 
  } 
}


SEKIAN TUTORIAL DARI SAYA

Komentar

Postingan populer dari blog ini

Cara Mudah Program Sensor Berat Load Cell HX711 dengan Arduino (Satuan Gram)

Kita akan mencoba menggunakan Sensor Berat LoadCell dengan HX711. Yang mana satuannya adalah Gram. Kebanyakan di luar sana Tutorialnya menggunakan Float dengan satuan Kilo Gram. Nah bagi yang mau berbeda boleh di coba nih. 1. Desain Pemasangan Load Cell HX711 Untuk pemasangan silahkan kamu bisa melihat referensi gambar dibawah ini: 2. Rangkaian Arduino Loadcell HX711 Untuk rangkaian silahkan gunakan gambar dibawah ini: Arduino HX711 5V 5V GND GND A0 DT A1 SCK 3. Add Library HX711 ke Arduino IDE Kita akan menggunakan library HX711_Master.zip, yang bisa kamu Download di bawah ini: Download Library HX711_Master.zip (DROPBOX) Jika sudah di Download silahkan di Add ke Arduino IDE. Bagi yang belum tau, bagaimana cara ADD Library ke Arduino. Silahkan gunakan tutorial dibawah ini: Bagaimana Cara Memasukan Library Ke Aplikasi Arduino IDE? 4. Kalibrasi Load Cell HX711 Langkah selanjutnya adalah harus kalibrasi. Tujuan kalibrasi disini untuk menentukan ukura...

Cara Membuat Program Kasir Menggunakan Python

Source code program kasir dengan python selamat datang kembali gan, kali ini saya akan berbagi source code program kasir dengan bahasa pemrograman python atau sebagian orang juga menyebutnya dengan nama pyton (anekdot) ok di bawah ini ada source code dimana program kasir tersebut menggunakan metode yang biasa di kenal if then else, tetapi di python dikenal dengan " elif " maka dari itu bari kita cobakan print("Source Code Kasir Dengan Python")   x=str(input("Nama Barang :  ")) y=int(input("Harga       :  ")) z=int(input("Jumlah Jual :  ")) v=0 w=0 if (z in range (0,5)):     v = 0     print("Tidak ada diskon") elif (z in range (5,11)):     v = 5/100     print("Discount 5%") elif (z in range ( 11,21)):     v = 10/100     print("Discount 10%") elif (z in range ( 21,31)):     v = 15/100     print("Discount 15%") else:     v = 20/100     print("Di...

Tutorial Sniffing dan Spoofing Menggunakan Kali Linux

Konsep dasar alat sniffing sesederhana penyadapan dan Kali Linux memiliki beberapa alat yang populer untuk tujuan ini.  Dalam bab ini, kita akan belajar tentang alat sniffing dan spoofing yang tersedia di Kali. Burpsuite Burpsuite dapat digunakan sebagai alat mengendus antara browser Anda dan webservers untuk menemukan parameter yang digunakan aplikasi web. Untuk membuka Burpsuite, buka Aplikasi → Analisis Aplikasi Web → burpsuite. Untuk membuat pengaturan sniffing, kami mengkonfigurasi burpsuite untuk berperilaku sebagai proxy.  Untuk melakukan ini, buka  Opsi  seperti yang ditunjukkan pada tangkapan layar berikut.  Centang kotak seperti yang ditunjukkan. Dalam hal ini, IP proxy akan menjadi 127.0.0.1 dengan port 8080. Kemudian konfigurasikan proxy browser yang merupakan IP mesin burpsuite dan porta. Untuk memulai intersepsi, buka Proxy → Intercept → klik “Intercept is on”. Lanjutkan menavigasi pada halaman web yang Anda ingin menemukan para...