Otomatik Gitar Akort Aleti

Boğaziçi Üniversitesi, Makine Mühendisliği Bölümü, mekatronik dersi kapsamında 6 kişi otomatik gitar akort aleti projesini yaptık. Grup üyeleri: Abdullah Gedük, Alp Uysal, Ediz Ferit Kula Elif Hacıhasanoğlu, Kevser Didar İskender ve Sina Atalay. Her bir grup üyesinin çok önemli katkıları oldu ve çok sistemli görev dağılımları yaparak, projeyi oldukça kısa bir sürede bitirebildik.

Projenin amacı, motorlarla gitarı çok hassas bir şekilde akort edebilen bir alet yapmaktı. Elinizle burguyu çevirmek yerine, motorların sizin için çevirdiği bir sistem!

Gitarda, çalınacak parçadan parçaya değişiklik gösteren akort sistemleri vardır ve bunları elle bizzat yapmak zaman alır. Yaptığımız alet, gitarı istenilen akorda çok hızlı ve hassas bir şekilde getirebiliyor. Tek yapmanız gereken, telleri çalmak ve makinenin akort etmesini beklemek…

Projenin amacı endüstriyel bir ürün yapmak değil, böyle bir ürünün prototipini yapmaktı.

Proje oldukça yoğun sinyal işleme, elektronik ve yazılım bilgisi gerektirdi. Ayrıca işin tasarım kısmı da ayrı zordu. Üç boyutlu yazıcıdan gerekli parçalar bastırıldı ve motorları istenilen konumda tutabilen mekanik bir sistem hazırlandı.

Projenin büyük bir bölümü araştırma yaparak ve öğrenerek geçti. Bu yazıda size adım adım nasıl ilerlediğimizi ve nasıl bu son hale ulaştığımızı anlatacağım.

Hazırlık

İlk başta hiçbirimiz konu hakkında ayrıntılı bilgiye sahip değildik. Fakat kafamızda, temel olarak, aletin çalışma yöntemini çözmüştük. Hayali bir akort aleti makinesi düşündük ve bu makine adım adım nasıl çalışırdı, onu hayal ettik. Şöyle bir şey olmalıydı:

Peki bu hayali makineyi nasıl yapabiliriz? Adım adım gidelim.

1- Kullanıcının akort sistemini seçmesi

Bu aşamada, makine tellerin hedef sesini öğrenmiş oluyor. Kullanıcı hangi akordu istediğini seçer ve makine her bir telin sahip olması gereken doğru sesi öğrenmiş olur.

Burası basit bir kısım. Butonlar bir devre elemanıdır. Basılıyken üstünden elektrik geçmesine izin verir, basılı değilken elektrik geçmesine izin vermez. Butonlarla basit bir devre oluşturup, bu devreyi Arduino veya herhangi bir mikro denetleyiciyle birleştirerek, kullanıcıdan bilgi aldığınız bir sistem yaratabiliriz. Kullanıcı tuşlarla akort sistemini seçebilir.

LCD ekran ve “sol”, “sağ”, seç” butonlarından oluşan bir devre yaptık. Bu sayede kullanıcı dostu bir sistemle, istenilen akort sistemi seçilebiliyordu.

Kullanıcı, istediği akordu seçtikten sonra, artık her bir telin sahip olması gerektiği ses bellidir. Örnek vermek gerekirse, E Standart akortlu bir gitarın, en kalın telinin doğal frekansı 82.4 Hz olmak zorundadır. Burada dikkat edilmesi gereken, telin sesinin müdahale edebileceğiniz tek özelliği frekansıdır. Teli gerdirirseniz, frekans artar, bollaştırırsanız frekans azalır. Dolayısıyla bizim hedefimiz bundan sonra telleri istediğimiz frekanslara getirmek olacaktır.

2- Kullanıcı gitarı çalması ve makinenin tellerin sesini dinlemesi

İşte burası oldukça zor bir kısımdı. Hedef frekansı biliyoruz, peki ya gitar telinin sahip olduğu frekansı nasıl bileceğiz?

Akıllı telefonlara indirdiğiniz uygulamalar sayesinde, herhangi bir sesin doğal frekansını öğrenebiliyorsunuz. Uygulama, mikrofondan sesi dinliyor, bazı hesaplar yapıyor ve size sesin frekansını söylüyor. Dolayısıyla biliyorduk ki, mikrofon gibi bir sistemle, sesi elektronik bir ortama taşıyıp, frekansı hesaplayan bir algoritma yazabilirdik.

Uygulama, telefonun işlem gücünü kullanarak mikrofondan gelen sesin frekansını hesaplayabiliyordu. Biz ise tüm işlerimizi, mikro denetleyici dediğimiz küçük bir bilgisayarla yapacaktık. Dolayısıyla, sesi alıp, mikro denetleyicimize yollamalıydık.

İş böylelikle ikiye bölünmüş oldu, sesi mikro denetleyiciye yollamak ve sesin frekansını hesaplayan algoritmayı yazmak.

Sesi mikro denetleyiciye yollamak

Ses bir mekanik dalgadır. Ortamdaki maddeleri titreştirerek yayılır. Doğada sonsuz çeşit ses kaynağı vardır. Deniz, enstrümanlar, rüzgâr, vs. Ses parçacıklarının titreşmesidir ve kulağımızın bu titreşimleri yorumlamasıdır.

Bu mekanik dalga olan sesi, kaydetmenin bazı yolları var. Mikrofon bunlardan biri. Konuştuğunuz zaman mikrofonun içindeki bazı parçaları titreştirirsiniz. Bu titreşimler mikrofonun mıknatıslı yapısı sayesinde elektrik sinyaline dönüşür. Bu elektrik sinyali mikrofonun bağlı olduğu sistem tarafından kaydedilir. Daha sonra bu sesi, hoparlör yardımıyla istediğiniz zaman tekrar dinlersiniz. Hoparlör elektrik sinyalini tekrardan ses dalgasına dönüştürür.

Bizim amacımız, gitarımızın ses dalgasını, bir elektrik sinyaline dönüştürmek ve bu sinyali mikro denetleyiciye yollamaktı. Mikrofon bu işi görebilirdi fakat biz farklı bir yöntemle ilerledik. Benim elimde elektro gitar vardı, ve elektro gitar, manyetikleri sayesinde; tellerin yarattığı sesi çok temiz bir şekilde elektrik sinyaline dönüştürebiliyordu. Manyetiklerin çalışma prensibi ayrı bir konu, ama sonuç olarak, elektro gitarın sesini çok net bir elektrik sinyali olarak alabiliyorduk.

Peki güzel, direkt olarak elektro gitar kablosundan ses sinyalini alabiliyoruz. Bu kabloyu mikro denetleyiciye takalım ve konu kapansın.

Maalesef bu kadar kısa olmadı. Elektro gitardan aldığımız sesin gücü çok düşüktü. Bu tahmin edilebilir bir şey aslında. Elektro gitar, fişe takılı değil, pile bağlı değil… Nasıl yüksek güçlü bir ses dalgası üretebilsin ki? Sesin gücünü ve şiddetini arttırıp, okunacak hale getirmek zorundaydık. Öbür türlü, mikro denetleyicimiz, gelen sinyali hiçbir şekilde algılayamazdı.

Peki herhangi bir elektrik sinyalini nasıl güçlendirirsiniz? Bu elektrik-elektronik dünyası için çok önemli bir soru ve insanoğlu bu sorunu çoktan çözmüş. Bu aletlere amfi diyoruz. Amfiler, elektrik sinyalinin gücünü arttıran devre elemanlarıdır. Amfiye güçsüz gelen sinyal, güçlü bir şekilde çıkış yapar.

Şu an ki hedefimiz amfi yapmak, ki yolladığımız ses sinyalini mikro denetleyicimiz okuyabilsin.

Amfi birçok transistor ve dirençten oluşan bir devredir ve bu devre elemanları genelde küçük bir çipe sığdırılırlar. Bunlara entegre devreler denir ve internetten bir çok entegre amfi bulabilirsiniz. İşin zor tarafı, bu çipi satın alıp kabloları gerekli yerlere bağlamaktan daha karmaşık olmasıydı. Takacağınız bir çok kapasitör ve direnç ile olabildikçe kaliteli bir amfi de yapabilirsiniz, çok kötü bir amfi de… Yani işin tasarım kısmı var.

Bizim amacımız, gitarın sesini olabildiğince temiz bir şekilde yükseltmek ve cızırtı gibi istenmeyen sesleri olabildiğince azaltmaktı. LM386 çipini kullandık ve yaptığımız bir çok araştırmadan sonra, amfi devremizi şu şekilde yapmaya karar verdik.

Bu amfi, sesi yeteri kadar yükseltmemizi sağladı ve sesi temiz bir şekilde mikro denetleyiciye aktarabildik. Amfinin içinde bir takım filtreler koyduk. Olabildiğince az cızırtı olması için de oldukça uğraştık.

Ses, analog bir elektrik sinyali olarak aktarılır. Analog sinyal, alternatif akım gibi, voltajı ve akımı sürekli değişen bir elektrik dalgasıdır. Ses dalgası normalde havadaki basınç dalgalarıyken, manyetikler yardımıyla, elektrik dalgalarına dönüştürüldü. Daha sonra amfi yardımıyla yükseltildi, güçlendirildi.

Mikro denetleyicilerin, analog sinyal okuyabilen pinleri vardır. Fakat bizim kullandığımız mikro denetleyici, Teensy 3.2, sadece 0V ile 3.2V arasını okuyabilmekteydi. Bizim sesimiz ise, yaklaşık +1.6V ile -1.6V arasında osilasyon yapan bir dalgaydı. Bunun okunabilmesi için 3.2 V ile 0V arasında osilasyon yapması gerekliydi, dolayısıyla iki tane dirençle basit bir voltaj bölücü devre yaptık. Aşağıdaki şematikten ayrıntılarını görebilirsiniz.

Sesin frekansını hesaplayan algoritma

Mikro denetleyiciye, sesi analog bir elektrik sinyali olarak aktarmayı başardık. Fakat bu sinyal şu an anlamsız bir sürü sayıdan ibaret. Her küçük bir zaman aralığında gelen sinyalin voltajını söyleyen yanyana binlerce sayı… İşte burada yoğun bir matematik devreye giriyor.

Aşağıda gördüğünüz dalga, gitarın en kalın mi telini çaldığınızda duyduğunuz dalga:

Gördüğünüz gibi dalga, kendini sürekli tekrar ediyor. Bir saniye içinde kendisini tekrar etme sayısına ise, bu dalganın doğal frekansı deniyor. İşte bu doğal frekans, duyduğunuz notayı belirler. Fakat farklı farklı enstürmanlarda, aynı notayı bambaşka şekillerde duyuyoruz. Bunun sebebi nedir? Bunun sebebi, gördüğünüz dalganın karmaşıklığıdır.

Bu dalga masum bir sinüs dalgası değil, çok karmaşık, içinde birçok farklı frekansı barındıran bir dalga… İşte seslerin ve enstürmanların tınısını belirleyen de budur: Dalga hangi frekanslardan meydana geliyor ve şekli nasıl?

Peki içindeki bir çok frekansdan sıyrılıp, bu dalganın doğal frekansını nasıl hesaplarız? Bu cidden çok önemli bir soru, ve bu soruya bir çok cevap bulunmuş. Günümüzde frekans hesaplamak için kullanılan binlerce algoritma var. Biz bir çok deneme yaptık ve en sonunda FFT (Fast Fourier Transform) algoritmasını kullanmaya karar verdik.

Meşhur matematikçi Joseph Fourier ispat etmiştir ki, tüm periyodik dalgalar (kendini tekrar eden) bir çok sinüs dalgasının birleşimiyle elde edilebilir. Bu sinüs dalgalarının, en yüksek şiddete (genelde) ve en düşük frekansa sahip olanı ise, o dalganın doğal frekansıdır.

Fourier, bunu ispat etmekle kalmayıp, bize tek tek herhangi bir dalganın içindeki her frekansı ve şiddeti hesaplamamızı sağlayan formülü de vermiştir. Buna Fourier Transform denir. Fourier Transform’u, mikro denetleyicimize yolladığımız bu dalga için kullanırsak, bu dalga içinde var olan her frekansı şiddetiyle beraber bulabiliriz.

Fourier transformu ise en hızlı ve verimli yapan algoritma, günümüzde FFT’dir. Yukarıda gördüğünüz dalgaya FFT algoritmasını uyguladığımızda karşımıza çıkan sonuç:

Gördüğünüz gibi doğal frekansın yanında, bir çok farklı frekans daha var. Bunlar sesin tınısını belirleyen etkenler. Bu şekilde, FFT algoritması sayesinde, bir ses dalgasının doğal frekansını çok yüksek bir çözünürlükte bulabiliyoruz. Bunu da bulabildiğimize göre, artık makinenin burguları döndürmesi kaldı.

3- Makinenin gitarın burgularını gerekli yöne döndürmesi

Eğer telin frekansı, istenilen frekansdan fazlaysa, tel bollaştırılır. Eğer telin frekansı, istenilen frekansdan azsa, tel gerginleştirilir. Peki burguları nasıl bir alet döndürebilir? Tabii ki de motorlar! Motor kullanacağımız zaten kesindi, ama bir çok çeşit motor var, hangisini kullanacağız?

Öncelikle elektrikle çalışan bir motor kullanacağımız kesin… Peki DC motor mu, servo motor mu, step motor mu, hangisi olmalı? Önce istediğimiz özelliklere bakalım:

  • Yavaş olsun, çok hızlı olursa hassas bir şekilde akort edemeyiz.
  • Güçlü olsun, burgular biraz sert.
  • İstediğimiz yöne dönebilsin, istediğimiz zaman durabilsin.

Bu özellikleri tam olarak bir DC motoru işaret ediyor. Sadece içinde yüksek çevrim oranına sahip bir redüktör olmalı ki hızı yavaş olsun ve yüksek torku olsun. Servo motor veya step motor da kullanılabilirdi fakat daha pahalı olmalarından başka bir katkıları olmazdı.

6 tane; 26 rpm hızla dönen, 1.96 Nm tork uygulayabilen motor aldık. Bu tork ve hız oldukça makuldu.

Motorları tutan mekanik sistem

Sıradaki olay, Bu 6 motoru da burguların dibinde tutacak, burguları kavrayacak bir sistem yapmaktı.

3D yazıcıdan çıkarttığımız parçalar

3D yazıcıdan çıkarttığımız parçalarla, motorları burguları döndürebilecek hale getirdik. Daha sonra ise, motorları burguların yanında havada tutacak bir sistem düşündük. Fakat istediğimiz zaman rahatça çıkartıp takabileceğimiz bir sistem olmalıydı.

Ortaya böyle bir tasarım çıktı. Raylı bir sistem yaptık ve bu sayede kolayca gitarı çıkartıp takabiliyorduk. İşin tasarım kısmı, aslında tam olarak bizim işimiz değildi. Yaptığımız sistem bir prototip ve endüstriyel bir ürün değil. Bu sistemi bir ürün haline getirmek, endüstriyel tasarım işi… Biz mühendislik tarafına yoğunlaşıp, bir prototip yarattık.

Tasarım kısmı da halledildikten sonra, geriye kalan tek şey; elektronik devreyi yapıp gerekli algoritmayı yazmaya kalmıştı.

Motorlar için elektronik devre

Motor dediğiniz alet, iki bacaklı bir devre elemanıdır. Motorumuz 12 volt ile çalışıyordu. Bir koluna +, diğer koluna – verdiğimizde bir yöne; tersini verdiğimizde ise diğer yöne dönüyor. Fakat biz bu motoru çok düşük güçlü elektronik sinyaller yollayan bir mikro denetleyici ile kontrol etmek istiyorduk. İşte bu noktada, karmaşık bir devre yapmamız gerekti. Düşük güçlü sinyallerle, yüksek güçlü motorlar nasıl yönetilir?

Cevap yine bir çok direnç ve transistörde. H-Bridge gibi çeşitli devreler ile motorları kontrol edebilirsiniz. Neyseki bunların hepsi, amfide olduğu gibi, entegre devreler olarak satılıyor. Biz iki çeşit entegre devre kullandık:

  • L293D (Motor Driver)
  • 74LS04 (Inverter)

L293D sayesinde gönderdiğimiz üç dijital sinyalle, motorun hangi yöne döneceğine ve durup durmayacağına karar verebiliyoruz. Inverter sayesinde ise, 3 dijital sinyali, 2 dijital sinyale indirgeyip, daha az micro denetleyici piniyle işimizi halledebiliyoruz.

Inverter ile kurduğumuz bu sisteme elektronikte decoder denir ve daha az sinyalle daha karmaşık bir bilgi yollamamızı sağlar. Normalde 3 sinyal yollamamız gerekirken, decoder sayesinde bunu 2’ye indirebildik.

Sonuç olarak ortaya çıkan sistemin tamamının şematiği aşağıdadır. Tıklayıp büyütebilirsiniz.

Motor kontrolü için algoritma

Hedef frekansı biliyoruz, anlık frekansı biliyoruz, motorlarımızı kontrol edebiliyoruz. Sıradaki iş, motorları nasıl kontrol edeceğimize karar vermek. Öncelikle, frekansı ne kadar sürede hesaplayabildiğimizi bilmemiz gerekiyor. Frekansı hesaplamamız yaklaşık 0.58 saniye sürüyor. 0.58 saniyede bir telimizin frekansını öğrendiğimizden, aşağıdaki animasyondaki gibi, osilasyon yaşama durumumuz olabiliyordu. Yani frekans okunduğunda, motoru bir yöne döndürmek gerekiyor fakat sonraki frekans okunana kadar motor çoktan doğru frekansı geçmiş oluyor, bu sefer ters yöne dönmek istiyor. Bu döngü sonsuza dek gidiyor.

Bu osilasyonu ortadak kaldırmanın iki farklı yolu vardı. Ya motorun dönme süresi kısıtlanacak, ya da motorun dönme hızı yavaşlatılacaktı. Biz dönme süresini kısıtlamayı tercih ettik.

Yazdığımız algoritma sayesinde; telin frekansı, doğru frekansa yaklaştıkça motor daha az dönüyor, doğru frekansdan uzaksa ise motor daha uzun süre dönüyor. Bu sayede, hiç bir osilasyon olmadan; motorun, telin frekansını doğru frekansa denk getirmesini sağladık. Bu kısıtlama süresini hesaplayabilmek için, birçok ölçüm ve linear regression kullandık.

Sonuç ve tavsiyeler

Bu proje fikri ilk konuşulduğunda, yapıp yapamayacağımızdan emin değildik. Ses, mikrofon, decoder, sinyaller, harmonikler ve frekans hesaplama hakkında hiç bir bilgimiz yoktu. Amfi denilen aletin isminden başka bir şeyini bilmiyorduk. Analog sinyalin bile tam olarak ne olduğunu bilmiyorduk. Fakat internetten ulaştığımız bir sürü kitap, video, makaleler ve grup çalışması sayesinde projeyi başarıyla başardık ve sonuçtan çok memnun kaldık.

Dolayısıyla hiç bir projeye “bunu yapmak imkansız, biz bu konudan anlamıyoruz” gibi bakış açılarından bakmayın. Günümüzün nimetleri sayesinde, ne yapıp edip konuyu öğrenip çok ilginç projeleri başarıyla tamamlayabilirsiniz.

Bu projeyi yapmamız, verdiğimiz araları saymazsak 3 hafta sürdü. Aslında ilk hedefimiz, 6 teli birden akort eden bir makine yapmaktı. Süre buna izin vermedi ama FFT yardımıyla yapılması kesinlikle mümkündü. Dolayısıyla bu konu halen daha gelişime oldukça açık ve geliştirilebilecek bir konudur.

Ayrıca projeye başladığımız zaman bilmiyorduk ama zaten böyle bir ürün üretilmiş ve zamanında ticari olarak satılmış. Ancak satışı artık devam etmiyormuş. Linkini verdiğim bu ürün, gitarın 6 telini birden aynı anda akort edebiliyor.

Yorumlar

E-posta hesabınız yayımlanmayacaktır.