Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Bu rehber, ESP32 geliştirme kartı kullanarak bir buton ile piezo buzzer’dan melodik ses çıkarma işlemini adım adım açıklar. Butona basıldığında önceden tanımlanmış bir melodinin çalınması prensibine dayanan bu proje, dijital giriş, ses üretimi ve dizi kullanımı konularını öğrenmek için ideal bir uygulamadır.
Piezo buzzer, elektrik sinyallerini ses dalgalarına dönüştüren pasif bir bileşendir. Aktif buzzerlardan farklı olarak, pasif buzzerlar frekans kontrolü gerektirir; bu sayede farklı notalar ve melodiler üretilebilir.

Buton, mekanik bir anahtar görevi görür. ESP32’nin dahili INPUT_PULLUP özelliği kullanıldığında, buton serbestken pin HIGH (3.3V), basıldığında LOW (0V) değerini döndürür. Bu yapı harici direnç ihtiyacını ortadan kaldırır.
pitches.h kütüphanesi, müzik notalarının frekans değerlerini önceden tanımlanmış sabitler olarak içerir (Örn: NOTE_C4, NOTE_E5). Bu kütüphaneyi kullanarak melodik sesler üretmek kolaylaşır.
pitches.h, Arduino ve ESP32 projelerinde piezo buzzer veya hoparlörden belirli notaları (frekansları) çıkartmak için kullanılan, standart bir “sabitler” (constants) dosyasıdır.
Aslında teknik olarak bir “kütüphane” (kod içeren.cppdosyası) değil, sadece nota isimlerini karşılık gelen frekans değerleriyle eşleştiren bir header (başlık) dosyasıdır.
Neden Kullanılır?
Buzzer’dan “Do” notası almak için işlemciye “262 Hertz sinyal üret” demek yerine,NOTE_C4yazmanıza olanak tanır. Kodun okunabilirliğini artırır ve müzik notalarını dijital dünyaya tercüme eder.
/************************************************* * Public Constants *************************************************/ #define NOTE_B0 31 #define NOTE_C1 33 #define NOTE_CS1 35 #define NOTE_D1 37 #define NOTE_DS1 39 #define NOTE_E1 41 #define NOTE_F1 44 #define NOTE_FS1 46 #define NOTE_G1 49 #define NOTE_GS1 52 #define NOTE_A1 55 #define NOTE_AS1 58 #define NOTE_B1 62 #define NOTE_C2 65 #define NOTE_CS2 69 #define NOTE_D2 73 #define NOTE_DS2 78 #define NOTE_E2 82 #define NOTE_F2 87 #define NOTE_FS2 93 #define NOTE_G2 98 #define NOTE_GS2 104 #define NOTE_A2 110 #define NOTE_AS2 117 #define NOTE_B2 123 #define NOTE_C3 131 #define NOTE_CS3 139 #define NOTE_D3 147 #define NOTE_DS3 156 #define NOTE_E3 165 #define NOTE_F3 175 #define NOTE_FS3 185 #define NOTE_G3 196 #define NOTE_GS3 208 #define NOTE_A3 220 #define NOTE_AS3 233 #define NOTE_B3 247 #define NOTE_C4 262 #define NOTE_CS4 277 #define NOTE_D4 294 #define NOTE_DS4 311 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_FS4 370 #define NOTE_G4 392 #define NOTE_GS4 415 #define NOTE_A4 440 #define NOTE_AS4 466 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_CS5 554 #define NOTE_D5 587 #define NOTE_DS5 622 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_FS5 740 #define NOTE_G5 784 #define NOTE_GS5 831 #define NOTE_A5 880 #define NOTE_AS5 932 #define NOTE_B5 988 #define NOTE_C6 1047 #define NOTE_CS6 1109 #define NOTE_D6 1175 #define NOTE_DS6 1245 #define NOTE_E6 1319 #define NOTE_F6 1397 #define NOTE_FS6 1480 #define NOTE_G6 1568 #define NOTE_GS6 1661 #define NOTE_A6 1760 #define NOTE_AS6 1865 #define NOTE_B6 1976 #define NOTE_C7 2093 #define NOTE_CS7 2217 #define NOTE_D7 2349 #define NOTE_DS7 2489 #define NOTE_E7 2637 #define NOTE_F7 2794 #define NOTE_FS7 2960 #define NOTE_G7 3136 #define NOTE_GS7 3322 #define NOTE_A7 3520 #define NOTE_AS7 3729 #define NOTE_B7 3951 #define NOTE_C8 4186 #define NOTE_CS8 4435 #define NOTE_D8 4699 #define NOTE_DS8 4978
pitches.h files oluşturmak için aşağıdaki işlemi yapabilirsiniz.


Projede kullanılan pin atamaları:
Bu pinler ihtiyaç doğrultusunda değiştirilebilir. Ancak GPIO 6-11 (SPI flash), GPIO 34-39 (sadece giriş) gibi özel işlevli pinlerden kaçınılmalıdır.

Not: Pasif piezo buzzer kullanıldığından polarite dikkate alınmalıdır. Aktif buzzer kullanılıyorsa sadece digitalWrite() ile ses üretilebilir, melodi çalınamaz.
Arduino IDE’yi açın ve aşağıdaki ayarları kontrol edin:
Aşağıdaki kodu Arduino IDE editörüne yapıştırın ve ESP32 kartınıza yükleyin:
/*
* ESP32 Buton Kontrollü Piezo Buzzer Projesi
* Buton GPIO16, Buzzer GPIO21 pinine bağlıdır
* pitches.h kütüphanesi gereklidir
*/
#include "pitches.h"
#define BUTTON_PIN 16 // Butonun bağlı olduğu GPIO pini
#define BUZZER_PIN 21 // Buzzer'ın bağlı olduğu GPIO pini
// Melodideki notalar:
int melody[] = {
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_G5, NOTE_C5, NOTE_D5,
NOTE_E5,
NOTE_F5, NOTE_F5, NOTE_F5, NOTE_F5,
NOTE_F5, NOTE_E5, NOTE_E5, NOTE_E5, NOTE_E5,
NOTE_E5, NOTE_D5, NOTE_D5, NOTE_E5,
NOTE_D5, NOTE_G5
};
// Nota süreleri: 4 = çeyrek nota, 8 = sekizlik nota, tempo:
int noteDurations[] = {
8, 8, 4,
8, 8, 4,
8, 8, 8, 8,
2,
8, 8, 8, 8,
8, 8, 8, 16, 16,
8, 8, 8, 8,
4, 4
};
void setup() {
Serial.begin(9600); // Serial iletişimi başlat
pinMode(BUTTON_PIN, INPUT_PULLUP); // Buton pinini pull-up giriş olarak ayarla
}
void loop() {
int buttonState = digitalRead(BUTTON_PIN); // Buton durumunu oku
if (buttonState == LOW) { // Butona basıldıysa
Serial.println("Butona basılıyor");
buzzer(); // Melodi fonksiyonunu çalıştır
}
}
void buzzer() {
// Melodi dizisindeki notaları sırayla çal
int size = sizeof(noteDurations) / sizeof(int);
for (int thisNote = 0; thisNote < size; thisNote++) {
// Nota süresini hesapla: 1 saniye / nota tipi
// Örn: çeyrek nota = 1000/4, sekizlik nota = 1000/8
int noteDuration = 1000 / noteDurations[thisNote];
// Buzzer'da ilgili frekansta sesi belirtilen süreyle çal
tone(BUZZER_PIN, melody[thisNote], noteDuration);
// Notalar arasında ayırt edilebilirlik için kısa bir boşluk bırak
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// Sesi durdur
noTone(BUZZER_PIN);
}
}
Serial.begin(9600): Serial iletişim hızını 9600 baud olarak ayarlar, hata ayıklama için kullanılır.pinMode(BUTTON_PIN, INPUT_PULLUP): Buton pinini dahili pull-up direnç ile giriş olarak yapılandırır. Buton serbestken HIGH, basıldığında LOW okunur.digitalRead(BUTTON_PIN): Butonun anlık durumunu okur.if (buttonState == LOW): Butona basıldığında buzzer() fonksiyonunu çağırarak melodiyi çalar.sizeof(noteDurations) / sizeof(int): Dizi eleman sayısını hesaplar.for döngüsü ile her nota sırayla işlenir.1000 / noteDurations[thisNote]: Nota tipine göre milisaniye cinsinden süre hesaplanır.tone(BUZZER_PIN, melody[thisNote], noteDuration): Belirtilen frekansta ve sürede ses üretir.pauseBetweenNotes: Notalar arasında %30 ek boşluk bırakılarak seslerin net ayrılması sağlanır.noTone(BUZZER_PIN): İlgili pindeki ses sinyalini durdurur.Kod yüklendikten sonra:
pitches.h dosyasının projede bulunduğunu doğrulayın.Temel işlevi tamamladıktan sonra projeyi aşağıdaki şekilde genişletebilirsiniz:
melody[] ve noteDurations[] dizilerini değiştirerek farklı şarkılar ekleyin.S: Buzzer’dan ses gelmiyor, neden?
C: Pasif piezo buzzer kullandığınızdan emin olun. Aktif buzzerlar sadece tek frekansta ses üretir, melodi çalamaz. Ayrıca GPIO 21 bağlantısını ve GND bağlantısını kontrol edin.
S: pitches.h dosyası bulunamadı hatası alıyorum.
C: pitches.h dosyasını Arduino IDE’nin kütüphane dizinine veya proje klasörüne kopyalayın. Dosyayı resmi Arduino örneklerinden veya güvenilir kaynaklardan temin edebilirsiniz.
S: Melodi çok hızlı veya yavaş çalıyor.
C: noteDurations[] dizisindeki değerleri veya pauseBetweenNotes çarpanını (1.30) değiştirerek tempoyu ayarlayabilirsiniz.
S: Butona bir kez basıyorum ama melodi tekrar tekrar çalıyor.
C: loop() fonksiyonu sürekli çalıştığı için buton LOW durumda kaldığı sürece melodi tekrar çalınabilir. Buton bırakılana kadar bekleyen veya tek tetikleme yapan bir yapı kurabilirsiniz.
S: Farklı GPIO pinleri kullanabilir miyim?
C: Evet, ancak tone() fonksiyonu yalnızca PWM destekleyen pinlerde çalışır. ESP32’de çoğu GPIO pin PWM için uygundur; ancak GPIO 34-39 gibi sadece giriş pinlerini kullanmayın.
S: Serial Monitor’de yazılar karışık görünüyor.
C: Serial Monitor baud hızının kodda belirtilen değerle (9600) eşleştiğinden emin olun. Ayrıca ESP32’nin doğru COM portunda olduğundan ve USB kablosunun veri aktarımını desteklediğinden emin olun.