Arduino ile Buzzer Çalıştırma

buzzer1

Bu yazıda Arduino ile nasıl ses çıkaracağımızı öğreneceğiz. İlk önce, Arduino ile ses üreteceğiz ve daha sonra bu devreye bir fotosel (LDR) ekleyeceğiz ve üzerinde elimizi sallayarak fotosele gelen ışık şiddetini değiştireceğiz. El hareketimize göre ses değişimleri üreten Theremin benzeri bir alet yapmaya çalışacağız.

Bu yazının ilk bölümünde, breadboard devremizdeki tek şey Piezo Buzzer olacak. Piezo ses cihazının bir pimi GND bağlantısına, diğeri de dijital pin 12’ye bağlayacağız. Devreyi aşağıdaki gibi kuralım;

buzzer2

buzzer3

Aşağıdaki kodu Arduino’ya yükleyelim;

/*
Arduino ile Ses üretme
*/
int buzzerPini = 12;

int notaSayisi = 10;
int notalar[] = {261, 277, 294, 311, 330, 349, 370, 392, 415, 440};
// mid C C# D D# E F F# G G# A
void setup()
{
for (int i = 0; i < notaSayisi; i++)
{
tone(buzzerPini, notalar[i]);
delay(500);
}
noTone(buzzerPini);
}
void loop()
{

}

Belirli bir notayı çalmak için, frekansı belirtmemiz gerekir. Aşağıdaki ses bölümünde bu konudan bahsedilmektedir. Her bir nota için farklı frekanslar bir dizi değişkeni (array) içerisinde tutulur. Dizi değişkeni, bir liste gibidir. Böylece, listedeki notları sırayla oynatarak müzikal bir ses çıkışı elde edilebilir. Burada notalar[] dizi değişkeni içerisindeki sesler bir for döngüsü içerisinde sırası ile çalınarak, bir ses tonu elde edilmiştir.

‘For’ döngüsü ‘i’ değişkenini kullanarak 0’dan 9’a kadar sayar. Her adımda çalınacak notanın frekansını elde etmek için ‘notalar[i]’ değişkenini kullanırız. Bu, ‘notalar[]’ dizisindeki ‘i’ konumundaki değer anlamına gelir. Örneğin, ‘notalar[0]’ = notalar[] dizi değişkenindeki 261 sayısına denk gelir, aynı şekilde ‘notalar[1]’ ise 277 sayısına denk gelir vb. Köşeli parantez içerisindeki sayı (0,1…..veya 9), dizi içerisindeki hangi sayının seçildiğini belirtir. Dizi içerisindeki ilk eleman 0 sayısı ile seçilir. Yani burada 0 sayısını belirttiğimizde, 261 sayısını seçmiş oluyoruz. Aynı şekilde [5] yazsaydık, 349 sayısını seçmiş olacaktık. Tabi bu programda bu seçimlerin tümü for döngüsü içerisinde otomatik olarak yapılmakta.

Arduino ses çıkışı veren özel bir fonksiyona sahiptir, tone(pin_no, frekans);

Bu fonksiyon iki parametre alır;

pin_no = ses sinyalini hangi pine gönderecek

frekans = çalınacak sesinin frekansı

Tüm notalar çalındıktan sonra, ‘noTone’ komutu ile belirtilen pinin herhangi bir nota çalmasını durdurulur.

Bu programı loop() fonksiyonu içerisinde de yazabilirdik, ancak loop fonksiyonu sürekli çalışacağı için tekrar tekrar aynı notaları çalmak biraz tuhaf olur düşüncesiyle sadece setup() içerisinde yazdık. notaları tekrar dinlemek için reset butonuna basmak yeterli olacaktır. Tabi isterseniz siz programı loop() içerisinde yazıp, devreye bir buton ilave ederek programı da istediğiniz gibi revize ettikten sonra butona basılınca ses çıkışı veren bir hale getirebilirsiniz.

SES

Ses dalgaları, hava basıncındaki titreşimlerdir. Titreşimlerin hızı (saniye başına döngü veya Hertz), sesin perdesini belirleyen faktördür. Titreşim frekansı ne kadar yüksek olursa, perde de o kadar yüksek olur.

buzzer4

Mid C notası genellikle 261 Hz frekansı olarak tanımlanır. Bir dijital çıkışı her saniyede 261 kez açıp kapatırsanız, bu ses çıkışı ile Mid C’yi elde etmiş olursunuz.

Çıktıştaki sesi duymak için elektrik sinyalini ses dalgalarına dönüştüren bir şey bağlamamız gerekir. Bu bir hoparlörle veya burada kullandığımız piezo buzzer ile yapılabilir.

Piezo buzzer, içerisinde bir elektrik sinyali geçerken genişleyen ve daralan özel bir kristale sahiptir. Bu malzeme vasıtasıyla, duyabileceğimiz bir ses tonu oluşturur.

Theremin, önünde ellerinizi gezdirdiğinizde ürkütücü sentezlenmiş sesler çıkaran bir müzik aletidir. Orijinal bir Theremin, Star Trek serisi için tema müziğinde kullanılmıştır.

Daha az müzikal olsa da benzer bir enstrüman yapacağız, ancak yinede önünde elimizi salladığımızda notanın tonunu değiştirebileceğiz.

Aşağıdaki devreyi kurarak işe başlayalım ve yine aşağıdaki kodu Arduino’ya yükleyelim;

buzzer5

devrenin çalışması ile ilgili video;

/*

Pseudo Thermin
*/
int speakerPin = 12;
int photocellPin = 0;
void setup()
{}
void loop()
{
int reading = analogRead(photocellPin);
int pitch = 200 + reading / 4;
tone(speakerPin, pitch);
}

Program aslında gerçekten basittir. Işık yoğunluğunu ölçmek için A0’dan sadece bir analog okumaya yapıyoruz. Bu değer, 0 ila 700 gibi bir aralıkta olacaktır.

En düşük frekansı 200 Hz civarında yapmak için, okuduğumuz bu ham değere 200 değerini ekledik ve bize 200Hz ila 370Hz civarında bir dizi vermesi için okuma değerini 4’e böldük.

Aşağıdaki satırdaki 4 değerini daha düşük ve daha yüksek değerlere değiştirmeyi deneyin.

int pitch = 200 + reading / 4;
Bu, frekans aralığını genişletecek veya sınırlandıracaktır.

Umarım faydalı olmuştur ve eğlenmişsinizdir…

Yorum bırakın