Mündəricat:
- Addım 1: Tələb olunan komponentlər
- Addım 2: Texniki Xüsusiyyətlər
- Addım 3: Dövrə Diaqramları
- Addım 4: Lazımi Tətbiqlər və IDE -lər
- Addım 5: Hər şey üçün müvafiq kodlar
- Addım 6: Quraşdırma
- Addım 7: Nəticələr/Videolar
Video: MIDI Dönüştürücüsünə Real Zamanlı Audio: 7 Addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:45
Namuslu insanlar! Bu, bakalavr proqramımdakı kurslardan birində (Real-Time Digital Signal Processing) işlədiyim bir layihədir. Layihə, audio məlumatları "dinləyən" və UART üzərindən müvafiq qeydlərin MIDI mesajlarını verən bir DSP sistemi yaratmağı hədəfləyir. Bu məqsədlə Arduino Nano istifadə edildi. Uzun sözün qısası, mikro nəzarətçi gələn səs məlumatları üzərində FFT edir və zirvələri bir qədər analiz edir və uyğun MIDI mesajı göndərir. MOSFET -lərdən narahat olmayın, çünki onlar başqa bir layihə üçündür (daha sonra təlimatlarda da göstəriləcək) və bu layihə üçün tələb olunmur. Beləliklə, artıq başlayaq !!
Addım 1: Tələb olunan komponentlər
Bu layihəni qurmaq üçün aşağıdakı komponentlərə ehtiyacımız olacaq, baxmayaraq ki, bunların çoxu ümumi və ekvivalentləri ilə əvəz edilə bilər. Daha yaxşı tətbiqlər üçün işləmək və ovlamaq üçün dövrə diaqramına baxın.
Komponent miqdarı
1. Elektret Mikrofonu. 1
2. 30 Kilo Ohm müqavimət. 1
3. 150 Kilo Ohm müqavimət. 1
4. 100 ohm müqavimət. 1
5. 2.2 Kilo Ohm rezistorlar. 3
6. 10 Kilo Ohm qabaqcadan hazırlanmış qab. 1
7. 10 Kilo Ohm kəsmə qabı. 1
8. 47 Kilo Ohm stereo qazan. 1
9. 470 Ohm rezistorlar. 2
10. 0.01uF kondansatörler. 2
11. 2.2 uF kondansatörler. 3
12. 47 uF kondansatörler. 2
13. 1000 uF kondansatör. 1
14. 470 uF kondansatör. 1
15. 7805 gərginlik tənzimləyicisi. 1
16. Qadın və Kişi başlıq zolağı. Hər biri 1
17. Barrel Jack konnektoru. 1
18. 12 V 1 Amp DC Adapter. 1
19. SPST açarı. (İsteğe bağlı) 1
20. Perfboard. 1
Addım 2: Texniki Xüsusiyyətlər
Nümunə alma tezliyi: 3840 nümunə/san
FFT başına nümunə sayı: 256
Tezlik Çözünürlüğü: 15Hz
Yeniləmə dərəcəsi: təxminən 15 Hz
Musiqi notlarının aşağı və yuxarı ölçüləri düzgün çəkilmir. Aşağı notlar aşağı tezlik qətnaməsindən əziyyət çəkir, daha yüksək tezliklər isə aşağı seçmə nisbətlərindən əziyyət çəkirlər. Arduino artıq yaddaşda deyil, buna görə daha yaxşı bir həll əldə etmək üçün bir yol yoxdur. Və daha yaxşı bir həll, yeniləmə sürətinin azalması ilə nəticələnəcək, belə ki, ticarət qaçılmazdır. Heisenberqin qeyri -müəyyənlik prinsipinin Layman versiyası.
Əsas çətinlik notlar arasındakı eksponensial boşluqdur (Şəkildə göründüyü kimi. Tezlik oxundakı hər impuls musiqi notudur). LFT kimi alqoritmlər kömək edə bilər, amma bu, arduino Nano kimi bir cihaz üçün bir az inkişaf etmiş və bir az mürəkkəbdir.
Addım 3: Dövrə Diaqramları
Qeyd: Şəkillərdəki üç MOSFET və vida terminalları sizi narahat etməsin. Bu layihə üçün onlara ehtiyac yoxdur. Diqqət yetirin ki, mikrofon giriş lövhəsi sökülə bilər və ya modul adlandırırlar. Müxtəlif blokların kiçik bir təsviri aşağıda verilmişdir.
1) İki 470 ohm rezistor, stereo səs siqnalını mono səs siqnalına birləşdirir. Daxil olan siqnalın zəminin dövrə torpağına deyil, virtual yerə (dövrə diaqramında vg) getdiyinə əmin olun.
2) Növbəti blok, kənarlaşdırılmaması üçün giriş siqnalını məhdudlaşdırmaqdan məsul olan 2-ci dərəcəli sallen-key aşağı keçid filtridir. Yalnız +12v təchizatı ilə işlədiyimiz üçün, bir RC gərginlik bölücü edərək, op-amp-ə meyl edirik. v -nin op amp üçün əsas istinad olduğu təchizatın 6 0 -6 voltluq bir təchizat (ikili dəmir yolu) olduğunu düşünməklə op -ampu aldadır.
3) Sonra çıxış 6 voltluq DC ofsetini maneə törətmək üçün süzülür və təxminən 0.55 volt DC ilə birləşdirilir, çünki ADC Vref kimi daxili 1.1 v istifadə etmək üçün konfiqurasiya ediləcək.
Qeyd: Elektret mikrofonu üçün ön gücləndirici internetdəki ən yaxşı sxem deyil. Op-amp ilə əlaqəli bir dövrə daha yaxşı bir seçim olardı. Tezlik reaksiyasının mümkün qədər düz olmasını istəyirik. 47 kilo ohm stereo qazan, nümunə götürmə tezliyinin yarısı qədər olan kəsmə tezliyini təyin etmək üçün istifadə olunur. 10 kilo ohm əvvəlcədən təyin edilmiş (ağ başlı kiçik qazan) filtrin qazancını və Q dəyərini tənzimləmək üçün istifadə olunur. Gərginliyi Vref -in yarısına yaxınlaşdırmaq üçün 10 kilo ohm kəsmə qabı (kiçik bir düz başlı vint kimi görünən metal tənzimləmə düyməsi olan) istifadə olunur.
Qeyd: Nanonu PC -yə bağladığınız zaman. SPST açarını açıq saxlayın, əks halda bağlı saxlayın. Bunun edilməməsinə xüsusi diqqət yetirin, dövrə/kompüterə/gərginlik tənzimləyicisinə və ya yuxarıda göstərilən hər hansı bir birləşməyə zərər verə bilər
Addım 4: Lazımi Tətbiqlər və IDE -lər
- Arduino Nanonun kodlaşdırılması üçün ibtidai AVR studio 5.1 ilə getdim, çünki mənim üçün işləyir. Yükləyicini burada tapa bilərsiniz.
- Arduino Nanonun proqramlaşdırılması üçün Xloader istifadə etdim. Hex faylları Arduinos -a yazmaq üçün yüngül alətdən istifadə etmək çox asandır. Burada əldə edə bilərsiniz.
- Kiçik bir bonus layihəsi və dövrəni tənzimləmək üçün emaldan istifadə etdim. Hər düzəlişdə böyük dəyişikliklər olsa da, eskizin işləməsi üçün köhnəlmiş funksiyalarla əyləşməli ola bilərsiniz.
- FL studio və ya hər hansı digər MIDI emal proqramı. FL studio məhdud giriş versiyasını buradan pulsuz əldə edə bilərsiniz.
- Loop MIDI, virtual bir MIDI portu yaradır və FL studio tərəfindən sanki bir MIDI cihazı kimi aşkar edilir. Buradan eyni nüsxəni alın.
- Tüksüz MIDI, COM portundan MIDI mesajlarını oxumaq və MIDI limanına döngə göndərmək üçün istifadə olunur. Həm də MIDI mesajlarını real vaxt rejimində düzəldir, bu da ayıklamayı rahat edir. Buradan Tüksüz MIDI alın.
Addım 5: Hər şey üçün müvafiq kodlar
Bu layihədə istifadə etdiyim sabit nöqtə FFT kitabxanası üçün Electronic Lifes MFG -yə (Burada Veb səhifə !!) təşəkkür etmək istəyirəm. Kitabxana mega AVR ailəsi üçün optimallaşdırılmışdır. Bu, istifadə etdiyi kitabxana sənədlərinə və kodlarına keçiddir. Kodumu aşağıda əlavə edirəm. İşləmə eskizini və AVR C kodunu da əhatə edir. Unutmayın ki, bu mənim üçün işləyən konfiqurasiyadır və bu kodlara görə hər hansı bir şeyə zərər verdiyiniz təqdirdə heç bir məsuliyyət daşımıram. Ayrıca, kodu işləməyə çalışarkən bir çox problemim oldu. Məsələn, DDRD (Data Direction Register), adi DDRDx (x = 0-7) yerinə bit maskaları olaraq DDDx (x = 0-7) malikdir. Tərtib edərkən bu səhvlərə diqqət yetirin. Mikro nəzarətçini dəyişdirmək də bu tərifləri təsir edir, buna görə də tərtib səhvləri ilə məşğul olarkən buna da diqqət yetirin. Layihə qovluğunun niyə DDT_Arduino_328p.rar adlandırıldığını düşünürsünüzsə, deyək ki, başladığım axşam çox qaranlıq idi və işığı yandırmamaq üçün tənbəl idim.: P.
İşləmə eskizinə gəlincə, bu eskizi yazmaq üçün 3.3.6 emalından istifadə etdim. Eskizdə COM port nömrəsini əl ilə təyin etməlisiniz. Koddakı şərhləri yoxlaya bilərsiniz.
Kimsə kodları Arduino IDE -yə və son emal versiyasına köçürməyimə kömək edə bilərsə, məmnun olaram və inkişaf etdiricilərə / töhfə verənlərə də kredit verərəm.
Addım 6: Quraşdırma
- Kodu açın və #define pcvisual şərh edilməmiş və #define midi_out şərhləri ilə kodu tərtib edin.
- Xloader -i açın və kodu olan qovluğa baxın,.hex faylına baxın və uyğun lövhə və COM portunu seçərək nanoya yandırın.
- İşləmə eskizini açın və uyğun COM port indeksi ilə işləyin. Hər şey yaxşı gedirsə, A0 pinindəki bir siqnal spektrini görə bilməlisiniz.
- Bir tornavida alın və spektr düz olana qədər trimmer qazanı döndərin (DC komponenti sıfıra yaxın olmalıdır). O zaman lövhəyə heç bir siqnal daxil etməyin. (Mikrofon modulunu bağlamayın).
- İndi mikro-telefondan lövhəyə giriş vermək və spektri müşahidə etmək üçün bu kimi hər hansı bir süpürmə generatoru vasitəsindən istifadə edin.
- Əgər tezliklərin silinməsini görmürsənsə, 47 kilo ohm müqavimətini dəyişdirərək kəsmə tezliyini azaldın. 10 kilo ohm əvvəlcədən qurulmuş qazan istifadə edərək qazancı da artırın. Bu parametrləri dəyişdirərək düz və görkəmli bir tarama çıxışı əldə etməyə çalışın. Bu əyləncəli hissədir (kiçik bonus!), Sevdiyiniz mahnıları səsləndirin və onların real vaxt spektrindən zövq alın. (Videoya baxın)
- İndi bu dəfə #define pcvisual şərhli və #define midi_out şərh olunmamış olaraq yenidən C kodunu tərtib edin.
- Yeni tərtib edilmiş kodu arduino Nano'ya yenidən yükləyin.
- LoopMidi açın və yeni bir liman yaradın.
- FL studio və ya digər MIDI interfeys proqramını açın və MIDI port parametrlərində loop midi portunun göründüyündən əmin olun.
- Arduino ilə əlaqəli açıq tüksüz MIDI. LoopMidi portu olmaq üçün çıxış limanını seçin. Ayarlara gedin və Baud sürətini 115200 olaraq təyin edin. İndi Arduino Nanoya uyğun COM portunu seçin və portu açın.
- Mikrofonun yanında bir neçə "saf" ton çalın və MIDI proqramında müvafiq notu da eşitməlisiniz. Cavab yoxdursa, C kodunda təyin olunan up_thresholdu aşağı salmağa çalışın. Qeydlər təsadüfi olaraq işə salınırsa, yuxarı həddi artırın.
- Pianonuzu alın və sisteminizin nə qədər sürətli olduğunu sınayın! Ən yaxşı şey, qızıl rəngli notlar zonasında eyni anda birdən çox düymə basmağı asanlıqla aşkar edə bilməsidir.
Qeyd: COM portuna bir tətbiq tərəfindən daxil olduqda başqa bir proqram tərəfindən oxuna bilməz. Məsələn, Hairless MIDI COM portunu oxusa, Xloader lövhəni yandıra bilməz
Addım 7: Nəticələr/Videolar
Hələlik uşaqlar budur! Ümid edirəm bəyənərsən. Layihədə hər hansı bir təklif və ya irəliləyişiniz varsa, şərh bölməsində mənə bildirin. Sülh!
Tövsiyə:
Buck/Boost Dönüştürücüsünə Mövcud Limit Xüsusiyyətinin Əlavə edilməsi: 4 Addım (Şəkillərlə)
Buck/Boost Dönüştürücüsünə Cari Limit Xüsusiyyətinin Əlavə edilməsi: Bu layihədə ümumi bir dollar/təkan çeviricisini yaxından nəzərdən keçirəcəyik və ona cari limit xüsusiyyəti əlavə edən kiçik, əlavə bir dövrə yaradacağıq. Bununla, buck/boost çeviricisi, dəyişkən bir laboratoriya tezgahı enerji təchizatı kimi istifadə edilə bilər. Le
EM Ayaq izlərindən istifadə edərək Real Zamanlı Cihaz Tanıma: 6 addım
EM Ayaq İzi istifadə edərək Cihazı Tanıma: Bu cihaz fərqli elektron cihazları EM siqnallarına görə təsnif etmək üçün nəzərdə tutulmuşdur. Fərqli cihazlar üçün fərqli EM siqnalları yayılır. Particle istifadə edərək elektron cihazları müəyyən etmək üçün bir IoT həlli hazırladıq
DC Buck Dönüştürücüsünə 97% Effektiv DC [3A, Ayarlanabilir]: 12 Addım
DC Buck Dönüştürücüsünə 97% Effektiv DC [3A, Ayarlanabilir]: Kiçik bir DC -dən DC -ə qədər olan konvertor lövhəsi, xüsusilə 3A -ya qədər (2A davamlı olaraq soyuducu olmadan) cərəyanlar verə biləcəyi təqdirdə bir çox tətbiq üçün faydalıdır. Bu yazıda kiçik, səmərəli və ucuz bir dollar çevirici dövrə qurmağı öyrənəcəyik. [
Arduino ilə DS1307 və DS3231 Real Zamanlı Saat Modullarından istifadə: 3 addım
Arduino ilə DS1307 və DS3231 Real Zamanlı Saat Modullarından istifadə: Arduino ilə DS1307 və DS3231 real vaxt modullarının necə istifadə ediləcəyi ilə bağlı müxtəlif mənbələrdən sorğular almağa davam edirik-buna görə də onlardan istifadə qaydaları iki hissədən ibarətdir. Bu Arduino dərsliyi üçün bizə iki real vaxt saat modulu var
DS1307 Arduino ilə Real Zamanlı Saat RTC: 4 addım
DS1307 Arduino ilə Real Time CTC RTC: Bu Dərslikdə Real Time Clock (RTC) və Arduino & Real vaxt saatı IC DS1307 bir zamanlama cihazı olaraq bir araya gətirilir.Real Time Clock (RTC) vaxtı izləmək və təqvimi saxlamaq üçün istifadə olunur. RTC istifadə etmək üçün