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) #4 dersimize kadar olan malzemeler için Kombo Kit, Raspberry Pi 3 Röle Kartı İle Alarm Devresi Yapımı #11 dersimize kadar olan malzemeler için Süper Başlangıç Seti, tüm derslerdeki malzemeler için Proje Seti tercih edebilirsiniz.

Merhaba arkadaşlar. Bu dersimizde Raspberry Pi’mizi kullanarak sese duyarlı alarm devresi yapacağız.

Gerekli malzemeler:

Bildiğimiz üzere Raspberry Pi’miz, 3.5mm jak çıkışı ve HDMI üzerinden ses çıkışı sunabilmektedir. Buna karşılık Pi üzerinde herhangi bir ses girişi mevcut değildir. Ses kaydı amaçlı mikrofon bağlamak için özel shield kartları veya USB ses kartları kullanmamız gerekir. Bu derste ise çok daha basit yapıya sahip bir mikrofon sensörü ile ses şiddeti algılayıp, bu şiddetin seviyesine göre sesli bir alam tetiklemeyi öğreneceğiz.

Ses Sensörü Nedir?

Kullanacağımız ses sensörü, bir mikrofon ve basit bir amfi devresinden oluşmaktadır. Mikrofonun çıkışındaki çok düşük seviyedeki (milivoltlar mertebesinde) sinyali, amfi devresi güçlendirerek analog veya dijital olarak çıkış almamızı sağlar. Analog sinyal, bize sesin şiddetini ölçmemizi sağlarken kart üzerinde bulunan vidalı trimpot ile dijital çıkışın hangi seviyede aktif olacağını çok hassas bir şekilde ayarlayabilmemiz mümkündür.

Kartın üzerinde yer alan LED’lerden trimpotun yakınında yer alanı, dijital çıkışın hangi seviyede tetikleneceğini gösterir.

Ses sensör modülü

Raspberry Pi – ses sensörü devre şeması:

Not: Kullandığım çizim programında (Fritzing) ses sensörünün birebir aynısını bulamadığım için temsili olarak bir mikrofon kartı kullandım. Sizler bağlantı yaparken sensörün + pinin 3.3V’a, G pinini GND’ye, DO pinini de GPIO18’e bağlayın.

Ses sensörü Python kodu (alternatif link):

import time 
import RPi.GPIO as GPIO 
GPIO.setmode(GPIO.BCM)

buzzer_pin = 17
sensor_pin = 18 

GPIO.setup(sensor_pin, GPIO.IN)
GPIO.setup(buzzer_pin, GPIO.IN)
GPIO.setup(buzzer_pin, GPIO.OUT) 

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
}

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():
 buzz(notes['A3'], 0.5)
 buzz(notes['A3'], 0.5)
 buzz(notes['A3'], 0.5)
 buzz(notes['F3'], 0.35)
 buzz(notes['C4'], 0.15)
 buzz(notes['A3'], 0.5)
 buzz(notes['F3'], 0.35)
 buzz(notes['C4'], 0.15)
 buzz(notes['A3'], 1.0)

while True:
 if GPIO.input(sensor_pin):
 print("Ses Alarmi!")
 play()
 time.sleep(0.5)

 

Alarmın melodisi eminim çoğunuza tanıdık gelecektir 😀

14 Yorumlar

  1. Trimpotu sağa çevirince direnç ne oluyor , sola çevirince ne oluyor?
    Yani direnç ne tarafa doğru artıyor veya azalıyor.
    Bide Sadece hata trimpottan mı kaynaklanıyor.
    Bide bi hata veriyor mail olarak attım.
    Teşekkürler

    • Kodları denediğimizde bu şekilde bir sorun ile karşılaşmadık. Kart üzerindeki trimpot’un yakınında bulunan LED ses şiddetine göre tepki veriyor mu?

  2. ses sensoru uzerindeki ayarlı dirençle oynadım. Direnci çok yuksek yapınca buzzer çalmıyor. Direnci belli bi değerin altına dusurdugumde ıse kendi kendine buzzer çalmaya baslıyor.(bunları yaparken ortamda ses yoktu) sorun n olabilir?

CEVAP VER