E-Bülten’e kayıt olun

E-Posta:



Arduino ile Imperial March Çalmak

Arduino ile Imperial March Çalmak

Geçtiğimiz Cuma günü itibariyle Star Wars’ın son filmi vizyona girdi. Şüphesiz yolda giderken Imperial March şarkısını mırıldandığınızı veya patronunuzun iş yerine geldiğinizde bunu dinlediğine şahit olmuşsunuzdur. Emin olun aklınızdan gün boyunca çıkmayacaktır. Benim de böyle oldu desem yalan olmaz. Patronumla başlayan akım, ofiste mırıldanmalara ve daha sonrasından işime kadar etki etti. Bu yazımda sizlere bu akımın son aşaması olmasını umduğum Arduino ile Star Wars Imperial March şarkısını monofonik olarak nasıl çalacağımızı anllatacağım.

 

Gerekli malzemeler:

  1. Şarkının aslı (mırıldanmanız bile yeterli)
  2. Arduino UNO veya Leonardo
  3. Aktif Buzzer
  4. Jumper Wire (Bağlantı kabloları)

1. Aşama : Arduino Üzerine Bileşenleri Yerleştirmek

Donanımsal olarak fazla bir şey yapmamıza gerek yok 🙂 Ses çıkarması için bir Aktif Buzzer’a ihtiyaç duyuyoruz. Şemayı aşağıda paylaşıyorum.

Arduino ile Imperial March çalmak için gerekli kart/devre şeması

Eğer KeyEs’in 3 bacaklı modeline sahip iseniz bağlantı şekli şu şekilde olacaktır.

Aşama 2: Arduino ile Imperial March yazımı

Uygulamanın kodlarına Github üzerinden ulaşmak için tıklayınız

[php]
int ledPin = 13;
//Arduino UNO ve Leonardo üzerinde varsayılanda bulunan LED’lerden birisi de D13 pinine bağlı LED’imizdir. Tanımlamasını yapıyoruz.

//Buzzer’ı herhangi bir PWM pinine bağlayalım.
int speakerPin = 11;
#define c 261
#define d 294
#define e 329
#define f 349
#define g 391
#define gS 415
#define a 440
#define aS 455
#define b 466
#define cH 523
#define cSH 554
#define dH 587
#define dSH 622
#define eH 659
#define fH 698
#define fSH 740
#define gH 784
#define gSH 830
#define aH 880
//Her bir tonun frekansını ayarlamak için şu programı kullanıyorum.
//http://home.mit.bme.hu/~bako/tonecalc/tonecalc.htm

void setup()
{
pinMode(ledPin, OUTPUT);
// LED’imizi çıkış pini olarak belirleyelim.
pinMode(speakerPin, OUTPUT);
// Buzzer’ı da aynı şekilde çıkış pini olarak belirleyelim.
}

void loop() // tekrar tekrar ve tekrar çalması için döngümüzü oluşturalım
{
march();
}

// Kendi fonksiyonumuzu yazalım.
void beep (unsigned char speakerPin, int frequencyInHertz, long timeInMilliseconds)
{
// Her bir nota çaldığında LED’imiz yansın.
digitalWrite(ledPin, HIGH);

int x;
long delayAmount = (long)(1000000/frequencyInHertz);
long loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
for (x=0;x<loopTime;x++)
{
digitalWrite(speakerPin,HIGH);
delayMicroseconds(delayAmount);
digitalWrite(speakerPin,LOW);
delayMicroseconds(delayAmount);
}

//Sonra sönsün
digitalWrite(ledPin, LOW);

// Küçük bir gecikme koyarak notalarımızın daha net çıkmasını sağlayalım.
delay(20);
}

void march()
{
//Müziğe buradan ulaşabilirsiniz:
//http://www.musicnotes.com/sheetmusic/mtd.asp?ppn=MN0016254

beep(speakerPin, a, 500);
beep(speakerPin, a, 500);
beep(speakerPin, a, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);

beep(speakerPin, a, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);
beep(speakerPin, a, 1000);
//ilk bit

beep(speakerPin, eH, 500);
beep(speakerPin, eH, 500);
beep(speakerPin, eH, 500);
beep(speakerPin, fH, 350);
beep(speakerPin, cH, 150);

beep(speakerPin, gS, 500);
beep(speakerPin, f, 350);
beep(speakerPin, cH, 150);
beep(speakerPin, a, 1000);
//ikinci bit…

beep(speakerPin, aH, 500);
beep(speakerPin, a, 350);
beep(speakerPin, a, 150);
beep(speakerPin, aH, 500);
beep(speakerPin, gSH, 250);
beep(speakerPin, gH, 250);

beep(speakerPin, fSH, 125);
beep(speakerPin, fH, 125);
beep(speakerPin, fSH, 250);
delay(250);
beep(speakerPin, aS, 250);
beep(speakerPin, dSH, 500);
beep(speakerPin, dH, 250);
beep(speakerPin, cSH, 250);
//ilgi çeken bölümün başlangıcı

beep(speakerPin, cH, 125);
beep(speakerPin, b, 125);
beep(speakerPin, cH, 250);
delay(250);
beep(speakerPin, f, 125);
beep(speakerPin, gS, 500);
beep(speakerPin, f, 375);
beep(speakerPin, a, 125);

beep(speakerPin, cH, 500);
beep(speakerPin, a, 375);
beep(speakerPin, cH, 125);
beep(speakerPin, eH, 1000);
//Daha ilginç kısmı 🙂

beep(speakerPin, aH, 500);
beep(speakerPin, a, 350);
beep(speakerPin, a, 150);
beep(speakerPin, aH, 500);
beep(speakerPin, gSH, 250);
beep(speakerPin, gH, 250);

beep(speakerPin, fSH, 125);
beep(speakerPin, fH, 125);
beep(speakerPin, fSH, 250);
delay(250);
beep(speakerPin, aS, 250);
beep(speakerPin, dSH, 500);
beep(speakerPin, dH, 250);
beep(speakerPin, cSH, 250);
//tekrar… tekrar

beep(speakerPin, cH, 125);
beep(speakerPin, b, 125);
beep(speakerPin, cH, 250);
delay(250);
beep(speakerPin, f, 250);
beep(speakerPin, gS, 500);
beep(speakerPin, f, 375);
beep(speakerPin, cH, 125);

beep(speakerPin, a, 500);
beep(speakerPin, f, 375);
beep(speakerPin, c, 125);
beep(speakerPin, a, 1000);
// ve sahalara çıkmaya hazırız!
}
[/php]

 

Aşama 3: Kayıt!

Oğuzhan Kayar

Oğuzhan ile 2015-2017 yılları arasında Turkcell Zeka Küpü Projesi'nde beraber çalıştık.

3 Yorumlar
  • Ali Işıngör
    Yanıtla
    Gönderim01:51, 24 Aralık 2015

    Çok eğlenceliymiş. Bunu okullar için yazdığımız Arduino eğitimleri arasına alsak mı? 🙂

  • A Person From Earth
    Yanıtla
    Gönderim20:19, 10 Kasım 2018

    Evde arduinom ile güzel bir etkinlik oldu 😀

Yorum Yaz

Yorum
İsim
E-Posta
Website