İçindekiler:

Hoparlör veya Flyback Transformer Üzerinde PWM Kullanarak Arduino İle Şarkı Çalın(MP3): 6 Adım (Resimlerle)
Hoparlör veya Flyback Transformer Üzerinde PWM Kullanarak Arduino İle Şarkı Çalın(MP3): 6 Adım (Resimlerle)

Video: Hoparlör veya Flyback Transformer Üzerinde PWM Kullanarak Arduino İle Şarkı Çalın(MP3): 6 Adım (Resimlerle)

Video: Hoparlör veya Flyback Transformer Üzerinde PWM Kullanarak Arduino İle Şarkı Çalın(MP3): 6 Adım (Resimlerle)
Video: KENDİ KENDİNİ SÜREN TRAFOYU OSİLOSKOPA BAĞLADIK 2024, Temmuz
Anonim
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)
Hoparlör veya Flyback Transformer'da PWM Kullanarak Arduino ile Şarkı Çalın (MP3)

Selam beyler, Bu benim ilk dersim, umarım beğenirsiniz!!

Temel olarak, bu Projede, dizüstü bilgisayarımdan Arduino'ya müzik verilerini iletmek için Arduino'm ve Dizüstü Bilgisayarım arasındaki Seri İletişimi kullandım. Ve verileri bir PWM sinyali olarak oynatmak için Arduino ZAMANLAYICILARINI kullanmak.

Bu projenin Yeni Başlayanlar için olmadığını belirtmek istedim!!!.

Aslında bu proje en uzun projelerden biriydi çünkü çalışması için çok şey yapmamız gerekiyor.

DİKKAT

Bu talimatın ikinci bölümünü yaptım, bu çok daha kolay ve çalışması için en az zahmet gerektiren

İkinci Bölüme Bağlantı (en kolay olan).

Adım 1: Bu Proje İçin İhtiyacımız Olan Şeyler (Gereksinimler)

1. Arduino Board (herhangi bir Board (328, 2560) yani Mega, Uno, Mini, vb. ancak belirli farklı pinlerle kullanabiliriz)

2. Linux'lu PC veya Dizüstü Bilgisayar (Fedora 29 kullandım) Veya Linux'lu Canlı USB

3. Breadboard veya Perfboard

4. Bağlantı Kabloları

5. TC4420 (Mosfet sürücüsü veya benzeri bir şey)

6. Power Mosfet(N veya P kanalı, lütfen uygun şekilde kablolayın) (N-kanal kullandım)

7. Hoparlör veya Flyback Transformer(Evet doğru okudunuz!!)

8. Uygun Güç Kaynağı (0-12V) (Kendi ATX Güç Kaynağımı kullandım)

9. Isı Emici (Eski bilgisayarımdan kurtardım)

10. Windows ve kalem sürücülü PC.

Her bileşenin ve bu projenin ayrıntılı çalışmasını öğrenmek için lütfen bir sonraki adımı okuyun.

Bu öğreticinin ikinci bölümünü yaptım, bu çok daha kolay ve çalışması için minimum zahmete ihtiyaç duyuyor. İkinci Bölüme Bağlantı (en kolay olanı).

Adım 2: Çalışma Prensibini Anlamak

Ahhh!! öğretilebilir bir bölümün en uzun kısmı, bu bölümü okumak ve yazmak hem sıkıcı.

Her şeyden önce, bu şeyin gerçekte nasıl çalıştığına dair bir Genel Bakış almamız gerekiyor.

burada yaptığımız şey öncelikle linkteki yazılımı kullanarak MP3 şarkımızı WAV Dosyasına ve bu dosyayı da C başlık dosyasına çeviriyoruz. Bu C kodu aslında Arduino'muzu kullanarak, Örnekleme Hızımıza göre belirtilen sabit bir hızda veya hızda oynamamız gereken 8 bit (neden 8 bit??) veri örneklerini içerir.

Bir Ses Sinyali Teorisi.

Örnekleme Hızının veya Bit Hızının ne olduğunu bilmeyenler için: -

Örnekleme Hızı, bir saniyede çaldığımız Örnek sayısı olarak tanımlanır (genellikle Hz veya KHz olarak ölçülür).

Daha detaylı bilgi için:-Buraya tıklayın

Standart Örnekleme Hızları 44100 Hz(en iyi kalite), 32000 Hz, 22050 Hz, vb.

bu, buna göre bir dalga oluşturmak için bir saniyede 44100 Numunenin kullanıldığı anlamına gelir.

yani Her Numunenin 1/44100=22.67 uS sabit bir aralıkta çalınması gerekir.

Ardından, genellikle bir sesin dijital seste ne kadar kesin olarak temsil edildiğinin bir ölçüsü olan Ses Sinyalinin Bit Derinliği gelir. Bit derinliği ne kadar yüksek olursa, dijital ses o kadar doğru olur.

Ancak Arduino veya herhangi bir 16Mhz saat hızına sahip herhangi bir Mikro denetleyici ile bizi sadece 8-bit'e kadar kullanmamıza izin veriyor. nedenini açıklayacağım.

328p veri sayfasında 102. sayfada bir formül var:- Veri Sayfası

Ayrıntılara girmeyeceğim, neden bu formülü kullanıyorum.

Sinyal frekansı=Saat Sinyali / N x (1+ÜST)

Saat Sinyali=16Mhz(Arduino kartı)

N=önceden ölçekleyici (1 bizim projemiz için değerdir)

TOP=değer 0 - 2^16(16-bit zamanlayıcı sayacı için) (255=2^8 (8-bit) projemiz için)

Sinyal = 62,5 kHz frekansının değerini alıyoruz

Bu, taşıyıcı dalga frekansının Bit Derinliğine bağlı olduğu anlamına gelir.

TOP değeri = 2^16=65536 kullanırsak (yani 16 bitlik bit derinliği) varsayalım.

sonra Signal = 244 Hz (kullanamadığımız) frekansının değerini elde ederiz.

OKK… Ses Sinyallerinin nasıl çalıştığına dair bu kadar teori yeterli, Projeye geri dönelim.

Bir Şarkı için oluşturulan C kodu Arduino'ya kopyalanabilir ve çalınabilir, ancak 8000 Hz örnekleme hızıyla 3 saniyelik ses çalma ile sınırlıyız. Çünkü bu C kodu bir metin dosyasıdır ve bu nedenle sıkıştırılmamış, sıkıştırılmamış. Ve çok fazla yer kaplıyor. (Örneğin 43 saniyelik sesli C kod dosyası 44, 1 KHz örnekleriyle 23 MB'a kadar yer kaplar). Arduino Mega'mız da bize yaklaşık 256 Kb'lik bir alan veriyor.

Peki Arduino kullanarak şarkıları nasıl çalacağız. Bu mümkün değil. Bu Eğitilebilirlik sahte. Merak etmeyin okuyucular, Bu yüzden Arduino'ya Ses verisi göndermek için Arduino arasında çok yüksek hızlarda (1 Mb/s'ye kadar) bir tür iletişim kullanmamız gerekiyor.

Ama bunu yapmak için tam olarak ne kadar hıza ihtiyacımız var?

Cevap saniyede 44000 bayttır, bu da 44000*8=325.000 Bit/sn'den daha fazla hız anlamına gelir.

Bu verileri Arduino'muza göndermek için büyük depolama alanına sahip başka bir çevre birimine ihtiyacımız var. Ve bu bizim Linux'lu PC'miz olacak (neden Linux'lu PC??? bu konuda daha fazla bilgi için lütfen daha fazla okuyun.)

Ahaa…Bu, Seri Haberleşmeyi kullanabileceğimiz anlamına geliyor…Ama bekleyin…seri sadece 115200 Bit/s'ye kadar hızlarda mümkündür, bu da (325000/115200=3) gerekenden üç kat daha yavaş olduğu anlamına gelir.

Hayır arkadaşlar, öyle değil. Maksimum 20-30 cm'ye kadar bir kabloyla hız veya 500.000 Bit/sn'lik Baud Hızı kullanacağız; bu, gerekenden 1,5 kat daha hızlıdır.

Neden Windows değil Linux ???

Bu nedenle, PC'miz ile 1/44100=22.67 uS aralığında (yukarıda belirtilen) numune göndermemiz gerekiyor.

Peki bunu nasıl programlayabiliriz??

Bir tür uyku işlevi kullanarak Seri aracılığıyla bir veri baytı göndermek için C++ kullanabiliriz.

nanosleep, Chrono, vb. gibi.

for(int x=0;x

sendData(x);

nano uyku(22000);// 22uS

}

AMA HAYIR WINDOWS'DA ÇALIŞMIYOR Linux'ta da bu şekilde çalışmadı (ancak ekli Kodumda görebileceğiniz başka bir yol buldum.)

Çünkü pencereleri kullanarak böyle bir ayrıntı düzeyine ulaşamıyoruz. Böyle bir ayrıntı düzeyine ulaşmak için Linux'a ihtiyacınız var.

Linux'ta bile bulduğum sorunlar…

Linux kullanarak böyle bir ayrıntı düzeyine ulaşabiliriz, ancak programımı 22uS için uyutmak için böyle bir işlev bulamadım.

Nanosleep, Chrono nanosleep, vb. gibi işlevler de çalışmaz, çünkü bunlar yalnızca 100 uS'den fazla uyku sağlar. Ama tam olarak 22 usS'ye ihtiyacım vardı. Google'daki her sayfayı araştırdım ve C/C++'da bulunan tüm olası işlevleri denedim ama hiçbir şey benim için işe yaramadı. Sonra benim için gerçek bir çekicilik olarak çalışan kendi işlevimi buldum.

Ve kodum şimdi tam, tam olarak 1uS veya üzeri bir uyku sağlıyor !!!!

Bu yüzden zor kısmı ele aldık ve gerisi kolay…

Ve Arduino kullanarak belirli bir frekansa ve ayrıca taşıyıcı dalga frekansına sahip bir PWM sinyali üretmek istiyoruz. Sinyalin iyi bağışıklığı için (62.5KHz (yukarıda hesaplandığı gibi).

Bu yüzden, PWM oluşturmak için Arduino'nun ZAMANLAYICILARINI kullanmamız gerekiyor. Bu arada, bunun hakkında fazla ayrıntıya girmeyeceğim, çünkü ZAMANLAYICILAR konusunda birçok eğitim bulacaksınız, ancak birazını bulamazsanız, aşağıya yorum yapacağım.

Arduino Pinlerimizi kurtarmak için bir TC4420 Mosfet sürücüsü kullandım çünkü bazen bir MOSFET sürmek için çok fazla akım sağlayamıyorlar.

Yani, bu projenin neredeyse teorisi buydu, şimdi devre şemasını görebiliriz.

DİKKAT DİKKAT DİKKAT

Aslında, bu proje kasıtlı olarak çok zorlaştırıldı (nedenini söyleyeceğim), nextinstructable'ımda noPC sadece Arduino ve hoparlör gerektiren başka bir yöntem var. Link burada.

*Bu projenin temel amacı Seri Haberleşmeyi kullanmak ve gücünü bilmek ve bilgisayarımızı bu kadar ince aralıklarla hassas bir şekilde yapacak şekilde nasıl programlayabileceğimizi öğrenmektir.*

Adım 3: Şematik

Şematik
Şematik

Tüm Bileşenleri şemada gösterildiği gibi bağlayın. Yani burada iki seçeneğiniz var: -

1. Bir Hoparlör Bağlayın (5V ile Bağlı)

2. Bir Flyback Trafo Bağlayın (12V ile Bağlı)

Her ikisini de denedim. Ve ikisi de oldukça iyi çalışıyor.

Sorumluluk Reddi: -

* Yüksek Gerilim ürettiği için tehlikeli olabileceğinden Flyback Transformatör'ü Tedbirli kullanmanızı tavsiye ederim. Ve herhangi bir zarardan sorumlu olmayacağım.*

Adım 4: Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün

Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün
Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün
Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün
Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün
Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün
Audacity Kullanarak MP3'ü WAV Dosyasına Dönüştürün

Yani, Her şeyden önce, yazılımı indirin

1. Audacity, arama ve Google'dan indirme

2. WAV Dosyasını C-Code'a dönüştürmek için WAVToCode adlı bir pencere uygulamasını indirin

WAVToCode yazılımını nasıl kullanacağınızı bu linkten öğrenebilir ve bu linkten indirebilirsiniz.

Ayrıca her iki yazılımın nasıl kullanılacağına dair ayrıntılı adımlar vereceğim.

Lütfen bu talimatla bağlantılı fotoğraflara bakın.

Bu adımda MP3'ü Wav'a çevireceğiz. (Fotoğrafları takip edin, Proje hızı 44100Hz olmalıdır)

Bir sonraki adımda, bir wav dosyasını C Koduna çevireceğiz.

Adım 5: WAV'dan C Koduna

WAV'den C Koduna
WAV'den C Koduna
WAV'den C Koduna
WAV'den C Koduna
WAV'den C Koduna
WAV'den C Koduna

Fotoğrafları takip edin.

Son iki resme bakın, değişiklikler tam olarak aynı olmalı, Büyük harfler büyük ve küçük harfler küçük olmalı, Yoksa derleme sırasında sözdizimi hatası alırsınız.

(1dk 41s şarkının 23mb yer kapladığını görebilirsiniz.)

Şarkı adını ve uzunluğunu sırasıyla şarkınızın adı ve süresiyle değiştirin.

Ve C Kodu dosyasını kaydedin.

Arduino ile çalmak istediğiniz tüm Şarkılara bunu yapın

Adım 6: Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın

Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın
Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın
Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın
Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın
Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın
Son Dosyayı Hazırlayın ve Linux'unuzu Çalıştırın

Dönüştürülen tüm şarkılarınızı bu bağlantıda sağlanan Dosyaya ekleyin.

Ve resimleri takip edin.

Eklediğim kodu Arduino'ya yükleyin.

C Kodu dosya adlarını hatırlayın.(örneğin, yaşam tarzı, dolar, giyen için), çünkü kodumuzun tam olarak aynı adlarını büyük/küçük harfe duyarlı olarak belirtmek zorundayız.

Sonunda Fedora Live USB'nizi veya diğerini çalıştırın ve gcc derleyicisini kurun ve ardından klasördeki derleme talimatlarını kullanarak programı derleyin ve çalıştırın.

Sonunda Speaker veya Flyback'ten şarkılar dinleyebileceksiniz.

Bu talimatı okuduğunuz için teşekkür ederiz ve lütfen beğenirseniz yorum yapın.

DİKKAT Bu talimatın ikinci bölümünü, çok daha kolay ve çalışması için minimum zahmet gerektiren, yapılabilir hale getirdim. İkinci Bölüme Bağlantı (en kolay olan)

Önerilen: