back to top

Raspberry Pi 3 Buzzer Kullanımı – Ses Çıkışı Nasıl Alınır? #6

Raspberry Pi Dersleri serimizde kullanacağımız malzemelerin tamamına sizler için hazırladığımız setler ile kolayca sahip olabilirsiniz. Raspberry Pi’ye Uzaktan Bağlantı Yöntemleri (VNC,SSH,TTL) dersimize kadar olan malzemeler için Kombo Kit, Raspberry Pi 3 Röle Kartı İle Alarm Devresi Yapımı dersimize kadar olan malzemeler için Süper Başlangıç Seti, tüm derslerdeki malzemeler için Proje Seti tercih edebilirsiniz.

Merhabalar. Bu dersimizde Raspberry Pi’mizin GPIO pinlerine bağlayacağımız buzzer ile ses çıkışı almayı öğreneceğiz:

Gerekli malzemelerimiz:

Raspberry Pi’mizin üzerinde 3.5mm TRRS tipi ses bağlantısı mevcut olsa da, biz bu dersimizde çok daha basit kullanıma sahip olan buzzer’ımızı GPIO pinlerinden bağlayacağız.

Buzzer’ı minik bir hoparlör olarak düşünebiliriz. Büyük hoparlör ve kulaklıklar kadar yüksek ve detaylı ses üretmeseler de, “bip” leme seslerini çıkartmada kullanılabilirler. Hatta çoğu kişisel bilgisayarın (PC) açılış sırasında çıkarttığı “bip”, bir buzzer’dan gelmektedir.

Buzzer
Buzzer

Buzzer’lar genellikle aktif ve pasif olmak üzere iki çeşittir. Aktif bir buzzer, dahili olarak kendi sesini üretecek bir osilatör devresine sahiptir. Sadece güç uygulanarak ses vermeleri sağlanabilir. Pasif buzzer’lar ise bu tip bir devreye sahip olmadıklarından ses sinyalini bir mikroişlemci ile bizim üreterek oluşturmamız gereklidir. Bu derste kullandığımız buzzer, pasif tipdedir.

Devremizi aşağıdaki şemaya göre kuruyoruz:

rpi-buzzer
Raspberry Pi – Buzzer devre şeması

Devremizi kurduktan sonra Raspberry Pi’mizi çalıştırıyoruz. Aşağıda yer alan kodu bir metin editörü aracılığıyla (örneğin Geany) buzzer_melody.py ismiyle /home/pi klasörüne kaydediyoruz.

Raspberry Pi Buzzer Kodu:

import RPi.GPIO as GPIO
import time

buzzer_pin = 4
button1 = 17
button2 = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(buzzer_pin, GPIO.IN)
GPIO.setup(buzzer_pin, GPIO.OUT)
GPIO.setup(button1, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(button2, GPIO.IN, pull_up_down=GPIO.PUD_UP)

notes = {
 'B0' : 31,
 'C1' : 33, 'CS1' : 35,
 'D1' : 37, 'DS1' : 39,
 'EB1' : 39,
 'E1' : 41,
 'F1' : 44, 'FS1' : 46,
 'G1' : 49, 'GS1' : 52,
 'A1' : 55, 'AS1' : 58,
 'BB1' : 58,
 'B1' : 62,
 'C2' : 65, 'CS2' : 69,
 'D2' : 73, 'DS2' : 78,
 'EB2' : 78,
 'E2' : 82,
 'F2' : 87, 'FS2' : 93,
 'G2' : 98, 'GS2' : 104,
 'A2' : 110, 'AS2' : 117,
 'BB2' : 123,
 'B2' : 123,
 'C3' : 131, 'CS3' : 139,
 'D3' : 147, 'DS3' : 156,
 'EB3' : 156,
 'E3' : 165,
 'F3' : 175, 'FS3' : 185,
 'G3' : 196, 'GS3' : 208,
 'A3' : 220, 'AS3' : 233,
 'BB3' : 233,
 'B3' : 247,
 'C4' : 262, 'CS4' : 277,
 'D4' : 294, 'DS4' : 311,
 'EB4' : 311,
 'E4' : 330,
 'F4' : 349, 'FS4' : 370,
 'G4' : 392, 'GS4' : 415,
 'A4' : 440, 'AS4' : 466,
 'BB4' : 466,
 'B4' : 494,
 'C5' : 523, 'CS5' : 554,
 'D5' : 587, 'DS5' : 622,
 'EB5' : 622,
 'E5' : 659,
 'F5' : 698, 'FS5' : 740,
 'G5' : 784, 'GS5' : 831,
 'A5' : 880, 'AS5' : 932,
 'BB5' : 932,
 'B5' : 988,
 'C6' : 1047, 'CS6' : 1109,
 'D6' : 1175, 'DS6' : 1245,
 'EB6' : 1245,
 'E6' : 1319,
 'F6' : 1397, 'FS6' : 1480,
 'G6' : 1568, 'GS6' : 1661,
 'A6' : 1760, 'AS6' : 1865,
 'BB6' : 1865,
 'B6' : 1976,
 'C7' : 2093, 'CS7' : 2217,
 'D7' : 2349, 'DS7' : 2489,
 'EB7' : 2489,
 'E7' : 2637,
 'F7' : 2794, 'FS7' : 2960,
 'G7' : 3136, 'GS7' : 3322,
 'A7' : 3520, 'AS7' : 3729,
 'BB7' : 3729,
 'B7' : 3951,
 'C8' : 4186, 'CS8' : 4435,
 'D8' : 4699, 'DS8' : 4978
}

melody = [
 notes['E7'], notes['E7'], 0, notes['E7'],
 0, notes['C7'], notes['E7'], 0,
 notes['G7'], 0, 0, 0,
 notes['G6'], 0, 0, 0,
 
 notes['C7'], 0, 0, notes['G6'],
 0, 0, notes['E6'], 0,
 0, notes['A6'], 0, notes['B6'],
 0, notes['AS6'], notes['A6'], 0,
 
 notes['G6'], notes['E7'], notes['G7'],
 notes['A7'], 0, notes['F7'], notes['G7'],
 0, notes['E7'], 0, notes['C7'],
 notes['D7'], notes['B6'], 0, 0,
 
 notes['C7'], 0, 0, notes['G6'],
 0, 0, notes['E6'], 0,
 0, notes['A6'], 0, notes['B6'],
 0, notes['AS6'], notes['A6'], 0,
 
 notes['G6'], notes['E7'], notes['G7'],
 notes['A7'], 0, notes['F7'], notes['G7'],
 0, notes['E7'], 0, notes['C7'],
 notes['D7'], notes['B6'], 0, 0
]

tempo = [
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 
 9, 9, 9,
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
 
 9, 9, 9,
 12, 12, 12, 12,
 12, 12, 12, 12,
 12, 12, 12, 12,
]

crazy_frog_melody = [
 notes['A4'], notes['C5'], notes['A4'], notes['A4'], notes['D5'], notes['A4'], notes['G4'], 
 notes['A4'], notes['E5'], notes['A4'], notes['A4'], notes['F5'], notes['E5'], notes['C5'],
 notes['A4'], notes['E5'], notes['A5'], notes['A4'], notes['G4'], notes['G4'], notes['E4'], notes['B4'], 
 notes['A4'],0,
 
 notes['A4'], notes['C5'], notes['A4'], notes['A4'], notes['D5'], notes['A4'], notes['G4'], 
 notes['A4'], notes['E5'], notes['A4'], notes['A4'], notes['F5'], notes['E5'], notes['C5'],
 notes['A4'], notes['E5'], notes['A5'], notes['A4'], notes['G4'], notes['G4'], notes['E4'], notes['B4'], 
 notes['A4'],0,
 
 
 notes['A3'], notes['G3'], notes['E3'], notes['D3'],
 
 notes['A4'], notes['C5'], notes['A4'], notes['A4'], notes['D5'], notes['A4'], notes['G4'], 
 notes['A4'], notes['E5'], notes['A4'], notes['A4'], notes['F5'], notes['E5'], notes['C5'],
 notes['A4'], notes['E5'], notes['A5'], notes['A4'], notes['G4'], notes['G4'], notes['E4'], notes['B4'], 
 notes['A4'],
]

crazy_frog_tempo = [
 2,4,4,8,4,4,4,
 2,4,4,8,4,4,4,
 4,4,4,8,4,8,4,4,
 1,4,
 
 2,4,4,8,4,4,4,
 2,4,4,8,4,4,4,
 4,4,4,8,4,8,4,4,
 1,4,
 
 8,4,4,4,
 
 2,4,4,8,4,4,4,
 2,4,4,8,4,4,4,
 4,4,4,8,4,8,4,4,
 1,
]

final_countdown_melody = [
 notes['A3'],notes['E5'],notes['D5'],notes['E5'],notes['A4'],
 notes['F3'],notes['F5'],notes['E5'],notes['F5'],notes['E5'],notes['D5'],
 notes['D3'],notes['F5'],notes['E5'],notes['F5'],notes['A4'],
 notes['G3'],0,notes['D5'],notes['C5'],notes['D5'],notes['C5'],notes['B4'],notes['D5'],
 notes['C5'],notes['A3'],notes['E5'],notes['D5'],notes['E5'],notes['A4'],
 notes['F3'],notes['F5'],notes['E5'],notes['F5'],notes['E5'],notes['D5'],
 notes['D3'],notes['F5'],notes['E5'],notes['F5'],notes['A4'],
 notes['G3'],0,notes['D5'],notes['C5'],notes['D5'],notes['C5'],notes['B4'],notes['D5'],
 notes['C5'],notes['B4'],notes['C5'],notes['D5'],notes['C5'],notes['D5'],
 notes['E5'],notes['D5'],notes['C5'],notes['B4'],notes['A4'],notes['F5'],
 notes['E5'],notes['E5'],notes['F5'],notes['E5'],notes['D5'],
 notes['E5'],
]

final_countdown_tempo = [
 1,16,16,4,4,
 1,16,16,8,8,4,
 1,16,16,4,4,
 2,4,16,16,8,8,8,8,
 4,4,16,16,4,4,
 1,16,16,8,8,4,
 1,16,16,4,4,
 2,4,16,16,8,8,8,8,
 4,16,16,4,16,16,
 8,8,8,8,4,4,
 2,8,4,16,16,
 1,
]

def buzz(frequency, length):

 if(frequency==0):
 time.sleep(length)
 return
 period = 1.0 / frequency
 delayValue = period / 2
 numCycles = int(length * frequency)
 
 for i in range(numCycles):
 GPIO.output(buzzer_pin, True)
 time.sleep(delayValue)
 GPIO.output(buzzer_pin, False)
 time.sleep(delayValue)

def play(melody,tempo,pause,pace=0.800):
 
 for i in range(0, len(melody)):
 
 noteDuration = pace/tempo[i]
 buzz(melody[i],noteDuration)
 
 pauseBetweenNotes = noteDuration * pause
 time.sleep(pauseBetweenNotes)

while True:
 if GPIO.input(button1) == 0:
 print "Crazy Frog (Axel F) Theme"
 play(crazy_frog_melody, crazy_frog_tempo, 0.30, 0.900)
 time.sleep(2)
 if GPIO.input(button2) == 0:
 print "The Final Countdown"
 play(final_countdown_melody, final_countdown_tempo, 0.30, 1.2000)
 time.sleep(2)

Kodun detaylı açıklaması için aşağıdaki videoyu izleyebilirsiniz:

Raspberry Pi Buzzer Python kodumuzu aşağıdaki komut ile çalıştırıyoruz:

python buzzer_melody.py

Devremize eklediğimiz butonlar, farklı melodileri çalmada görev alıyor. Kodda button1 olarak belirtilen butona basıldığında Crazy Frog melodisi, button2‘ye basıldığında ise The Final Countdown melodisi çalacak.

Raspberry Pi Hakkında Daha Fazlasını Öğrenmeye Devam Et

Raspberry Pi pek çok yönüyle avantaj sahibi ve geliştiriciler tarafından çok sevilen bir platform. Elektronik projelerinde, bilgisayar bilimlerinde ve robotik çalışmalarında sağladığı destek ve rahatlık ile öğrenmeyi sevdiren Raspberry Pi hergün daha da çok gelişiyor. 

Peki siz de daha fazla gelişmek istemez misiniz? Linux bilginizi geliştirmek, elektronik dünyasına atılmak ve eğlenceli projelere imza atmak için sizi Raspberry Pi ile yolculuğa çıkarıyoruz! Sizler için hazırladığımız Raspberry Pi eğitim serisine devam edin :

RPi GPIO Pinlerinin Kullanımı

Raspberry Pi her ne kadar tek-kart-bilgisayar ürünü olsa da, üzerinde GPIO pinleri ile tıpkı Arduino projelerindeki gibi elektronik komponentleri kontrol etmek için kullanılabilmektedir.

Serimizin 5. Dersinde sizlere GPIO pinlerinin özelliklerini, GPIO Pinlerinin Kullanımını örnek bir proje ile anlatmaya çalıştık.

LDR İle Işık Şiddeti Ölçme

LDR, çoğunlukla fotosel diye bildiğimiz ışık şiddetini ölçmeye yarayan iki uçlu bir devre elemanıdır. Üzerine düşen ışık miktarına göre iki ucun arasındaki direnç değeri değişir. Bu özelliği sayesinde ışık miktarını ölçebiliriz.Raspberry Pi 7. Dersimiz “LDR İle Işık Şiddeti Ölçme” üzerine. Bu yazımızda sizlerle LDR nedir?, Raspberry ile nasıl kullanılır? detaylıca anlattık.

Son Çıkan Yazılar

10 YORUMLAR

  1. Bende de 209. satirda asagidaki hatayi veriyor. Yardimci olabilir misiniz?
    File “/home/pi/buzzer_melody.py”, line 209
    time.sleep(length)
    ^
    SyntaxError: expected an indented block

  2. Gpio pinleri 3v da çalışıyor.Raspberynin güç kaynağındaki 5v gerilimi nasıl 3v a düşürebiliriz?Buzzerı bu şekilde direk bağladığımızda raspberrye zarar verir miyiz?

  3. Kod bir kaç farklı yerinde
    SyntaxError: expected an indented block
    error veriyor; Raspberry pi 4 kullanıyorum, yardımcı olabilirseniz sevinirim

CEVAP VER

Lütfen yorumunuzu giriniz!
Lütfen isminizi buraya giriniz