Mündəricat:

Dinamik və ya Flyback Transformatorda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın: 6 Addım (Şəkillərlə)
Dinamik və ya Flyback Transformatorda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın: 6 Addım (Şəkillərlə)

Video: Dinamik və ya Flyback Transformatorda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın: 6 Addım (Şəkillərlə)

Video: Dinamik və ya Flyback Transformatorda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın: 6 Addım (Şəkillərlə)
Video: Dinamik işarələr və Templər. 2024, Iyul
Anonim
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın
Dinamik və ya Flyback Transformatorunda PWM istifadə edərək Arduino ilə Mahnılar (MP3) Çalın

Salam uşaqlar, Bu mənim ilk təlimatımdır, ümid edirəm bəyənəcəksiniz !!

Əsasən, bu Layihədə Arduino ilə Laptopum arasındakı Serial Əlaqədən istifadə edərək musiqi məlumatlarını dizüstü kompüterimdən Arduinoya ötürmək üçün istifadə etdim. Və məlumatları PWM siqnalı olaraq oynamaq üçün Arduino TIMERS -dən istifadə edin.

Qeyd etmək istədim ki, bu layihə yeni başlayanlar üçün deyil !!!.

Əslində, bu layihə ən uzun layihələrdən biri idi, çünki onun işləməsi üçün çox şey etməliyik.

DİQQƏT

Bu təlimatın ikinci hissəsini daha asanlaşdırdım və işləmək üçün minimum çətinliklərə ehtiyacım var

İkinci hissəyə keçid (ən asan).

Addım 1: Bu Layihə üçün Ehtiyac duyduğumuz Şeylər (Tələblər)

1. Arduino Board (hər hansı bir lövhədən (328, 2560) istifadə edə bilərik, yəni Mega, Uno, Mini və s.

2. Linux ilə PC və ya Laptop (Fedora 29 istifadə etmişəm) və ya Linux ilə Live USB

3. Breadboard və ya Perfboard

4. Tellərin birləşdirilməsi

5. TC4420 (Mosfet sürücüsü və ya belə bir şey)

6. Power Mosfet (N və ya P kanalı, zəhmət olmasa müvafiq olaraq tel çəkin) (N kanalından istifadə etdim)

7. Dinamik və ya Flyback Transformatoru (Bəli düzgün oxudunuz!)

8. Uyğun Güc Təchizatı (0-12V) (öz ATX Güc Təchizatımdan istifadə etmişəm)

9. İstilik Sink (köhnə kompüterimdən xilas oldum)

10. Windows və qələm sürücüsü olan kompüter.

Hər bir komponentin ətraflı işini və bu layihəni bilmək üçün növbəti addımı oxuyun.

Bu təlimatın ikinci hissəsini daha asanlaşdırdım və işləmək üçün minimum çətinliklərə ehtiyacım var. İkinci hissəyə keçin (ən asan).

Addım 2: İş prinsipini anlayın

Ahhh !! Təlimat verilə bilən ən uzun hissəsi, bu bölümü oxumaq və yazmaq həm darıxdırıcıdır.

Hər şeydən əvvəl, bu işin əslində necə işlədiyinə bir baxış əldə etməliyik.

burada etdiyimiz budur ki, əvvəlcə MP3 mahnımızı WAV Faylına və bu faylı bağlantıda olan proqramı istifadə edərək C başlıq faylına çeviririk. Bu C kodu əslində Arduino sistemimizdən istifadə edərək oynamağımız lazım olan 8 Nümunə (Niyə 8-bit? Daha ətraflı oxuyun) Nümunə Oranımıza uyğun olaraq təyin olunan məlumat nümunələrini ehtiva edir.

Səs siqnalının nəzəriyyəsi.

Nümunə götürmə sürətinin və ya bit nisbətinin nə olduğunu bilməyənlər üçün:-

Nümunə götürmə sürəti bir saniyədə oynadığımız nümunələrin sayı olaraq təyin olunur (ümumiyyətlə Hz və ya KHz ilə ölçülür).

Ətraflı məlumat üçün: -Buraya tıklayın

Standart nümunə götürmə dərəcələri 44100 Hz (ən keyfiyyətli), 32000 Hz, 22050 Hz və s

buna uyğun olaraq bir dalğa yaratmaq üçün bir saniyədə 44100 Nümunədən istifadə edildiyi deməkdir.

yəni hər bir nümunənin 1/44100 = 22.67 uS sabit bir aralıqda çalınması tələb olunur.

Daha sonra bir səs siqnalının bit dərinliyi gəlir və bu ümumiyyətlə səsin rəqəmsal səsdə nə qədər dəqiq təmsil olunduğunun ölçüsüdür. Bit dərinliyi nə qədər yüksək olsa, rəqəmsal səs bir o qədər dəqiq olar.

Ancaq Arduino və ya 16Mhz saatı olan hər hansı bir Mikro nəzarətçi bizə yalnız 8-bitə qədər istifadə etməyə imkan verir. Bunun səbəbini izah edəcəyəm.

328p məlumat cədvəlində 102 nömrəli səhifədə bir düstur var:- Məlumat cədvəli

Bu formulu niyə istifadə etdiyimi ətraflı izah etməyəcəyəm.

Siqnalın tezliyi = Saat Siqnalı / N x (1+TOP)

Saat Siqnalı = 16 MHz (Arduino lövhəsi)

N = prescaler (1 layihəmiz üçün dəyərdir)

TOP = 0 ilə 2^16 arası dəyər (16 bitlik taymer sayğacı üçün) (layihəmiz üçün 255 = 2^8 (8 bit))

Siqnal = 62.5 kHz tezliyinin dəyərini alırıq

Bu, daşıyıcı dalğa tezliyinin Bit Dərinliyindən asılı olması deməkdir.

Tutaq ki, TOP dəyərindən istifadə etsək = 2^16 = 65536 (yəni 16 bitlik bit dərinliyi)

sonra Siqnal = 244 Hz (istifadə edə bilməyəcəyimiz) tezliyinin dəyərini alırıq

OKK … Beləliklə, Siqnalların Necə İşlədiyinə dair bu qədər nəzəriyyə kifayətdir, buna görə də Layihəyə qayıdaq.

Bir Mahnı üçün yaradılan C kodu Arduinoya kopyalana bilər və çalına bilər, ancaq 8000 Hz nümunə götürmə sürəti ilə 3 saniyəyə qədər səs oxutmaqla məhdudlaşırıq. Çünki bu C kodu bir mətn faylıdır və buna görə də sıxılmır, əksinə açılır. Və çox yer tutur. (məsələn, 44 saniyəlik 43 saniyəlik səsə malik C kod faylı, 1 KHz nümunələri 23 MB-a qədər yer tutur). Və Arduino Mega bizə təxminən 256 Kb boşluq verir.

Beləliklə, Arduino istifadə edərək mahnıları necə çalacağıq. Bu mümkün deyil. Bu təlimat saxtadır. Oxucular narahat olmayın

Bu səbəbdən, Arduinoya Audio məlumatlarını göndərmək üçün yüksək sürətlə (1 Mb/s -ə qədər) Arduino arasında bir növ ünsiyyətdən istifadə etməliyik.

Amma bunu etmək üçün tam olaraq nə qədər sürətə ehtiyacımız var ??

Cavab, saniyədə 44000 baytdır, yəni sürəti 44000*8 = 325, 000 Bit/s -dən çoxdur.

Bu məlumatları Arduino -ya göndərmək üçün böyük yaddaşa malik başqa bir ətraf qurğuya ehtiyacımız var. Və bu Linux ilə kompüterimiz olacaq (niyə Linux ilə PC ??? bu barədə daha çox bilmək üçün daha çox oxuyun.)

Ahaa… Bu, Serial Əlaqədən istifadə edə biləcəyimiz deməkdir … Ancaq gözləyin … serial yalnız 115200 Bit/s -ə qədər sürətlə mümkündür, yəni (325000/115200 = 3), tələb olunandan üç qat daha yavaşdır.

Xeyr, dostlarım, belə deyil. Maksimum 20-30 sm-ə qədər olan bir kabel ilə 500.000 Bit/s sürət və ya Baud Hızı istifadə edəcəyik.

Niyə Linux yox, Windows yox ???

Beləliklə, nümunələri PC ilə birlikdə 1/44100 = 22.67 uS aralığında (yuxarıda da göstərilmişdir) göndərməliyik.

Elə isə bunu necə proqramlaşdıra bilərik ??

Bir növ yuxu funksiyasından istifadə edərək məlumat aralığını Serial vasitəsilə göndərmək üçün C ++ istifadə edə bilərik

nanosleep, Chrono və s.

üçün (int x = 0; x

sendData (x);

nanosleep (22000); // 22uS

}

AMMA YOX WINDOWS İŞLƏRİ Linuxda belə işləmirdi (amma əlavə etdiyim Kodumda görə biləcəyiniz başqa bir yol tapdım.)

Çünki pəncərələrdən istifadə edərək bu qədər zərifliyə nail ola bilmərik. Belə bir detal əldə etmək üçün Linux -a ehtiyacınız var.

Linux ilə belə tapdığım problemlər …

Linux -dan istifadə edərək belə bir təfərrüat əldə edə bilərik, amma 22uS üçün proqramımı yatdırmaq üçün belə bir funksiya tapmadım.

Nanosleep, Chrono nanosleep və s. Kimi funksiyalar da işləmir, çünki yuxu yalnız 100 -dən çoxdur. Ancaq mənə tam olaraq 22 uS lazım idi. Google -da hər bir səhifəni araşdırdım və C/C ++ da mövcud olan bütün mümkün funksiyaları sınadım, amma heç bir şey mənim üçün işləmədi. Sonra öz funksiyamı ortaya qoydum ki, bu da mənim üçün əsl cazibə rolunu oynadı.

Və kodum indi dəqiq 1uS və ya daha yuxarı yuxu təmin edir !!!

Çətin hissəni əhatə etdik, qalanı isə asan…

Xüsusi bir tezlik və daşıyıcı dalğa tezliyi ilə Arduino istifadə edərək bir PWM siqnalı yaratmaq istəyirik. (Siqnalın yaxşı toxunulmazlığı üçün 62.5KHz (yuxarıda hesablandığı kimi)).

Beləliklə, PWM yaratmaq üçün sözdə Arduino TIMERS-dən istifadə etməliyik. Yeri gəlmişkən, bu barədə çox təfərrüatlı məlumat verməyəcəyəm, çünki TIMERS mövzusunda bir çox dərslik tapacaqsınız, amma bəzilərini tapmasanız aşağıda şərh yazacağam.

Arduino pinlərimizi saxlamaq üçün TC4420 Mosfet sürücüsündən istifadə etdim, çünki bəzən MOSFET sürmək üçün bu qədər cərəyan verə bilmirlər.

Deməli, bu layihənin demək olar ki, nəzəriyyəsi idi, indi dövrə diaqramını görə bilərik.

DİQQƏT DİQQƏT

Əslində, bu layihə qəsdən çox çətinləşdirildi (səbəbini deyəcəyəm), noPC tələb edən başqa bir üsul var, sadəcə Arduino və spiker mənim nextinstructable. Link burada.

*Bu layihənin əsas məqsədi Serial Ünsiyyətdən istifadə etmək və onun gücünü bilmək və PC -ni bu qədər gözəl fasilələrlə vəzifələri yerinə yetirmək üçün necə proqramlaşdıra biləcəyimizi öyrənməkdir.

Addım 3: Şematik

Sxematik
Sxematik

Bütün komponentləri sxematik şəkildə göstərildiyi kimi bağlayın. Beləliklə, burada iki seçiminiz var:-

1. Dinamik qoşun (5V ilə bağlanır)

2. Flyback Transformatorunu qoşun (12V ilə əlaqələndirilir)

Hər ikisini sınamışam. Və hər ikisi olduqca yaxşı işləyir.

İmtina:-

*Yüksək Gərginlik istehsal etdiyi üçün təhlükəli ola biləcəyi üçün Flyback Transformerini Ehtiyatla istifadə etməyi məsləhət görürəm. Və heç bir ziyana görə məsuliyyət daşımayacağam.

Addım 4: Audacity istifadə edərək MP3 -ü WAV faylına çevirin

Audacity istifadə edərək MP3 -ü WAV faylına çevirin
Audacity istifadə edərək MP3 -ü WAV faylına çevirin
Audacity istifadə edərək MP3 -ü WAV faylına çevirin
Audacity istifadə edərək MP3 -ü WAV faylına çevirin
Audacity istifadə edərək MP3 -ü WAV faylına çevirin
Audacity istifadə edərək MP3 -ü WAV faylına çevirin

Beləliklə, ilk növbədə proqramı yükləyin

1. Audacity, Google -dan axtarış və yükləmə

2. WAV Faylını C-Koduna çevirmək üçün WAVToCode adlı bir pəncərə tətbiqini yükləyin

WAVToCode proqramını necə istifadə edəcəyinizi bu linkdən öyrənə və bu linkdən yükləyə bilərsiniz.

Həm də hər iki proqramın necə istifadə ediləcəyinə dair ətraflı addımlar verəcəyəm.

Zəhmət olmasa bu təlimatla əlaqəli şəkillərə baxın.

Bu addımda MP3 -ü Wav -a çevirəcəyik. (Fotoşəkilləri izləyin, Layihə sürəti 44100Hz olmalıdır)

Növbəti addımda bir wav faylını C Koduna çevirəcəyik.

Addım 5: WAV-dan C-Koduna keçin

WAV-dan C-koduna
WAV-dan C-koduna
WAV-dan C-koduna
WAV-dan C-koduna
WAV-dan C-koduna
WAV-dan C-koduna

Fotoları izləyin.

Son iki şəkilə baxın, dəyişikliklər eyni olmalıdır, Böyük hərflər böyük və kiçik hərflər kiçik olmalıdır, Yoxsa tərtib edərkən sintaksis səhvini alacaqsınız.

(1min 41s mahnının 23mb yer tutduğunu görə bilərsiniz.)

Mahnının adını və uzunluğunu sırasıyla mahnınızın adı və müddəti ilə dəyişdirin.

Və C Kodu faylını qeyd edin.

Bunu Arduino ilə oynamaq istədiyiniz bütün mahnılara edin

Addım 6: Son Fayl yaradın və Linuxunuzu Yandırın

Son bir fayl yaradın və Linuxunuzu yandırın
Son bir fayl yaradın və Linuxunuzu yandırın
Son bir fayl yaradın və Linuxunuzu yandırın
Son bir fayl yaradın və Linuxunuzu yandırın
Son bir fayl yaradın və Linuxunuzu yandırın
Son bir fayl yaradın və Linuxunuzu yandırın

Bütün çevrilən mahnılarınızı bu linkdə təqdim olunan Faylı əlavə edin.

Və şəkilləri izləyin.

Kodu əlavə etdiyim Arduinoya yükləyin.

C Code fayl adlarını yadda saxlayın.

Sonda Fedora Live USB və ya digər cihazınızı yandırın və gcc kompilyatorunu quraşdırın və sonra qovluqdakı tərtib təlimatlarını istifadə edərək proqramı tərtib edin və işə salın.

Sonda Speaker və ya Flyback -dən mahnıları dinləyə biləcəksiniz.

Bu təlimatı oxuduğunuz üçün təşəkkür edirəm və xoşunuza gəlsə şərh yazın.

DİQQƏT, bu işin ikinci hissəsini daha asanlaşdırdı və işləmək üçün minimum çətinliklərə ehtiyacı var. İkinci hissəyə keçid (ən asan)

Tövsiyə: