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

Ses Seviyesi Ölçer (VU Metre) Projesi: Mikrofon ve LED

Ses Seviyesi Ölçer (VU Metre) Projesi: Mikrofon ve LED
Kısa cevap

Ses seviyesi ölçer (VU metre), bir mikrofon modülünün sinyalini Arduino ile okuyup ses yükseldikçe daha fazla LED yakan bir göstergedir. MAX9814 mikrofon modülü ve 10 LED'li WS2812 çubukla tek veri pini kullanılarak kolayca yapılır. Gösterge sesi karşılaştırır; kalibre edilmiş bir desibel ölçer değildir.

Müzik setlerindeki zıplayan ışık çubuklarını hepiniz görmüşsünüzdür. Bu yazıda aynı göstergeyi bir mikrofon modülü, Arduino ve renkli LED'lerle kuruyoruz. Proje, sesin bir dalga olduğunu ve şiddetinin ölçülebildiğini gösterdiği için fen derslerine ve sınıf gürültüsü gibi araştırma konularına çok uygundur. Malzeme listesi, bağlantı, kod ve sunum önerileri aşağıda.

Ses seviyesi ölçer (VU metre) nedir?

Ses seviyesi ölçer (VU metre), ortamdaki sesin şiddetini yanan LED sayısıyla gösteren bir göstergedir. VU, İngilizcede "volume unit" yani ses birimi anlamına gelir. Ses yükseldikçe çubuk uzar; sessizlikte LED'ler söner.

Mikrofon, ses dalgasının oluşturduğu basınç değişimini küçük bir elektrik sinyaline çevirir. Modüldeki yükselteç bu sinyali büyütür. Arduino sinyali kısa aralıklarla okuyup en büyük ve en küçük değer arasındaki farkı, yani tepeden tepeye genliği hesaplar. Genlik ne kadar büyükse ses o kadar şiddetlidir.

Hangi malzemeler gerekir?

VU metre için Arduino, bir mikrofon modülü, 10 LED'li WS2812 çubuk ve bir 330 Ω direnç yeterlidir.

Malzeme listesi

MalzemeAdetNe işe yarar?
Arduino Uno (USB kablolu)1Sesi okur, LED'leri yakar
MAX9814 mikrofon yükselteç modülü1Sesi güçlendirilmiş analog sinyale çevirir
WS2812 NeoPixel çubuk, 10 LED1Ses seviyesini renkli çubukla gösterir
Direnç seti (1/4 W)1330 Ω (veri hattı) ve 220 Ω (LED'li sürüm) dirençleri
KY-038 ses sensör kartı1 (isteğe bağlı)MAX9814 yerine daha basit, daha az hassas seçenek
3 mm ve 5 mm LED seti1 (isteğe bağlı)Tek tek LED'li sürüm için

MAX9814, kazancı kendiliğinden ayarlayan (AGC) bir yükselteç içerir; bu sayede fısıltıyı da alkışı da gösterebilir. KY-038 kartının analog çıkışı daha zayıftır; konuşmaları göstermekte zorlanabilir, ama alkış ve yüksek müzikte çalışır.

WS2812 mi tek tek LED mi kullanılmalı?

Az kablo ve renk geçişi istiyorsanız WS2812 çubuk, devre elemanlarını tek tek tanımak istiyorsanız ayrı LED'ler seçilmelidir. İki sürüm de aynı mikrofon kodunu kullanır.

ÖzellikWS2812 çubuk (10 LED)10 adet ayrı LED
Arduino pini1 (D6)10 (D2-D11)
DirençVeri hattına 1 adet 330 ΩHer LED'e 1 adet 220 Ω
RenkKoddan seçilir (yeşil, sarı, kırmızı)LED rengiyle sabit
Kablo sayısı3 kablo20'den fazla kablo
AkımLED başına en çok yaklaşık 60 mA (beyaz, tam parlak)LED başına yaklaşık 14 mA

WS2812 LED'lerin bağlantısı ve kütüphanesi RGB LED ve WS2812B bağlantısı yazısında ayrıntılı anlatılıyor.

Devre nasıl bağlanır?

MAX9814'ün OUT ucu A0'a, WS2812 çubuğun DIN ucu 330 Ω direnç üzerinden D6'ya bağlanır; iki modül de Arduino'nun 5V ve GND pinlerinden beslenir. Bağlantıyı USB kablosu çıkarılmışken yapın.

  1. MAX9814 modülünü bağlayın: VDD → 5V, GND → GND, OUT → A0. Gain ve A/R uçlarını boş bırakın; Gain boşken kazanç en yüksek değerdedir (60 dB).
  2. WS2812 çubuğun 5V (ya da VCC) ucunu Arduino 5V'a, GND ucunu GND'ye bağlayın.
  3. Arduino D6 pininden çıkan kabloya 330 Ω direnç ekleyin ve direncin diğer ucunu çubuğun DIN (veri girişi) ucuna bağlayın. DOUT ucu boş kalır.
  4. Çubuğu dik ya da yatay olarak bir kartona sabitleyin; 1. LED (DIN tarafı) çubuğun alt ucu olsun.
  5. USB kablosunu takın ve kodu yükleyin.
Ses seviyesi ölçer bağlantı şeması: MAX9814 mikrofon modülünün VDD ucu Arduino Uno 5V'a, GND ucu GND'ye, OUT ucu A0'a bağlı, Gain ve A/R uçları boş; 10 LED'li WS2812 çubuğun DIN ucu 330 Ω direnç üzerinden D6'ya, 5V ve GND uçları Arduino'ya bağlı; ilk 6 LED yeşil, 7 ve 8 sarı, 9 ve 10 kırmızı; altta 20 ile 400 arasındaki genlik değerlerinin 0-10 LED'e çevrildiğini gösteren renkli ölçek
MAX9814 OUT ucu A0'a, WS2812 çubuğun DIN ucu 330 Ω ile D6'ya bağlanır; 20-400 genlik aralığı 0-10 LED'e çevrilir.

Arduino IDE'de Kütüphane Yöneticisi'nden "Adafruit NeoPixel" kütüphanesini kurun.

#include <Adafruit_NeoPixel.h>

const byte MIK_PIN = A0, LED_PIN = 6, LED_SAYI = 10;
const int SESSIZ = 20;     // sessiz odada okunan genlik
const int GURULTU = 400;   // en yuksek beklenen genlik
Adafruit_NeoPixel serit(LED_SAYI, LED_PIN, NEO_GRB + NEO_KHZ800);
byte tepe = 0;
unsigned long tepeZaman = 0;

void setup() {
  Serial.begin(9600);
  serit.begin();
  serit.setBrightness(40);   // USB akimini dusuk tutar
  serit.show();
}

void loop() {
  unsigned long bas = millis();
  int enAz = 1023, enCok = 0;
  while (millis() - bas < 50) {          // 50 ms boyunca ornek al
    int v = analogRead(MIK_PIN);
    if (v < enAz) enAz = v;
    if (v > enCok) enCok = v;
  }
  int genlik = enCok - enAz;            // tepeden tepeye genlik
  Serial.println(genlik);

  int seviye = map(constrain(genlik, SESSIZ, GURULTU), SESSIZ, GURULTU, 0, LED_SAYI);
  if (seviye >= tepe) { tepe = seviye; tepeZaman = millis(); }
  else if (millis() - tepeZaman > 600) { tepe--; tepeZaman = millis() - 500; }

  for (byte i = 0; i < LED_SAYI; i++) {
    uint32_t renk = 0;                   // sonuk
    if (i < seviye) {
      if (i < 6) renk = serit.Color(0, 150, 0);          // yesil
      else if (i < 8) renk = serit.Color(150, 110, 0);   // sari
      else renk = serit.Color(150, 0, 0);                // kirmizi
    }
    serit.setPixelColor(i, renk);
  }
  if (tepe > seviye) serit.setPixelColor(tepe - 1, serit.Color(120, 120, 120));
  serit.show();
}

Kod her 50 ms'de bir genliği ölçer ve 20-400 aralığını 0-10 LED'e çevirir. İlk 6 LED yeşil, sonraki 2 LED sarı, son 2 LED kırmızı yanar. Beyaz "tepe" noktası en yüksek seviyede 0,6 saniye kalır, sonra yavaşça düşer. MAX9814'ün çıkışı en çok yaklaşık 2 V tepeden tepeye olduğu için genlik 400 civarını pek geçmez.

Kalibrasyon nasıl yapılır?

  1. Seri Monitör'ü 9600 baud hızında açın ve odada sessizken birkaç saniye genlik değerlerini izleyin.
  2. Görülen en yüksek sessizlik değerinin biraz üstünü SESSIZ sabitine yazın.
  3. Yüksek sesle alkışlayın ya da müzik çalın; görülen en büyük değeri GURULTU sabitine yazın ve kodu yeniden yükleyin.

VU metre gerçek desibel ölçer mi?

Hayır, bu VU metre sesleri birbirleriyle karşılaştırır ama desibel (dB) cinsinden kesin ölçüm yapmaz. Desibel ölçerler bilinen bir ses kaynağıyla kalibre edilir; mikrofon modülleri ise kalibre edilmemiştir ve AGC kazancı sürekli değiştirir.

Yine de göstergeyi sunumda yaygın ses düzeyleriyle karşılaştırabilirsiniz. Desibel ölçeği logaritmiktir: 10 dB artış, ses şiddetinin 10 kat arttığı anlamına gelir.

OrtamYaklaşık düzeyGöstergede beklenen
Fısıltı≈ 30 dB0-1 LED
Normal konuşma≈ 60 dBYeşil bölge
Kalabalık teneffüs≈ 70-80 dBSarı bölge
Uzun süre maruz kalınca işitmeye zararlı85 dB ve üstüKırmızı bölge

Kesin değerleri, telefonunuza kuracağınız bir ses ölçer uygulamasıyla karşılaştırarak kendi tablonuzu oluşturabilirsiniz. Ses sensörlerinin dijital çıkışla kullanımı için alkışla yanan lamba yazısına bakabilirsiniz.

Hangi güvenlik kurallarına dikkat edilmeli?

Proje yalnızca USB'nin 5V gerilimiyle çalışır ve güvenlidir; yine de birkaç kurala uyun.

  • WS2812 çubuğu tam beyaz ve tam parlaklıkta çalıştırmayın; 10 LED birlikte 0,6 A'e kadar çekebilir ve USB portunu zorlar. Kod parlaklığı 40/255'e sınırlar.
  • LED'lere yakından bakmayın; parlak ışık gözü yorar.
  • Sesi test etmek için kulağa zarar verecek kadar yüksek müzik çalmayın.
  • Bağlantıyı değiştirmeden önce USB kablosunu çıkarın. 5V ile GND'yi birbirine değdirmeyin.
  • Projede 220V hiçbir cihaz kullanılmaz; hoparlörü de ayrı, kendi fişiyle çalıştırın.

Projeyi nasıl sunarsınız?

Projeyi, okulunuzun farklı yerlerindeki ses düzeylerini karşılaştıran küçük bir araştırma olarak sunabilirsiniz.

  • Soru: "Okulun en gürültülü yeri neresi, en gürültülü zaman hangisi?"
  • Ölçüm: Sınıf, koridor, kantin ve kütüphanede bir dakika boyunca en çok yanan LED sayısını not edin.
  • Veri: Seri Çizici (Serial Plotter) ile genlik grafiğinin ekran görüntüsünü alın.
  • Sonuç: Ölçümleri sütun grafikte gösterin ve işitme sağlığı için önerilerinizi yazın.
  • Rapor: Amaç, sesin fiziği, malzemeler, devre şeması, kod, ölçüm tablosu ve sonuç bölümlerini ekleyin.

Sergide çubuğu bir müzik kutusunun ön yüzüne yerleştirip ziyaretçilerden alkışlamalarını istemek dikkat çekici olur.

Sık sorulan sorular

LED'ler hiç yanmıyorsa ne yapmalıyım?

Önce Seri Monitör'de genlik değerlerinin sesle değişip değişmediğine bakın. Değerler değişiyorsa sorun LED tarafındadır: DIN ucunun D6'ya, okun gösterdiği giriş tarafına takıldığını kontrol edin. Değerler hep sabitse mikrofonun OUT ucunun A0'a ve VDD ucunun 5V'a bağlı olduğundan emin olun.

Sessizken de LED'ler yanıyorsa sebebi nedir?

Ortam gürültüsü ya da elektriksel parazit, SESSIZ eşiğinin üstünde kalıyordur. Seri Monitör'de sessizlikteki değerleri okuyup SESSIZ sabitini biraz yükseltin. MAX9814 çok hassastır; bilgisayar fanı ve klima sesini bile algılayabilir. Gerekirse Gain ucunu GND'ye bağlayarak kazancı 50 dB'e düşürün.

KY-038 ile de yapılabilir mi?

Evet, KY-038 kartının A0 çıkışı Arduino'nun A0 pinine bağlanarak aynı kod kullanılabilir. Ancak kartta güçlü bir yükselteç olmadığından genlik değerleri küçük kalır. GURULTU sabitini Seri Monitör'de gördüğünüz en büyük değere göre, örneğin 60-100 arasına düşürmeniz gerekir. Kartın dijital çıkışı ise yalnızca "ses var" ya da "yok" bilgisi verir.

Daha fazla LED eklenebilir mi?

Evet, WS2812 çubuklar zincirlenebilir. Birinci çubuğun DOUT ucunu ikinci çubuğun DIN ucuna bağlayıp koddaki LED_SAYI değerini artırmanız yeterlidir. 20 LED'i aşan düzenlerde akım arttığı için LED'leri harici bir 5V kaynakla besleyin ve kaynağın GND'sini Arduino GND'siyle birleştirin.

Müziğin ritmine göre renk değiştirmek mümkün mü?

Evet, basit bir yöntemle mümkündür. Genlik ani olarak yükseldiğinde, örneğin bir önceki ölçümün iki katını geçtiğinde, bir "vuruş" sayıp bütün çubuğun rengini değiştirebilirsiniz. Bas ve tiz sesleri ayırmak ise frekans analizi (FFT) gerektirir; bu, lise düzeyinde ileri bir proje konusudur.

Özet

  • VU metre, mikrofon sinyalinin tepeden tepeye genliğini ölçüp yanan LED sayısına çevirir.
  • MAX9814 OUT ucu A0'a, WS2812 çubuğun DIN ucu 330 Ω direnç üzerinden D6'ya bağlanır.
  • Kod 50 ms'lik ölçümlerde 20-400 genlik aralığını 0-10 LED'e çevirir: 6 yeşil, 2 sarı, 2 kırmızı.
  • Gösterge sesleri karşılaştırır; kalibre edilmiş bir desibel ölçer değildir.
  • Parlaklığı sınırlayın, yüksek sesten kaçının ve yalnızca USB'nin 5V gerilimiyle çalışın.

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 →