Arduino metronom, potansiyometreyle ayarlanan tempoda (dakikada 40-208 vuruş) pasif buzzerdan tık sesi çıkarıp LED yakan bir projedir. İki vuruş arasındaki süre 60.000 / BPM milisaniyedir; 120 BPM'de her 500 ms'de bir tık duyulur. Ölçünün ilk vuruşu daha tiz çalar ve buton 2/4, 3/4, 4/4 ölçüleri arasında geçiş yapar.
Müzik aleti çalışan herkes metronomun değerini bilir: düzenli bir tık sesi, parçayı aynı hızda çalmayı öğretir. Bu projede Arduino Uno, pasif buzzer, potansiyometre ve LED ile ayarlanabilir bir metronom yapıyoruz. Proje müzik dersini fizik (frekans, periyot) ve kodlamayla birleştirir; ortaokul, lise ve TÜBİTAK 4006 projeleri için uygundur.
Metronom nedir?
Metronom, müzisyenin tempoyu korumasına yardım etmek için ayarlanabilir aralıklarla düzenli ses ya da ışık veren bir zaman tutma aracıdır. Tempo BPM (beats per minute, dakikadaki vuruş sayısı) ile ölçülür.
Eski metronomlar sarkaçla çalışırdı; sarkaç üzerindeki ağırlık kaydırılarak tempo değiştirilirdi. Elektronik metronomda bu işi bir mikrodenetleyicinin saati yapar. Arduino milisaniye hassasiyetinde zaman tuttuğu için tempo düzenlidir.
Hangi malzemeler gerekir?
Arduino metronom için Arduino Uno, pasif buzzer, 10 kΩ potansiyometre, bir LED ve 220 Ω direnç, bir buton ve jumper kablolar yeterlidir. OLED ekran isteğe bağlıdır; tempoyu sayı olarak gösterir.
Malzeme listesi
| Malzeme | Adet | Ne işe yarar? |
|---|---|---|
| Arduino Uno R3 (CH340, USB kablolu) | 1 | Zamanı tutar, sesi üretir |
| Pasif buzzer 17 mm | 1 | Tık sesi (farklı frekanslarda) |
| B103 10K potansiyometre | 1 | Tempo ayarı (40-208 BPM) |
| 5 mm kırmızı LED paketi | 1 | Her vuruşta yanıp söner |
| 220 Ω direnç (1/4 W) | 1 | LED akımını sınırlar |
| 6x6 mm tact buton | 1 | Ölçü seçimi (2/4, 3/4, 4/4) |
| 0,96 inç I2C OLED ekran (SSD1306) | 1 | BPM ve ölçüyü gösterir (isteğe bağlı) |
| Jumper kablo seti ve breadboard | 1 | Bağlantılar |
Pasif buzzer kullanmamızın nedeni ses perdesini kodla değiştirebilmektir; aktif buzzer tek bir tonda öter. Farkı aktif ve pasif buzzer farkı yazısında anlattık.
Devre nasıl bağlanır?
Potansiyometrenin orta ucu A0'a, buzzer D8'e, LED 220 Ω dirençle D7'ye, buton D2'ye bağlanır; OLED kullanılacaksa SDA A4'e, SCL A5'e gider.
- Potansiyometre: bir yan uç 5V'a, diğer yan uç GND'ye, orta uç A0'a. Çalışma mantığı için potansiyometre nedir yazısına bakabilirsiniz.
- Pasif buzzer: artı (+) ucu D8'e, diğer ucu GND'ye.
- LED: uzun bacak (anot) 220 Ω direnç üzerinden D7'ye, kısa bacak (katot) GND'ye.
- Buton: bir ucu D2'ye, çaprazındaki ucu GND'ye. Kod iç pull-up direncini kullandığı için ek direnç gerekmez.
- OLED (isteğe bağlı): VCC → 5V, GND → GND, SDA → A4, SCL → A5.
- USB kablosunu takıp kodu yükleyin; potansiyometreyi çevirince tık hızının değiştiğini kontrol edin.
Metronom kodu nasıl çalışır?
Kod potansiyometreyi 40-208 BPM aralığına çevirir, iki vuruş arası süreyi 60.000 / BPM formülüyle hesaplar ve bu süre her dolduğunda buzzerdan kısa bir tık çalıp LED'i yakar.
const byte BUZZER = 8, LED = 7, BUTON = 2, POT = A0;
byte olcu = 4; // ölçüdeki vuruş sayısı: 2, 3 ya da 4
byte vurus = 0; // ölçü içindeki sıra (0 = ilk vuruş)
int bpm = 120;
unsigned long sonVurus = 0, ledZamani = 0;
void setup() {
pinMode(LED, OUTPUT);
pinMode(BUTON, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
int yeni = map(analogRead(POT), 0, 1023, 40, 208); // tempo ayarı
if (yeni != bpm) {
bpm = yeni;
Serial.print("BPM: ");
Serial.println(bpm);
}
if (digitalRead(BUTON) == LOW) { // ölçü: 2 → 3 → 4 → 2
olcu = (olcu == 4) ? 2 : olcu + 1;
vurus = 0;
Serial.print("Olcu: ");
Serial.print(olcu);
Serial.println("/4");
delay(250);
while (digitalRead(BUTON) == LOW); // bırakılmasını bekle
}
unsigned long araSure = 60000UL / bpm; // iki vuruş arası (ms)
if (millis() - sonVurus >= araSure) {
sonVurus = millis();
if (vurus == 0) tone(BUZZER, 2000, 30); // ölçü başı: tiz tık
else tone(BUZZER, 1000, 30); // diğer vuruşlar
digitalWrite(LED, HIGH);
ledZamani = millis();
vurus = (vurus + 1) % olcu;
}
if (millis() - ledZamani >= 60) digitalWrite(LED, LOW); // LED 60 ms yanar
}
Kodda delay() yerine millis() kullanılır. delay() beklerken Arduino başka iş yapamaz; potansiyometre ve buton geç okunur. millis() ise saati kontrol edip beklemeden döngüye devam eder. Aynı yöntemi reaksiyon süresi oyunu projesinde de kullandık.
OLED ekran eklemek
OLED kullanacaksanız "Adafruit SSD1306" ve "Adafruit GFX" kütüphanelerini kurun ve koda şu parçaları ekleyin. ekran() işlevini BPM ya da ölçü değiştiğinde çağırın; her vuruşta çağırmayın, çünkü ekranı yenilemek birkaç on milisaniye sürer.
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_SSD1306 oled(128, 64, &Wire, -1);
void ekran() {
oled.clearDisplay();
oled.setTextSize(3);
oled.setCursor(0, 8);
oled.print(bpm);
oled.setTextSize(2);
oled.setCursor(70, 14);
oled.print("BPM");
oled.setCursor(0, 44);
oled.print(olcu);
oled.print("/4");
oled.display();
}
// setup() içine: oled.begin(SSD1306_SWITCHCAPVCC, 0x3C); oled.setTextColor(SSD1306_WHITE); ekran();
Hangi tempo ne kadar hızlıdır?
Tempo arttıkça iki vuruş arası süre kısalır: 60 BPM'de vuruşlar 1 saniye, 120 BPM'de 0,5 saniye arayla gelir. Müzikte tempolar İtalyanca terimlerle anılır; aralıklar kaynaklara göre biraz değişir.
| Terim | Anlamı | Yaklaşık BPM | İki vuruş arası |
|---|---|---|---|
| Largo | Çok ağır, geniş | 40-60 | 1.500-1.000 ms |
| Adagio | Ağır | 66-76 | 909-789 ms |
| Andante | Yürür hızda | 76-108 | 789-556 ms |
| Moderato | Orta | 108-120 | 556-500 ms |
| Allegro | Hızlı, canlı | 120-156 | 500-385 ms |
| Presto | Çok hızlı | 168-200 | 357-300 ms |
Ses perdesi ise frekansa bağlıdır: kodda ölçü başı 2.000 Hz, diğer vuruşlar 1.000 Hz çalar. 2.000 Hz, 1.000 Hz'in bir oktav üstüdür; kulak farkı kolayca ayırt eder.
Hangi güvenlik kurallarına dikkat edilmeli?
Metronom USB'den 5V ile çalışır ve güvenli bir projedir; yine de şu kurallara uyun:
- Devreyi bilgisayarın USB çıkışından, USB powerbank'tan ya da en çok 12V'luk bir adaptörden besleyin. 220V şebeke elektriğine hiçbir şey bağlamayın.
- LED'i dirençsiz bağlamayın; LED ve Arduino pini zarar görebilir.
- Buzzeri kulağınıza yaklaştırmayın; yakından tiz ses rahatsız edicidir.
- Projeyi öğretmen ya da yetişkin gözetiminde kurun.
Ödevinizi nasıl sunarsınız?
Ödevinizi, metronomla bir şarkının temposunu tutarak ya da arkadaşınızın çaldığı bir enstrümana eşlik ederek sunabilirsiniz.
- Problem: "Müzisyenler çalarken hızlanmadan ya da yavaşlamadan nasıl aynı tempoda kalır?"
- Gösteri: 60 BPM'i kronometreyle doğrulayın: 1 dakikada 60 tık sayılmalıdır.
- Hesap: Periyot = 60.000 / BPM formülünü tahtada birkaç tempo için hesaplayın.
- Rapor: Bağlantı şemasını, tempo tablosunu ve
millis()iledelay()karşılaştırmasını ekleyin. - Geliştirme: Tap tempo (butona vurarak tempo belirleme) ya da 6/8 ölçüsü eklemeyi önerin.
Sık sorulan sorular
Aktif buzzer ile metronom yapılır mı?
Yapılır, ama ölçü başı ile diğer vuruşlar aynı tonda öter. Aktif buzzer içindeki osilatör sabit bir frekans üretir; Arduino yalnızca açıp kapatabilir. Bu durumda tone() yerine pini kısa süre HIGH yapmanız gerekir. Ölçü başını ayırmak isterseniz ilk vuruşta buzzeri daha uzun, örneğin 80 ms çalıştırabilirsiniz.
Potansiyometreyi çevirince tempo ters yönde değişiyorsa ne yapmalıyım?
Potansiyometrenin iki yan ucunu yer değiştirin: 5V'a giden ucu GND'ye, GND'ye gideni 5V'a takın. Orta uç A0'da kalır. Kabloları değiştirmek istemezseniz koddaki map satırında 40 ve 208 değerlerinin yerini değiştirmeniz de aynı sonucu verir.
Metronom ne kadar doğrudur?
Arduino Uno'nun saati bir rezonatör ya da kristale dayanır ve günlük kullanımda tempo hatası kulakla fark edilmeyecek kadar küçüktür. Kod her vuruşta zamanı yeniden ölçtüğü için döngüdeki küçük gecikmeler birikmez. Profesyonel kayıt için yine de bilgisayardaki metronom yazılımları daha hassastır.
Sesi nasıl yükseltebilirim?
Pasif buzzerin sesi küçük bir odada yeterlidir. Daha yüksek ses için bir transistör (örneğin BC547) ve küçük bir hoparlör kullanılabilir; hoparlörü doğrudan Arduino pinine bağlamayın, pinin akım sınırını aşar. Sesi azaltmak için buzzerla seri 100 Ω direnç takabilirsiniz.
Özet
- Arduino metronom, pasif buzzer ve LED ile 40-208 BPM aralığında düzenli tık üretir.
- İki vuruş arası süre 60.000 / BPM milisaniyedir; 120 BPM'de 500 ms.
- Bağlantı: potansiyometre A0, buzzer D8, LED 220 Ω ile D7, buton D2, OLED A4 ve A5.
- Ölçü başı 2.000 Hz, diğer vuruşlar 1.000 Hz çalar; buton 2/4, 3/4 ve 4/4 seçer.
millis()kullanımı tempoyu düzenli tutar; devre 220V'a bağlanmaz.
