All for Joomla All for Webmasters
Yapabilecekleriniz hayal gücünüz kadar geniştir.
STM
ARDUİNO
ONUR KÖSE
Kişisel Blog

Arduino 2×16 LCD ile Spektrum Analizör

Merhaba arkadaşlar bu yazımda oldukça zevkli bir proje olan Arduino ile 2×16 karakter LCD kullanarak spektrum analizör yapmayı anlatacağım.

Spektum analizör; Girişinde ki elektriksel sinyallerin belirlenen frekans aralığındaki genlik değişimini gösteren cihazlara denir.

Ancak bizim yapacağımız bu cihaz değil. Analizörün ekranında bu değişimler çeşitli grafikler ile gösterilir. Bizde bu grafiğe benzer bir görüntüyü, Winamp programında çalan şarkının belirli frekanslarda ki genliğini alarak bu genlikleri ekranda göstermek olacaktır. Peki bu frekans genliklerini nasıl alacağız? Cevap: Winamp programına yazılmış bir eklenti ile bu genlikleri seri porttan 19200 band hızında Arduino ile alarak belirli bir çözme işleminden geçireceğiz ve LCD ekranda göstereceğiz.

İlk önce eklentinin nasıl yükleneceğini anlatayım;

Bilgisayarımıza Spectrum Analyzer dosyasını indiriyoruz.

İndirilen Winrar arşivi içindeki dosyaları masaüstüne çıkartalım.

Elimizde gen_crownsoft_lcd.dll ve lcd_analyzer.ini adlı 2 adet dosya bulunmaktadır.

gen_crownsoft_lcd.dll adlı dosyayı Winamp programını kurulu olduğu yere, yani standart olarak “C:\Program Files (x86)\Winamp\Plugins” adresine gidip oraya kopyalayalım.

lcd_analyzer.ini dosyasını da “C:\” sürücüsü içine kopyalayalım. Bu işlemleri yaparken Winamp kapalı olsun.

Kartımızı bağladıktan sonra lcd_analyzer.ini dosyasında değişiklik yapacağız, konu sonunda anlatacağım.

Eklenti yükleme işimiz bitmiştir şimdi devremizi inceleyelim;

Devremizde sadece 2×16 karakter LCD bulunmaktadır. Potansiyometre LCD kontrast ayarı içindir. LCD bağlama ile ilgili konuyu daha önce anlatmıştım. Bağlantı pinlerini istediğiniz gibi değiştirebilirsiniz. Ben yazılımı bu bağlantı üzerinden anlatacağım.

Yazılıma geçmeden önce Winamp programında ki eklenti bize veriyi nasıl gönderiyor inceleyecek olursak;

Resimde ki RealTerm adlı program ile istediğiniz portta ki veri iletişimini izleyebilir veya komut gönderebilirsiniz. Programı sadece giden verileri göstermek amacıyla kullandım.

Gördüğünüz gibi Winamp programı o anda çalan şarkı ile j00a, j51h, j81c, j70e, i90 , i60  gibi komutlar göndermektedir.

Bu komutlar;

j – sütun – satır – bar şeklinde bir komut formatı belirtmektedir. Bar kısmı yazılımda harfler ile tanımlanmış 5×8 LCD matrisini x ekseninde alttan başlayarak dolduran çizgilerdir.

j00a — 0. sütun 0. satırda en alt x eksenine 1 satır çizgi çizer,

j01b — 0. sütun 1. satırda en alt x eksenine 2 satır çizgi çizer,

i – sütun – satır – karakter şeklinde bir komut formatı belirtmektedir. Bu komut formatı belirtilen sütun satır konumuna göre gönderilen karakteri yazdırır. Winamp bu format ile boşluk karakteri gönderir. Bunun nedeni barlar alt satıra indiği anda, inen bara karşılık gelen üst satırdaki çizgileri silmektir.

k komutu şarkı başladığı ve kapatıldığı anda gönderilir. Bu komut LCD ekranıda ki tüm noktaları temizler.

Biraz karışık gelebilir ancak yazılımda inceliğimiz zaman daha net anlaşılacaktır.

Sıra geldi yazılıma. Yazılımda bu gelen komut formatlarını ayrıştırarak belirtilen satır sütün bilgisine göre gönderilen harf değerinde bar çizdireceğiz.

Kısaca anlatacak olursak;

Önceki yazılarımda özel karakter oluşturmayı anlatmıştım. Her bir bar uzunluğu için çizgi tanımlanmıştır.

for komutu ile bu tanımlanan bar çizgileri LCD özel karakter hafızasına yüklenmiştir.

Komutu ile seri port okunup gelen veri rxbyte adlı değişkene atanmıştır.

Seri porttan verilen bayt(0 – 255) halinde geldiğin için ilk gelen veri i, j veya k olacaktır. if koşulları ile ilk gelen karaktere bakılmaktadır.

komutları ile satır ve sütün bilgileri alınarak r1 ve r2 değişkenlerine aktarılmıştır.

Bu komut ile gelen sütun ve satır bilgilerine göre LCD kursorü o konuma alınmaktadır.

Bu komutu biraz detaylandıracak olursak; Winampın gönderdiği komutların son harfi a,b,c,d,e,f,g,h olmaktadır. ‘a’ karakteri ASCII tabloda 10luk tabanda 97 sayısına denk gelmektedir. serial_getch() – 97 formülünde gelen veri 97 sayısından çıkarılır. Yani ‘a’ geldiği anda LCD hafızasındaki 0. karakter çağırılır. ‘b’ geldiğinde 98 – 97 olur ve hafızada ki 1. karakter çağrılır. Böylece gelen veriye göre bar yüksekliği değiştirilir.

Şimdi eklenti için ayar yapmamız gerekiyor.

Konunun üst kısımlarında “C:\” adresine lcd_analyzer.ini adlı bir dosya atmıştık. Bilgisayar Arduinoyu seri port bağlantısı olarak gördüğü için belirli bir port adresi atayacaktır. Bu adresler COM1, COM3, COM10 gibi olabilir. Bu port adresini Aygıt Yöneticisini açarak Bağlantı noktaları (COM ve LPT) kısmından görebiliriz. Orada yazan port adını not edelim.

Bende Arduinonun bağlı olduğu port COM3’dür.

lcd_analyzer.ini dosyasını açalım.

[lcd_analyzer] port=COM8
baud_rate=19200
update_interval=5

Dosya içinde üstteki yazılar bulunmaktadır. port=COM8 kısmını Aygıt Yöneticisinden not ettiğimiz port numarasını yazalım. Devremiz bitmiştir.

***Dikkat etmeniz gereken nokta Bilgisayar tek bir bilgisayar portunu o anlık kullanıma açtığı için Winamp açık iken Arduino ile seri porttan iletişim kuran tüm programları kapatın. Aksi takdirde Winamp açıldığı anda eklenti “COM port open failed” içerikli bir hata verecektir.

Şimdi Winamp programından bir müzik açalım ve LCDye bakalım.

About the author

6 Responses
  1. Alamayız çünkü bilgisayarda çalan müziğin bant bilgisi seri port üzerinden geliyor. Ses çıkışından almak için ADC modülü ile dönüştürüp sonra bunu fft ile çözümleyip istediğin bantları ayrıştırman gerek ancak bunu arduino gibi düşük hızlı kartların/entegrelerin yapması çok zor. MSGEQ7 adlı entegre direk ses çıkışından gelen sesi 7 kanala ayrıştırıp sana 7 bantı dijital veri olarak gönderiyor. Böyle bir entegre ile direk ses çıkışından spektrum analizör yapabilirsin.

Leave a Reply

Merhaba

Bloguma Hoşgeldiniz.

Arşivler

Çevrimiçi Kişiler

1 misafir