Proje 05 - Buzzer
Giriş
Bu projede Arduino'nun nasıl ses çıkarabileceğini öğreneceksin. Tabii ki profesyonel bir müzik aleti kadar kaliteli olmayacak ama... internetin en ünlü şarkısını çalmaya yetecek kadar iyi! 🎵
Yeni Kavramlar
Constantlar (const)
const, değeri değişmeyecek sabitler tanımlamak için kullanılır. const int DO_3 = 262; şeklinde tanımlandıktan sonra DO_3'ün değeri program boyunca 262 olarak kalır. Nota frekansları gibi sabit değerler için idealdir.
Niye değişken olarak tanımlamak yerine bunu yapayım diye merak ediyorsan, arduino'da RAM, yani programın çalışırken kullandığı hafıza çok sınırlıdır. Bu şekilde tanımlanan değerler RAM'de hiç yer kaplamaz.
Diziler (array)
Diziler, aynı tipte birden fazla değeri tek bir değişken altında saklar. int melodi[] şeklinde tanımlanır. İlk eleman 0. sırada, ikinci eleman 1. sırada... şeklinde numaralanır, yani diziler söz konusu olduğunda saymaya alıştığın gibi 1'den değil, 0'dan başlarsın.
Burada melodi[] dizisi, çalmak istediğimiz notaların frekanslarını sırayla tutuyor.
Dizi İndeksleme
Köşeli parantezlerle bir dizinin elemanlarına erişebilirsin. melodi[0] ilk elemanı, melodi[i] i. sıradaki elemanı verir. (Unutma ki, dizilerde saymaya hep 0'dan başlıyoruz). Dizinin istediğimiz elemanını seçmek için kullanılır.
for Döngüsü
For döngüsü, belirli sayıda tekrar yapılacak işlemler için kullanılır. Üç bölümden oluşur ve parantez içinde noktalı virgülle ayrılır:
1 2 3 | |
- Başlangıç (int i = 0): Döngü başlarken bir kez çalışır. Burada sayaç değişkeni i'ye sıfır değerini atıyoruz.
- Koşul (i < notaSayisi): Her döngüde kontrol edilir. Koşul doğru olduğu sürece döngü devam eder. Bu örnekte i, notaSayısı değişkeninin değerinden küçük olduğu sürece döngü devam eder.
- Artış (i++): Her döngü tamamlandıktan sonra çalışır. Burada i değişkenini 1 artırarak bir sonraki elemana geçmemizi sağlar.
Bu sayede melodi dizisindeki tüm notaları (0'dan notaSayisi-1'e kadar) için küme parantezleri {} arasındaki kod bloğu çalışıyor.
tone() Fonksiyonu
tone() fonksiyonu, buzzerdan belirtilen frekansta ses çıkarır. tone(pin, frekans, süre) şeklinde kullanılır.
noTone() Fonksiyonu
noTone() fonksiyonu, buzzerdaki sesi durdurur.
Matematik İşlemleri
Çarpma (*) operatörü, sayısal değerleri çarpmak için kullanılır. sureler[i] * 0.3 gibi ifadelerle notalar arası boşluklar hesaplanır.
Elektronik
Devrede Q103 olarak işaretlenmiş eleman bir NPN transistör. LED devresinde gördüğün transistörle aynı çalışma prensibi var - elektrikle açılıp kapanabilen bir anahtar gibi düşünebilirsin.
Arduino'nun 3 numaralı dijital pini, R284 direnci (2KΩ) üzerinden transistörün baz bacağına bağlı. R302 direnci (10KΩ) ise bir "pull-down" direnci olarak görev yapıyor - Arduino pini aktif olmadığında transistörün bazını sıfır volta çekerek transistörün tamamen kapalı kalmasını sağlıyor.
Arduino'nun 3 numaralı pininden HIGH (5V) sinyal geldiğinde, R284 üzerinden transistörün bazına akım gider ve transistör iletime geçer. Bu durumda R303 direnci ve buzzer üzerinden akım akmaya başlar. Buzzer'ın içindeki piezoelektrik kristal bu akımla titreşerek ses çıkarır.
D004 olarak işaretlenmiş 1N4148 diyodu, buzzer'ın bacakları arasına ters olarak bağlanmış bir koruma diyodu. Buzzer gibi bobinli elemanlar aniden kapatıldığında ters yönde yüksek gerilim üretebilir. Bu diyot o zararlı gerilimi sönümleyerek transistörü korur.
C19 kondansatörü (100nF) güç kaynağındaki elektrriksel gürültüleri filtreleyerek daha temiz bir ses elde edilmesini sağlar.
Buzzer'dan çıkacak sesin frekansı, Arduino'nun tone() fonksiyonuyla belirlenir. Bu fonksiyon pin 3'e belirlenen frekansta HIGH-LOW sinyalleri göndererek buzzer'ı o frekansla titreştirir ve böylece istenen notayı çalar.
Kod
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | |
Kodu nasıl Arduino'ya yüklerim?
Kiti USB kablosuyla bilgisayarına bağlayıp, Arduino IDE penceresinde bulunan
butonuna basarak kodu yükleyip çalıştırabilirsin.
Kod çalıştığında buzzer'dan çalan tanıdık bir melodi duyacaksın.
Olmadı mı?
Eğer bu süreçte bir problemle karşılaşırsan Sorun giderme kısmına bir göz at.
Böylece buzzer'dan ses çıkartmayı ve for döngülerini kullanmayı öğrenmiş oldun. Bu projede öğrendiklerinle aşağıdakileri yapabilir misin?
- Butonla beraber kullanarak butona basıldığında bu melodiyi çalan bir kapı zili yapabilir misin?
- Potansiyometre ile melodimin çalma hızını kontrol edebilir misin?1
-
delay() değerlerini birşeyle çarpman gerekecek. ↩