Merhaba, bu yazımızda Arduino ile Otomatik Gitar Akort yapımına değineceğim. Projeyi tamamladıktan sonra otomatik gitar akort cihazı olarak kullanabilirsiniz. Devremizin nasıl çalıştığını anlamak için öncelikle Müzik, Nota ve Gitarın ne olduğunu ve birbirleri arasındaki ilişkiyi öğrenelim.
Müzik, ses ve ritim temel elemanlarından oluşmakta olup duygularımızı, düşüncelerimizi veya olayları anlatmak amacıyla ölçülü ve düzenli bir araya getirilmesiyle oluşur. Tonların melodi, ritim ve harmoni ile birleşmesiyle hoş ve etkileyici ezgiler ortaya çıkaran bir sanat türü olup sözlü müzik (Vokal müzik) ve saz müziği (Instrumental müzik) olmak üzere ikiye ayrılır. Müzikal sesleri birbirinden ayıran özellikler; Yükseklik, Şiddet, Tını ve Süredir.
Nota Nedir?
Sesin aralığının ve süresinin portre üzerinde gösterimine Nota denir. Müzik parçasının nota isimleri ile seslendirilmesi ise solfej olarak adlandırılır Müzikte kaç nota var diye soracak olursanız Do (C), Re (D), Mi (E), Fa (F), Sol, (G), La (A) Si (B) olmak üzere 7 tane temel nota vardır. Müzik nota vuruşları ve müzik nota yerleri porte üzerinden kolayca anlaşılabilir ve bu da bize bir müzik grubu veya orkestra ile beraber çalarkan daha uyumlu ve senkronize bir şekilde çalmamıza olanak sağlar.
Gitar Nedir?
Gitar telli çalgılar sınıfına girmekte ve 6 teli bulunmaktadır. Bu teller Yukarıdan Aşağıya sırasıyla Standard E-A-D-G-B-E olarak gitar akort edilmektedir. Günümüzde birden fazla Gitar Çeşitleri bulunmaktadır ve bunların en bilinen 4 çeşiti ise şunlardır:
Gitar Akort Cihazı Nasıl Çalışır?
Yukarıda bahsetmiş olduğumuz notaların her birinin farklı birer frekans değerleri bulunmaktadır ve bu frekans değerleri arttıkça ortaya çıkan sesler daha çok tizleşir, bunun sebebi ise ses dalgasının sayısının artmasından dolayıdır, frekans değerlerinin azaldığı durumlarda ise sesler daha çok pesleşir ve bunun sebebi ise ses dalgasının sayısının azalmasından kaynaklıdır. Gitar tellerinin frekans değerleri hakkında bilgi vermek gerekirse sırasıyla şu şekildedir.
- E_LOW = 82.41 Hz
- A = 110.00 Hz
- D = 146.83 Hz
- G = 196.00 Hz
- B = 246.94 Hz
- E_High = 329.63 Hz
Otomatik gitar akort cihazı devremizde kullanacak olduğumuz ses sensörü ile dışardan gelen ses dalgalarının frekansını ölçerek yukarda bahsetmiş olduğumuz gitar tellerinin nota frekanslarıyla eş değerde olduğu kontrol edilir.
Telin olması istenen frekans aynı olmadığı durumlarda kullanacağımız step motor sayesinde otomatik olarak gitarımızın akort burgusunu döndürerek gitar tellerinin istenilen frekansa sahip olmasını sağlayabileceğiz.
Gitar Akort Cihazı Nasıl Kullanılır?
Gitarın akort edilirken ki durumunu kolayca anlayabilmemiz için Sarı, Yeşil ve Kırmızı olmak üzere 3 tane LED kullanacağız. Sarı LED yandığı durumda gitar telinin gevşek olduğunu, Kırmızı Led yandığında gitar telinin sıkı olduğunu, Yeşil Led yandığında ise gitar telinin doğru bir şekilde akort edildiğini anlamış oluruz. Akort cihazı ile gitar akort etme işlemini bu şekilde kontrol edebilirsiniz.
Bu devrede kullanacak olduğumuz OLED Ekran ve Push Button sayesinde ise hangi teli akort edeceğimizi görebilir ve değiştirebiliriz. Devremizi aşağıda vermiş olduğum şemaya bakarak oluşturduktan sonra devrenin düzgün çalışabilmesi için ses sensörünün üzerinde bulunan potansiyometreyi bir tornavida sayesinde sensörün eşik değerini ayarlamamız gerekiyor aksi takdirde devremiz düzgün çalışmayacaktır. Step motorun gitar burgusunu döndürebilmesi için 5V gerilimden daha fazla besleme yapmak gerekiyor. Bunun için step motorun bağlı olduğu motor sürücüye 11.1V, 450 mAh Li-po battery ile besleme yaptım.
Akort Cihazı Projesi için Gerekli Malzemeler
- 1 Adet Arduino Nano
- 1 Adet Ses Sensörü
- 1 Adet Step Motor ve Sürücü
- 1 Adet Li-po veya Li-ion pil (Motor Sürücüye bağlamak için)
- 9 V Pil Başlığı
- 1 Adet OLED Ekran
- 1 Adet Push Button (Buton)
- 330 R Direnç
- 10K Direnç
- Breadboard
- Montaj Kablosu Rulosu
- Sarı Led
- Yeşil Led
- Kırmızı Led
- Yetecek kadar Jumper Kablo
Gitar Akort Cihazı Devre Şeması
Kütüphane Kurulumu
- Arduino IDE’yi açın ve üst menüden Sketch’e basın.
- Include library üzerinden Manage Libraries seçeneğine tıklayın.
- Arama kutucuğuna U8GLIB yazın ve aşağıdaki resimdeki gözüken kütüphaneyi en son sürümü seçerek indirin.
- Arama kutucuğuna arduinoFFT yazın ve aşağıdaki resimdeki gözüken kütüphaneyi en son sürümü seçerek indirdikten sonra Arduino IDE’yi kapatıp tekrardan açın. Artık kodumuz Arduino üzerinde çalıştırılmak için hazır, şimdi aşağıdaki Arduino kodunu açmış olduğumuz Sketch’e yapıştırıp Arduino’ya Upload yapabiliriz.
Arduino ile Gitar Akort Proje Kodu
#include "U8glib.h"
#include "arduinoFFT.h"
U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE); // I2C / TWI
#define Button_Pin 2
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
#define SAMPLES 128
#define SAMPLING_FREQUENCY 2048
float freqarray[] = {83.14, 112.30, 148.55, 198.20, 248.45, 336.20};//sll in Hz (LOW) E-A-D-G-B-E (HIGH)
char string[] = {'E', 'A', 'D', 'G', 'B', 'e'};
bool Button_State;
bool Old_Button_State {};
int Loose_String = 3;
int Right_String = 4;
int Tight_String = 5;
int i, k;
int j {};
int thresh = 0;
int counter {};
float freq_per = 0;
float frequency {};
float freqexact {};
String state {};
float sum {};
float freq {};
arduinoFFT FFT = arduinoFFT();
unsigned int samplingPeriod;
unsigned long microSeconds;
double vReal[SAMPLES];
double vImag[SAMPLES];
void draw(void) {
u8g.setFont(u8g_font_10x20r);
u8g.setPrintPos(0, 15);
u8g.println(F("Hz:"));
u8g.setPrintPos(35, 15);
u8g.println(frequency);
u8g.setFont(u8g_font_fur25r);
u8g.setPrintPos(50, 53);
u8g.println(string[j]);
if (freqexact < freqarray[j] + 1 && freqexact > freqarray [j] - 1) {
}
else if (freqexact > freqarray[j]) {
u8g.setPrintPos(70, 50);
u8g.println('>');
}
else if (freqexact < freqarray[j]) {
u8g.setPrintPos(15, 50);
u8g.println('<');
}
}
void setup() {
pinMode(Button_Pin, INPUT_PULLUP);
pinMode(Tight_String, OUTPUT);
pinMode(Right_String, OUTPUT);
pinMode(Loose_String, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
Serial.begin(115200);
samplingPeriod = round(1000000 * (1.0 / SAMPLING_FREQUENCY));
}
void loop() {
Button_State = digitalRead(Button_Pin);
if (Button_State != Old_Button_State && Button_State == HIGH) {
j++;
if (j >= 6)
j = 0;
}
Old_Button_State = Button_State;
for (int i = 0; i < SAMPLES; i++)
{
microSeconds = micros();
vReal[i] = analogRead(0);
vImag[i] = 0;
while (micros() < (microSeconds + samplingPeriod))
{
}
}
FFT.Windowing(vReal, SAMPLES, FFT_WIN_TYP_HAMMING, FFT_FORWARD);
FFT.Compute(vReal, vImag, SAMPLES, FFT_FORWARD);
FFT.ComplexToMagnitude(vReal, vImag, SAMPLES);
double peak = FFT.MajorPeak(vReal, SAMPLES, SAMPLING_FREQUENCY);
if (peak < freqarray[j] + 50 && peak > freqarray[j] - 50)
frequency = peak;
else
frequency = 0;
if (freqexact < frequency + 2 && freqexact > frequency - 2 && frequency != 0) {
counter++;
sum += frequency;
if (counter == 2) {
freq = sum / 2;
if (freq < freqarray[j] + 0.5 && freq > freqarray [j] - 0.5) {
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
digitalWrite(Right_String, HIGH);
digitalWrite(Loose_String, LOW);
digitalWrite(Tight_String, LOW);
state = "1.koşul";
}
else if (freq < freqarray[j] && freq > 0) {
for (int m {0}; m < 50; m++) {
digitalWrite(IN4, HIGH);
delay(3);
digitalWrite(IN4, LOW);
digitalWrite(IN3, HIGH);
delay(3);
digitalWrite(IN3, LOW);
digitalWrite(IN2, HIGH);
delay(3);
digitalWrite(IN2, LOW);
digitalWrite(IN1, HIGH);
delay(3);
digitalWrite(IN1, LOW);
digitalWrite(Loose_String, HIGH);
digitalWrite(Tight_String, LOW);
digitalWrite(Right_String, LOW);
state = "2.koşul";
}
}
else if (freq > freqarray[j] && freq > 0) {
for (int n {0}; n < 50; n++) {
digitalWrite(IN1, HIGH);
delay(3);
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
delay(3);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
delay(3);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
delay(3);
digitalWrite(IN4, LOW);
digitalWrite(Loose_String, LOW);
digitalWrite(Tight_String, HIGH);
digitalWrite(Right_String, LOW);
state = "3.koşul";
}
}
else {
digitalWrite(Tight_String, LOW);
digitalWrite(Loose_String, LOW);
digitalWrite(Right_String, LOW);
}
}
}
else {
freqexact = frequency;
counter = 0;
sum = 0;
}
/*
Serial.print(F("j = "));
Serial.println(j);
Serial.print(F("peak = "));
Serial.println(peak);
Serial.print(F("frequency = "));
Serial.println(frequency);
Serial.print(F("freqexact = "));
Serial.println(freqexact);
Serial.print(F("counter = "));
Serial.println(counter);
Serial.print(F("sum = "));
Serial.println(sum);
Serial.print(F("freq = "));
Serial.println(freq);
Serial.print(F("state = "));
Serial.println(state);
Serial.println("==============");
state = "empty";
*/
u8g.firstPage();
do {
draw();
} while ( u8g.nextPage() );
}
Otomatik Gitar Akort Cihazı Proje Görselleri
Arduino ile Otomatik Gitar Akort Cihazı Proje Videosu
Videoda kullanılan, içinde devre bulunan turuncu kutunun 3d baskısını almak için dosyaları buradan indirebilirsiniz!
Arduino ile Otomatik Gitar Akort Cihazı projemizi tamamladık. Siz de kendi gitarınızı akort etmek isterseniz hemen bizimle bu projeyi yapmaya başlayabilirsiniz. İhtiyacınız olan ürünler Arduino Nano, Ses Sensörü, Step Motor ve Sürücü, Li-po veya Li-ion pil, OLED Ekran, Push Button (Buton) ve Jumper Kablodur. Tüm bu ürünlere web sitemizden hızlı ve kolay bir şekilde ulaşabilirsiniz. Bir sonraki projemizde görüşmek üzere.