Proje 06 - Mesafe Sensörü (Teremin)
Giriş
Bu projede mesafe sensörü kullanarak müzik yapmayı öğreneceksin. Elektronik bir "teremin" yapacağız - bu, elini alçına yaklaştırıp uzaklaştırarak farklı notalar çıkarabileceğin özel bir müzik aleti!
Teremin, 1920'lerde Rus mucit Lev Sergeyeviç Termen tarafından icat edilmiş, dokunmadan çalınan ilk elektronik müzik aleti. Bizim versiyonumuz ultrasonic (sesötesi) mesafe sensörü kullanarak elinin sensöre olan uzaklığını ölçüyor ve bu mesafeyi müzik notalarına dönüştürüyor. Elin sensöre ne kadar yakınsa ses o kadar tiz, uzaksa o kadar pes oluyor.
Bu projede HC-SR04 ultrasonic sensörünü ve önceki projelerden tanıdığın buzzer'ı kullanacağız. Ayrıca Arduino'nun map() fonksiyonunu ve mesafe ölçümünün nasıl çalıştığını öğreneceksin.
Elektronik
HC-SR04 ultrasonic sensörü mesafe ölçmek için sesötesi (ultrasonic) dalgalar kullanır - tıpkı yarasaların karanlıkta yön bulmak için kullandığı sistem gibi!
Sensör şu şekilde çalışır:
-
Trigger (Tetik) pini - Arduino'nun 6 numaralı pininden gelen sinyal ile sensöre "mesafe ölç" komutu verilir
-
Echo (Yankı) pini - Arduino'nun 5 numaralı pininden sensörün ölçüm sonucunu okur
-
Sensör, trigger sinyali aldığında 40kHz frekansta 8 adet ses dalgası gönderir
-
Bu dalgalar önündeki nesneden yansıyıp geri döner
-
Echo pini, dalganın gidip gelme süresini Arduino'ya bildirir
-
Arduino bu süreyi mesafeye çevirir (ses hızı: yaklaşık 343 m/s)
Devre üzerinde buzzer'ın 3 numaralı pine bağlı olduğunu görüyorsun. Bu pin, tone() fonksiyonu ile farklı frekanslarda sinyal üretebildiğin pinlerden biri. (Diğeri de pin 11)
Mesafe sensörünün menzili yaklaşık 2cm ile 400cm arasında. Projemizde bu aralığı 2-32cm olarak sınırladık çünkü müzik yapmak için çok uzun mesafeler pratik değil.
Kod
Bu projede ilk defa bir "kütüphane" kullanacağız. Kütüphaneler, belirli bir iş için yazılmış, kendi projelerinizde kullanabileceğin hazır kodlardır.
O kod için gereken bir kütüphane kurulu değilse, şöyle bir hata mesajı alırsın:
Compilation error: HCSR04.h: No such file or directory
Kütüphane kurulumu gerektiren tüm projelerde aşağıdaki bilgi kutusu olacak.
Kütüphane kurulumu gerekli
Bu projenin çalışması için bazı kütüphanelerin kurulmuş olması gerektiriyor. Detaylı kütüphane kurulum talimatları için Kütüphane kurma sayfasına bakabilirsin.
Bu proje için gerekli kütüphane:
- HCSR04 Martin Sosic
Şimdi Arduino IDE'yi açıp aşağıdaki kodu yazabilirsin:
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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 | |
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 elini mesafe sensörünün önüne yaklaştırıp uzaklaştırdığında farklı notalar duyacaksın. Elin sensöre ne kadar yakınsa ses o kadar tiz, uzaklaştırdıkça daha pes sesler çıkacak. 2cm'den yakın veya 32cm'den uzak mesafelerde ses kesilecek.
Olmadı mı?
Eğer bu süreçte bir problemle karşılaşırsan Sorun giderme kısmına bir göz at.
Egzersizler
Böylece mesafe sensörüyle müzik yapmayı ve map() fonksiyonunu kullanmayı öğrenmiş oldun. Bu projede öğrendiklerinle aşağıdakileri yapabilir misin?
- Teremin'in mesafe aralığını genişletebilir misin? Örneğin 2-50cm yaparsak ne olur? 1
- LED'i de ekleyerek, mesafeye göre hem ses hem de LED parlaklığı değişen bir sistem yapabilir misin? 2
- Sadece belirli notalarda (örneğin sadece DO-RE-MI-FA-SOL) çalan bir pentatonik teremin yapabilir misin? 3
-
max_mesafedeğerini 50 yaparak deneyebilirsin. Daha geniş alan daha fazla kontrol imkanı sağlar ama uzun mesafelerde sensör bazen kararsız ölçümler yapabilir. ↩ -
analogWrite()fonksiyonunu kullanarak LED'in parlaklığını kontrol edebilirsin. Mesafeyi 0-255 aralığına map'leyip LED'e uygula. LED'i 10. pine bağlamayı unutma! ↩ -
Yeni bir dizi oluştur:
int pentatonik[] = { DO_3, RE_3, MI_3, SOL_3, LA_3, DO_4, RE_4, MI_4, SOL_4, LA_4 };Bu dizinin boyutunu 10 yapman gerekecek. ↩