ESP32-S3 ile Analog Görünümlü Stereo VU Metre Projesi

  • Konbuyu başlatan Konbuyu başlatan TA3UIS
  • Başlangıç tarihi Başlangıç tarihi

TA3UIS

Katılımcı Üye
Katılım
14 Kas 2023
Mesajlar
129
Puanları
56
Merhaba arkadaşlar,

Bir süredir üzerinde çalıştığım bir projeyi paylaşmak istedim: ESP32-S3 tabanlı, gerçek analog VU metrelere benzeyen, dokunmatik LCD ekranlı, gerçek dB ölçen bir stereo ses seviye göstergesi.

İlham Kaynağı

Bu fikri şu projeden görüp beğendim: [ESP32 Analog VU Meter — Hackaday.io](mircemk). Orijinal proje, üzerinde kendi ESP32'si gömülü olan hazır CrowPanel 3.5" HMI ESP32 modüllerini kullanıyor, yani ekran ve mikrodenetleyici tek bir kart üzerinde geliyor. Bende böyle bir modül yoktu, elimdeki donanıma (ayrı bir ESP32-S3 + standart SPI TFT ekranlar) göre sıfırdan uyarladım. Ekran sürücüsünden dB kalibrasyonuna kadar çoğu şeyi kendi donanımıma göre baştan kurmam gerekti. Konsept ve LVGL/SquareLine yaklaşımı oradan esinlenme, ama uygulamanın kendisi farklı bir donanım için baştan yazıldı.

Kullanılan Malzemeler

- ESP32-S3-N16R8 geliştirme kartı (16MB Flash, 8MB PSRAM)
- 2x 3.5" TFT LCD ekran (480x320, ST7796 sürücü, XPT2046 dokunmatik), Raspberry Pi uyumlu 40-pin header'lı modeller
- Ses girişi için kanal başına 2x 10kΩ direnç (gerilim bölücü)
- Jumper kablolar, breadboard

Yazılım

Arayüz (ibre grafiği, dB skalası, üç renkli seviye LED'i) ilham aldığım projeden geliyor, LVGL ve SquareLine Studio ile hazırlanmış hazır bir tasarım. Ben bunu kendi donanımıma entegre ettim, firmware'i Arduino/PlatformIO ile ESP32-S3 üzerinde baştan yazıldı.

Süreçte Karşılaştıklarım

Ekranı ayakta tutmak bile ilk başta sorun oldu. Ekranın gerçek sürücü çipini yanlış belişrtilmiş, ILI9486 yazıyordu ama meğerse ST7796 imiş. Doğru sürücüyü bulunca ekran düzgün çalışmaya başladı.

İbre hiç dönmüyordu, saatlerce debug ettim. Sebep çok saçmaydı: LVGL'e zamanın geçtiğini bildiren lv_tick_inc() fonksiyonunu hiç çağırmıyordum. Bu çağrı olmadan LVGL'in dahili yenileme zamanlayıcısı sadece açılışta bir kere çalışıyor, sonra hiç tetiklenmiyor. Tek satırlık bir düzeltmeydi ama bulması gerçekten zaman aldı.

"dB" yazan bir ekran koymak yetmiyor, gerçekten dB ölçmek gerekiyor. İlk versiyon ADC'den okunan ham sinyali doğrudan açıya çeviriyordu, bu gerçek dB değil, sadece yüksek/alçak gösteriyordu. Gerçek dB için sinyalin RMS gerilimini hesapladım, dB = 20 × log10(Vrms / Vref) formülüyle gerçek dB'ye çevirdim, multimetre ile ölçüp kalibre ettim (referans gerilim olarak profesyonel ses standardı +4dBu, yani 1.228V kullandım). Analog VU metrelerin skalası doğrusal değil, uçlara doğru sıkışık, bu yüzden ibrenin açısını sabit noktalarda ölçüp bir arama tablosuyla eşleştirdim.

Yüksek seviyeleri (+3dB) test ederken ESP32'nin ADC pinini yakma riskiyle karşılaştım. Sinyal jeneratörünün çıkışı ESP32'nin 3.3V sınırını rahatlıkla aşabiliyordu. Çözüm olarak AWG çıkışı ile ADC pini arasına basit bir 2:1 gerilim bölücü (iki adet 10kΩ direnç) koydum, hem pini korudu hem de gerçek ses ekipmanlarındaki sinyal koşullandırma mantığına benzer bir yaklaşım oldu.

Stereo yapmak için ikinci ekranı eklerken SquareLine'ın ürettiği arayüz kodunu hiç değiştirmeden, lv_disp_set_default() ile hangi ekranın aktif olduğunu belirleyip aynı arayüz oluşturma fonksiyonunu iki farklı ekranda ayrı ayrı çalıştırdım. Kod tekrarına gerek kalmadı.

İkinci ekranın arkaışığı çalışmadı. Görüntü ve dokunmatik tarafı tamamen sağlamdı ama arkaışık neredeyse hiç akım çekmiyordu, yaklaşık 4mA, olması gereken 200mA civarının çok altında. Uzun bir donanım debug sürecinden sonra bunun muhtemelen fabrika kusurlu bir komponent ya da lehim olduğu sonucuna vardım, yazılımla çözülecek bir şey değildi.

-3, 0 ve +3 LED'lerini de çalışır hale getirdim. Bunlar aslında SquareLine tasarımındaki arka plan resminin içine gömülü, sabit çizilmiş kutucuklardı, LVGL nesnesi değillerdi. Yani koddan yakıp söndüremezdim. Çözüm olarak bu kutucukların tam üzerine, aynı boyutta, başlangıçta görünmez üç ayrı LVGL dikdörtgeni bindirdim. Sinyal -3dB, 0dB ve +3dB eşiklerini geçtikçe bu dikdörtgenleri görünür yapıp arkadaki statik kutuyu üstüne basarak aydınlatmış gibi gösteriyorum. Gerçek ses ekipmanlarındaki gibi kümülatif çalışıyor, üst seviyeye ulaşınca alttakiler de yanık kalıyor, ve +3 (peak/clip) LED'i kısa bir tepe yapsa bile 800ms boyunca yanık kalıyor, gerçek peak-hold devrelerine benzer şekilde.

Sırada Ne Var

Şimdi de kutusunu 3D baskıyla yapmayı planlıyorum, ekranların tam oturacağı bir kasa.

Son Durum

Sol kanal tam çalışır durumda: gerçek zamanlı, kalibre edilmiş dB ölçümü yapan, analog ibre ve renkli seviye LED'leri olan bir VU metre. Sağ kanal da yazılım olarak birebir aynı şekilde çalışıyor, sadece ekranın arkaışığı donanımsal bir arıza yüzünden soluk. O da değişince proje tamamen bitmiş olacak.

Bu tarz analog gösterge projeleriyle ilgilenenlere, ekranda güzel görünmesiyle gerçekten doğru ölçmesi arasındaki farkın ne kadar büyük olabileceğini gösteren güzel bir örnek oldu diye düşünüyorum.


WhatsApp Image 2026-08-29 at 14.18.39 (1).webpWhatsApp Image 2026-08-29 at 14.18.03 (1).webpWhatsApp Image 2026-08-29 at 14.18.20.webp


3D Kutuyu da yapınca Dac ve Amfimi yan yana koyup kutuyu da üste ya da altı koyacağım.

WhatsApp Image 2026-08-29 at 14.24.34.webp
 
Bendeki sağlam olan TFT 3.5 inc ekranı stoklarda bulamadım.
Kendinden esp32 li IPS ve diğeri esp32 olmayan 3.5inc ekranlardan ikişer adet aldım.
Önce bütünleşik esp olmayan ekranlar ile kodlarımı düzenleyerek test edeceğim, istediğim sonucu alırsam 3d kutu tasarlayacağım.

Öte yandan kendinden esp32 li 3.5inc ips ekranlar görüş açısı ve kablo karmaşası vs den beni epey kurtaracak ama kod tarafında bayağı bir revizyona gitmem gerekecek.


WhatsApp Image 2026-09-09 at 16.48.51 (1).webpWhatsApp Image 2026-09-09 at 16.48.51.webp
 
Yeni ekranları aktif ettikten sonra,

İstediğim ekrana dokunarak VU-Metre ya da Spektrum Analyzer modu arasında geçiş yapmayı düşünüyorum.

Analog vu-metre zaten hazır ve çalışıyor.

1788985960062.webp


İlave olarak 3.5inc TFT ekranlarımda bunun gibi bir grafik oluşturmaya ve müzik ritmine göre kalibrasyonlu olarak frekans tepkilerini ekrana yazdırmak istiyorum.
Bunun için kod tarafında epey bir çalışma gerekecek.
1788985943365.webp
 
Son düzenleme:
"dB" yazan bir ekran koymak yetmiyor, gerçekten dB ölçmek gerekiyor. İlk versiyon ADC'den okunan ham sinyali doğrudan açıya çeviriyordu, bu gerçek dB değil, sadece yüksek/alçak gösteriyordu. Gerçek dB için sinyalin RMS gerilimini hesapladım, dB = 20 × log10(Vrms / Vref) formülüyle gerçek dB'ye çevirdim, multimetre ile ölçüp kalibre ettim (referans gerilim olarak profesyonel ses standardı +4dBu, yani 1.228V kullandım). Analog VU metrelerin skalası doğrusal değil, uçlara doğru sıkışık, bu yüzden ibrenin açısını sabit noktalarda ölçüp bir arama tablosuyla eşleştirdim.
Peki db ölçümlerinin doğruluğu test edildi mi?
VU standardı -20 veya -24db kadar alt seviye ölçümüdür ve RMS olarak ölçümlenir. Bu kadar dar bir alanda ancak müziğin headroom seviyesi ölçülebilir. Ama headroom için peak ölçümü gerektiği için de VU metre standartları buna izin vermez. Yani müziğin ritminde ibreler sadece KIMIL KIMIL oynayacaktır.
-20db 10 log olduğuna göre ölçüm aralığın -10 yani 1V 0db seviyesine göre 100mV olacaktır.
Elinde mütekamil işlemci ve ekran olduğuna göre neden VU standardına girdin ki :D
Ben olsam mütekamil bir DIN PPM yapar keyfine bakardım.
Tekniğine uygun yapılmış basit bir LM3915 li PPM in ölçüm alanı 30db dir. PPM modunda ölçüm ve gözlem tam estetiktir.
Bu bizim guduruk arkadaşımız @sasen1 in ilk yaptığı PPM dir. Ölçüm ve gözlem olarak oldukça tatminkardır.
Aynı zamanda Sasen bir DIN PPM de yapmış ve bunu profesyonel bir ürün ile kıyaslamıştı.
Sağdaki ekranda görülen profesyonel amaçlı bir PC yazılımdır. Gerçek DIN PPM dir.
Aynı PPM den arkadaşımız @ozgurece-TA3HGU nin amplisinde de bulunmaktadır.
Bu PPM in tasarımı, montajı ve kalibrasyonu tarafımdan yapılmıştır.
BU DIN PPM ler -39 (-40) +3 db seviye aralığında ölçüm yapmaktadır. Alt seviyelerdeki ölçüm çözünürlüğü 3db üst seviyelerde ise 1 db dir.
Ufkumuzu genişletmek amacıyla bir adet de EBU PPM yapmıştık.
60db ölçüm alanına sahip olan (-57 den 0db) bu ürün son tasarımım olmuştu. Çünkü yeni temin edilen ve kullanılan LM3915 ler artık tamamen sahte idi ve çalışmıyorlardı.
60db şaka değildir. 1V 0db referans seviyeye göre 1mV luk bir min. seviye ölçümü demektir ki, bir güç kaynağının gürültü faktörünün bile 100mV lar seviyelerindeki gürültüsü, böyle bir cihaz yapımında kullanılamayacağı anlamına gelir.
 
DIN PPM kesinlikle çok daha doğru ve profesyonel bir araç. Ama bu projedeki asıl amacım ölçüm hassasiyetinden ziyade, o eski analog stüdyo cihazlarındaki klasik VU metre estetiğini yakalamak ve izlemekti; yani tamamen nostalji ve görsel zevk :)

Gerilim (voltaj) ölçtüğüm için hesaplamada 10 log değil 20 log formülü geçerli. Dolayısıyla -20 dB seviyesi, 0 dB referansına göre (1.228V) 10 kat düşüşle 122.8 mV civarına denk geliyor. Yani hareket alanı o kadar dar kalmıyor.

Alt seviyelerdeki o kımıl kımıl kalma durumunu da arama tablosu (LUT) ve yazılımsal filtrelerle çözüp gayet akıcı bir salınım yakaladım. Yazılıma ufak bir ekleme yapıp tek dokunuşla DIN PPM moduna, hatta biraz daha kod yazıp FFT ile spectrum analyzer moduna geçiş özelliği koymak gibi bir düşüncem de var, sırayla ekleyip sonucu göreceğim ilk fırsatta.
 
Son düzenleme:
Gerilim (voltaj) ölçtüğüm için hesaplamada 10 log değil 20 log formülü geçerli. Dolayısıyla -20 dB seviyesi, 0 dB referansına göre (1.228V) 10 kat düşüşle 122.8 mV civarına denk geliyor. Yani hareket alanı o kadar dar kalmıyor.
GED ULA... KÖTEK 🤜 :rolleyes:🤜
20 db için 10 katı demek istemiştim. Sonuç itibari ile ben 1V 0db referans demişsem, sen1.22V referans alman sonucu değiştirmez. Sonuç 1/10 yani 10 katı demek istemiştim.
Özetle hareket alanı sadece 20db civarıdır. Halbuki gerçek bir DIN PPM de hareket alanı 50db dir. Bizler tasarımımızda makul bütçe ile -40db lik bir alan ölçümü yaptık.
Bu da yaklaşık 10mV a denk gelir. Senin referans seviyene göre ise 12.2mV eder.
Ölçüm alanı genişledikçe üretim ve ölçüm maliyetleri çok artar. Çünkü düşük seviyelerdeki hassasiyet ve gürültü faktörü çok fazla hassas ekipmanlar gerektirir.
Estetik konusunda haklısın. Çoğu kişiler eski analog ibreli VU metrelere özenir. Ancak senin projenin daha anlamlı olması için şunu önerebilirim.
İbre görüntüsü bir çeşit ekran olduğuna göre bu ekranı bir MOD değişimi ile DOT (LED DISPLAY) gibi de yapabilirsin sanırım. Bu durumda göstergede görünecek led miktarı teorik olarak sınırsızdır. Yani gösterge çözünürlüğüne göre her bir ledi 1mm kalınlığında bile yapabilirsin. Bu durumda öyle bir göstergeye 100+ led bile sığdırabilirsin. Her bir ledin çalışma ve referansını doğru ayarlayabilirsen -50 ila +5db seviyesinde çalışabilen gerçek bir DIN PPM yapabilmen çok zor değildir.
Buradaki en önemli ekipman ekran ve ekran sürücüsü olmalı ki bu ekipmanlar çok da ucuz olmasa gerek.
 
Dijital tarafta ESP32-S3'ün işlem gücü ve yazılımsal filtrelerle bu -40 dB veya -50 dB gibi gürültü tabanını büyük oranda aşabiliyoruz.
Ekran çözünürlüğü ve mod değişimi yapılacaklar listemdeydi.
Zaten kullandığım ekranlar 480x320 çözünürlüğünde olduğu için dediğin gibi detaylı grafikler çizmeye çok müsait.
Ben de tam bu noktadan yola çıkarak yazılıma hem DIN PPM modunu eklemeye hem de sonraki aşamada FFT ile 2x12 kanallı bir spectrum analyzer ekran tasarımı yapmaya karar verdim.
Tek dokunuşla modlar arasında geçiş olacak inşallah bakalım zaman buldukça geliştireceğim.
 
Dijital tarafta ESP32-S3'ün işlem gücü ve yazılımsal filtrelerle bu -40 dB veya -50 dB gibi gürültü tabanını büyük oranda aşabiliyoruz.
Ekran çözünürlüğü ve mod değişimi yapılacaklar listemdeydi.
Zaten kullandığım ekranlar 480x320 çözünürlüğünde olduğu için dediğin gibi detaylı grafikler çizmeye çok müsait.
Ben de tam bu noktadan yola çıkarak yazılıma hem DIN PPM modunu eklemeye hem de sonraki aşamada FFT ile 2x12 kanallı bir spectrum analyzer ekran tasarımı yapmaya karar verdim.
Tek dokunuşla modlar arasında geçiş olacak inşallah bakalım zaman buldukça geliştireceğim.
Şunu açıkça belirteyim.
Bir VU metre esasen bir ölçü aletidir. Aynı zamanda PPM ler de daha geniş aralıklı voltaj ölçen ölçü aletleridir.
Bizim projelerimizde ölçüm doğruluğu son derece önemli olup, Sasen bu ölçümlerin doğruluğunu tespit edebilmek için klavyeyi bile kemirmişti :D
ÖNEMLİ NOT:
Bu tür ölçü aletleri esasen gerilim ölçseler de müziğin akışı esnasındaki seviyeleri ölçmek için tasarlanmışlardır.
Müziğin akışı esnasındaki seviyeler doğrudan db ile ölçeklendirilmektedir. Yani referans seviyeye göre kaç volt aşağı olması ve bu ölçümün doğruluğu esastır.
Bu durumda bazı uluslararası standartları bilmek gerekir.
VU standardı, 300m/sn burst gibi yavaş bir hızda gerçekleştirilmektedir. Bunun sebebi ilk VU ölçen aygıtlar için ibre kullanılması ve ibrelerin ataleti (hareket kabiliyeti) sınırlayıcı sebeptir.
Yani müzikte olan örneğin bir DUMP sesi 10m/sn ise VU metreler bu hızda çalışamadıkları için bu DUMP sesini doğru ölçemezler. Doğru ölçüm için PEAK ölçen aygıtlar geliştirilmiştir.
Ancak peak ölçümü gözlem sorununu da birlikte getirdiği için bunun için bir standart oluşturulmuştur ve adlandırılmıştır.
İşte DIN PPM standardı buna örnektir. 1-10m/sn burst hızı ayrıca decay (düşme) hızı, bu standartta belirtilmiştir.
Bu tür PPM lere genel anlamda QUASI PPM denilmektedir. Daha hızlı çalışan PPM standartları da bulunmaktadır. Örneğin EBU PPM.
DIN standardına göre daha hızlıdır. EBU SMPTE ise yüksek ölçüm alanlı -70db ye kadar uzanır ve oldukça hızlı ölçüm yaparlar.
PPM ler ile ilgili kafan karışırsa ben yardımcı olurum.
https://en.wikipedia.org/wiki/Peak_programme_meter
Profesyonel disiplinde oldukça fazla detay gerektirmektedir. Çoğu kişiler bu detayları bilmeyebilir.
 
Son düzenleme:
Dijital tarafta ESP32-S3'ün işlem gücü ve yazılımsal filtrelerle bu -40 dB veya -50 dB gibi gürültü tabanını büyük oranda aşabiliyoruz.
Ekran çözünürlüğü ve mod değişimi yapılacaklar listemdeydi.
Zaten kullandığım ekranlar 480x320 çözünürlüğünde olduğu için dediğin gibi detaylı grafikler çizmeye çok müsait.
Ben de tam bu noktadan yola çıkarak yazılıma hem DIN PPM modunu eklemeye hem de sonraki aşamada FFT ile 2x12 kanallı bir spectrum analyzer ekran tasarımı yapmaya karar verdim.
Tek dokunuşla modlar arasında geçiş olacak inşallah bakalım zaman buldukça geliştireceğim.
Ellerinize sağlık proje bitiminde kısa video ekleseniz ... biz bu teknolojiye uzak kalanların bu oyuncaklara yanasamayanlarin hevesi az da olsa gider. Hem kımıl kımıl hem PPI ekranları göreceğimiz video ile mest olsak 🤷🏼‍♂️☺️
 
Ellerinize sağlık proje bitiminde kısa video ekleseniz ... biz bu teknolojiye uzak kalanların bu oyuncaklara yanasamayanlarin hevesi az da olsa gider. Hem kımıl kımıl hem PPI ekranları göreceğimiz video ile mest olsak 🤷🏼‍♂️☺️

Yeni aldığım ekranların çipseti farklı çıktı. Onu tanıtmakla uğraştım.
Herhangi bir ekrana dokunarak ilgili ekranda VU ve DIN PPM modları arasında geçiş yapılabiliyor.

Bu arada müziği simüle ettim, şimdilik kaynak bağlamadım.
 
Son düzenleme:

Forum istatistikleri

Konular
133,388
Mesajlar
971,097
Kullanıcılar
459,260
Son üye
cumhur003

Yeni konular

Geri
Üst