Yazılardaki ürünleri komponentci.net'te inceleyebilir, hemen sipariş verebilirsiniz.komponentci.net →
KomponentciBlog Mağaza
Blog  ›  Projeler

Arduino Metronom Yapımı: Buzzer, Potansiyometre ve LED

Arduino Metronom Yapımı: Buzzer, Potansiyometre ve LED
Kısa cevap

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

MalzemeAdetNe işe yarar?
Arduino Uno R3 (CH340, USB kablolu)1Zamanı tutar, sesi üretir
Pasif buzzer 17 mm1Tık sesi (farklı frekanslarda)
B103 10K potansiyometre1Tempo ayarı (40-208 BPM)
5 mm kırmızı LED paketi1Her vuruşta yanıp söner
220 Ω direnç (1/4 W)1LED akımını sınırlar
6x6 mm tact buton1Ölçü seçimi (2/4, 3/4, 4/4)
0,96 inç I2C OLED ekran (SSD1306)1BPM ve ölçüyü gösterir (isteğe bağlı)
Jumper kablo seti ve breadboard1Bağ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.

  1. 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.
  2. Pasif buzzer: artı (+) ucu D8'e, diğer ucu GND'ye.
  3. LED: uzun bacak (anot) 220 Ω direnç üzerinden D7'ye, kısa bacak (katot) GND'ye.
  4. Buton: bir ucu D2'ye, çaprazındaki ucu GND'ye. Kod iç pull-up direncini kullandığı için ek direnç gerekmez.
  5. OLED (isteğe bağlı): VCC → 5V, GND → GND, SDA → A4, SCL → A5.
  6. USB kablosunu takıp kodu yükleyin; potansiyometreyi çevirince tık hızının değiştiğini kontrol edin.
Arduino metronom bağlantı şeması: 10 kΩ potansiyometrenin yan uçları 5V ve GND'ye, orta ucu A0'a bağlı; pasif buzzerın artı ucu D8'e, LED 220 Ω dirençle D7'ye, ölçü butonu D2 ile GND arasına bağlı; isteğe bağlı OLED ekranın SDA ucu A4'e, SCL ucu A5'e gidiyor ve ekranda 120 BPM ile 4/4 yazıyor; yandaki kutuda ara süre eşittir 60.000 bölü BPM formülü ve 40, 60, 120, 208 BPM için 1.500, 1.000, 500, 288 ms değerleri; altta 4/4 ölçüde 500 ms aralıklı vuruşlar, her ölçünün ilk vuruşu kırmızı
Potansiyometre A0'a, buzzer D8'e, LED 220 Ω ile D7'ye, buton D2'ye, isteğe bağlı OLED A4 ve A5'e bağlanır; iki vuruş arası 60.000 / BPM milisaniyedir.

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.

TerimAnlamıYaklaşık BPMİki vuruş arası
LargoÇok ağır, geniş40-601.500-1.000 ms
AdagioAğır66-76909-789 ms
AndanteYürür hızda76-108789-556 ms
ModeratoOrta108-120556-500 ms
AllegroHızlı, canlı120-156500-385 ms
PrestoÇok hızlı168-200357-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() ile delay() 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.

Bu yazıdaki ürünler

Diğer yazılar

11 Kasım 20266 dk okuma

Pense Çeşitleri: Yan Keski, Kargaburun ve Kombine Pense

Pense çeşitleri arasında seçim işe göre yapılır: tel ve komponent bacağı kesmek için yan keski, dar alanda tutmak ve bükmek için kargaburun,...

Devamını oku →
11 Kasım 20267 dk okuma

Işık Takip Eden Robot Yapımı: Arduino, LDR ve L298N

Işık takip eden robot, önüne takılan iki LDR ile hangi tarafın daha aydınlık olduğunu ölçüp tekerleklerini o yöne süren bir Arduino projesid...

Devamını oku →
11 Kasım 20266 dk okuma

İzoleli Tornavida ve 1000V VDE El Aletleri Nedir?

İzoleli tornavida, IEC 60900 (EN 60900) standardına göre 1000V AC ve 1500V DC gerilime kadar yalıtım için test edilmiş ve üzerinde çift üçge...

Devamını oku →
11 Kasım 20267 dk okuma

ESP8266 Hava Durumu Ekranı: NodeMCU, OLED ve Open-Meteo

ESP8266 hava durumu ekranı, NodeMCU kartının Wi-Fi ile internete bağlanıp Open-Meteo servisinden anlık sıcaklık, nem, rüzgâr ve hava durumu...

Devamını oku →
11 Kasım 20266 dk okuma

Havya Ucu Çeşitleri ve Bakımı: Konik, Keski, Bıçak

Havya ucu, lehimlenecek noktanın boyutuna göre seçilir: ince SMD ve sık bacaklar için konik (I), genel THT lehim için keski (D) ya da eğik k...

Devamını oku →
11 Kasım 20266 dk okuma

Ultrasonik Theremin Projesi: HC-SR04 ile Elle Müzik

Ultrasonik theremin, HC-SR04 sensörüyle elinizin uzaklığını ölçüp bu mesafeyi ses frekansına çeviren bir Arduino projesidir. El sensöre yakl...

Devamını oku →