Mündəricat:
- Addım 1: Digilent -in Zybo DMA Audio Demosunu əldə edin
- Addım 2: Vivadoda Bəzi Dəyişikliklər Edin
- Addım 3: FreeRTOS Running alın
- Addım 4: Lazer Arfa Kodu əlavə edin
- Addım 5: Kod haqqında
- Addım 6: Sensorların tellərinin bağlanması
- Addım 7: Skeletin qurulması
- Addım 8: Ağacın xarici hissəsinin qurulması
- Addım 9: Bütün parçaları bir yerə yığın
- Addım 10: ROCK OUT
Video: Zybo lövhəsində lazer arfa sintezatoru: 10 addım (şəkillərlə birlikdə)
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:48
Bu dərslikdə istifadəçinin alətin tonunu və tonunu dəyişdirməsinə imkan verən seriyalı interfeysi olan İQ sensorlarından istifadə edərək tam işlək bir lazer arfa yaradacağıq. Bu arfa 21 -ci əsrin ən qədim aləti olacaq. Sistem, Vivado Design Suites ilə birlikdə Xilinx Zybo inkişaf lövhəsi istifadə edərək yaradılmışdır. Layihəni tamamlamaq üçün sizə lazım olacaq:
- 12 IR sensoru və yayıcısı (simlərin sayından asılı olaraq az və ya çox istifadə edilə bilər)
- Zybo Zynq-7000 inkişaf lövhəsi
- Pulsuz RTOS
- Vivado Design Suite
- Tel (sensorları lövhəyə bağlamaq üçün)
- 3 ədəd PVC boru ((2) 18 düym və (1) 8 düym)
- 2 PVC dirsək
Addım 1: Digilent -in Zybo DMA Audio Demosunu əldə edin
Bu layihənin FPGA tərəfi əsasən burada olan demo layihəsinə əsaslanır. AXI Stream üzərindən I2S audio blokuna yaza biləcəyi məlumatları birbaşa yaddaşdan göndərmək üçün birbaşa yaddaş girişindən istifadə edir. Aşağıdakı addımlar DMA audio demo layihəsini işə salmağa kömək edəcək:
- Zybo board üçün lövhə faylının yeni bir versiyası lazım ola bilər. Vivado üçün yeni board faylları əldə etmək üçün bu təlimatları izləyin.
- Vivadoda demo layihəsini açmaq üçün bu səhifədəki təlimatlarda 1 və 2 addımları izləyin. SDK aparatının təhvil verilməsi deyil, Vivado metodundan istifadə edin.
- Bəzi ip bloklarınızın yenilənməsi lazım olduğunu bildirən bir mesaj ala bilərsiniz. Əgər belədirsə, "IP statusunu göstər" seçin və sonra IP statusu sekmesinde köhnəlmiş IP -ni seçin və "Seçilmişləri Təkmilləşdir" düyməsini basın. İş başa çatdıqda və bir məhsul çıxarmaq istəsəniz, bir pəncərə açılır, davam edin və "Yarat" düyməsini basın. Kritik bir xəbərdarlıq mesajı alsanız, bunu görməzdən gəlin.
- Mənbə fayllarını görmək üçün dizayndan Vivadodakı mənbələr sekmesine keçin. "Design_1" blok dizaynına sağ vurun və "HDL Sarıcı Yarat" seçin. İstənildikdə "istifadəçi düzəlişlərinə icazə vermək üçün yaradılan sarğıdan kopyalayın" seçin. Layihə üçün bir sarğı faylı yaradılacaq.
- İndi bir şəkildə digər dərslikdə buraxılan kritik addımlar tamamlandıqda, əvvəllər əlaqələndirilmiş dərsliyə qayıda və 4 -cü addımdan sona qədər davam edə və demo layihəsinin düzgün işlədiyinə əmin ola bilərsiniz. Səs yazmaq üçün səs daxil etmək üçün bir yolunuz yoxdursa, qulaqlıqlarınızla yazın və səsləndirmə düyməsini basdığınız zaman 5-10 saniyəlik qeyri-səlis bir səsi dinləyin. Çalma düyməsini basdığınız zaman qulaqlıq yuvasından bir şey çıxdığı müddətdə, yəqin ki, düzgün işləyir.
Addım 2: Vivadoda Bəzi Dəyişikliklər Edin
Beləliklə, indi Digilent -in DMA audio demosu işləyir, amma burada son məqsəd bu deyil. Vivadoya qayıtmalı və sensorlarımızı PMOD başlıqlarına qoşa bilməyimiz və proqram tərəfində dəyərlərindən istifadə etməyimiz üçün bəzi dəyişikliklər etməliyik.
- Vivadoda blok diaqramını açın
- Blok diaqramındakı boş yerə sağ tıklayaraq və menyudan "IP əlavə et" seçərək GPIO bloku yaradın. "AXI GPIO" tapın və seçin.
- Yeni IP blokunu iki dəfə vurun və yenidən qurun IP pəncərəsində IP konfiqurasiya sekmesine keçin. Bütün girişləri seçin və enini on iki olaraq təyin edin, çünki arfamızda 12 "ip" olacaq və buna görə də 12 sensora ehtiyacımız var. Daha az və ya daha çox sensordan istifadə etmək istəyirsinizsə, bu rəqəmi uyğun olaraq tənzimləyin. Həmçinin kəsilməni aktiv et.
- Yeni GPIO IP blokunu sağ vurun və "Bağlantı avtomatlaşdırmasını işə salın" seçin. AXI qutusunu yoxlayın və tamam vurun. Bu, AXI interfeysini avtomatik olaraq bağlamalıdır, ancaq blokun çıxışlarını əlaqəsiz qoymalıdır.
- Əlavə fasiləyə yer açmaq üçün xlconcat_0 IP blokuna iki dəfə vurun və liman sayını 4 -dən 5 -ə dəyişin. Sonra ip2intc_irpt pinini yeni GPIO blokundan xlconcat blokundakı yeni istifadə olunmamış porta qoşa bilərsiniz.
- Yeni GPIO IP blokunun "GPIO" çıxışını sağ vurun və "xarici etmək" seçin. Xəttin hara getdiyini tapın və kiçik yan beşbucağı vurun və solda bir ad dəyişə biləcəyiniz bir pəncərə açılmalıdır. Adı "SENSORS" olaraq dəyişdirin. Təmin etdiyimiz məhdudiyyətlər faylının işləməsini istəyirsinizsə, eyni adı istifadə etməyiniz vacibdir, əks halda məhdudiyyətlər sənədindəki adı dəyişdirməli olacaqsınız.
- Mənbələr sekmesine qayıdın, məhdudiyyətlər faylını tapın və təqdim etdiyimiz faylla əvəz edin. Ya faylı dəyişdirməyi, ya da məhdudiyyətlər faylımızın məzmununu kopyalayıb köhnənin məzmununa yapışdırmağı seçə bilərsiniz. Məhdudiyyətlər sənədimizin vacib işlərindən biri, PMOD başlıqlarında çəkmə rezistorlarını işə salmaqdır. Bu istifadə etdiyimiz xüsusi sensorlar üçün lazımdır, lakin bütün sensorlar eyni deyil. Sensorlarınız açılan rezistorlar tələb edirsə, "set_property PULLUP true" hər nümunəsini "set_property PULLDOWN true" ilə dəyişə bilərsiniz. Lövhədə göstəriləndən fərqli bir müqavimət dəyəri tələb olunarsa, bu xətləri silə və xarici rezistorlardan istifadə edə bilərsiniz. Pin adları məhdudiyyətlər sənədindəki şərhlərdədir və Zybo Şematikindəki ilk diaqramdakı etiketlərə uyğundur. səhifəni burada tapa bilərsiniz. Fərqli pmod pinlərindən istifadə etmək istəyirsinizsə, məhdudiyyət sənədindəki adları sxematik etiketlərə uyğunlaşdırın. PMOD başlığı JE və JD -dən istifadə edirik və hər birində 1 və 7 -ci pinləri buraxaraq altı məlumat pinindən istifadə edirik. Bu məlumatlar sensorlarınızı bağlayarkən vacibdir. Şemada göstərildiyi kimi, PMODS üzərindəki 6 və 12 -ci pinlər VCC, 5 və 11 -ci pinlər isə torpaqdır.
- HDL paketini əvvəlki kimi yenidən yaradın və köhnəsini kopyalayın və üzərinə yazın. İş bitdikdə, bit axını yaradın və əvvəlki kimi avadanlıq ixrac edin və SDK -nı yenidən başladın. Köhnə hardware faylını dəyişdirmək istəyib -istəmədiyinizi soruşsanız, cavab bəli. Yəqin ki, hardware ixrac edərkən SDK -nın bağlanması ən yaxşısıdır ki, düzgün şəkildə dəyişdirilsin.
- SDK -nı işə salın.
Addım 3: FreeRTOS Running alın
Növbəti addım FreeRTOS -un Zybo lövhəsində işləməsini təmin etməkdir.
- Hələ bir nüsxəniz yoxdursa, burada FreeRTOS -u yükləyin və faylları çıxarın.
- FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo -da yerləşən FreeRTOS Zynq demosunu idxal edin. İdxal prosesi digər demo layihəsi ilə demək olar ki, eynidır, lakin FreeRTOS Zynq demosu FreeRTOS qovluğundakı digər sənədlərə etibar etdiyindən, faylları iş sahəsinə kopyalamamalısınız. Bunun əvəzinə, bütün FreeRTOS qovluğunu layihə qovluğuna yerləşdirməlisiniz.
- "Fayl" -> "yeni" -> "lövhə dəstək paketi" nə gedərək yeni bir lövhə dəstək paketi yaradın. Bağımsız seçilmiş olduğundan əmin olun və bitirmə düyməsini basın. Bir an sonra bir pəncərə açılacaq, lwip141 -in yanındakı qutuyu yoxlayın (bu FreeRTOS demolarından birinin tərtib edilməməsini dayandırır) və OK düyməsini basın. Tamamlandıqdan sonra RTOSdemo layihəsinə sağ vurun və "xüsusiyyətlərə" gedin, "layihə istinadları" sekmesine keçin və yaratdığınız yeni bsp -in yanındakı qutuyu işarələyin. Ümid edirik ki, tanınacaq, amma bəzən Xilinx SDK bu cür şeylərdə qəribə ola bilər. Bu addımdan sonra hələ də xparameters.h -nin çatışmadığı bir səhv və ya buna bənzər bir şey alsanız, bu addımı təkrar etməyə çalışın və bəlkə də SDK -dan çıxıb yenidən başladın.
Addım 4: Lazer Arfa Kodu əlavə edin
İndi FreeRTOS idxal edildiyindən, faylları lazer arfa layihəsindən FreeRTOS demosuna gətirə bilərsiniz.
- FreeRTOS demosundakı src qovluğunun altında yeni bir qovluq yaradın və main.c istisna olmaqla bütün təmin edilmiş c fayllarını bu qovluğa kopyalayıb yapışdırın.
- RTOSDemo main.c -ni verilən main.c. ilə əvəz edin.
- Hər şey düzgün aparılırsa, bu anda lazer arfa kodunu işə salmalısınız. Test məqsədləri üçün, DMA demo layihəsində istifadə olunan düymə girişi, sensorlar əlavə edilmədən səsləri səsləndirmək üçün istifadə olunur (dörd əsas düymədən hər hansı biri işləyəcək). Hər dəfə basdığınız zaman bir simli oynayacaq və birdən çox basaraq sistemdəki bütün telləri gəzəcək. Bəzi qulaqlıqları və ya dinamikləri Zybo lövhəsindəki qulaqlıq yuvasına qoşun və düyməni basdığınız zaman gələn tellərin səslərini eşitdiyinizə əmin olun.
Addım 5: Kod haqqında
Bu təlimatı oxuyan bir çoxlarınız, ehtimal ki, fərqli bir şey etmək və ya fərqli bir musiqi aləti yaratmaq üçün audio qurmağı və ya DMA -dan istifadə etməyi öyrənmək üçün buradasınız. Bu səbəbdən, sonrakı bir neçə hissə, DMA istifadə edərək işləyən bir səs çıxışı əldə etmək üçün əvvəllər təsvir olunan aparatla birlikdə necə işlədiyini izah etməyə həsr edilmişdir. Kod parçalarının niyə orada olduğunu başa düşsəniz, onları yaratmaq istədiyiniz hər şeyə uyğunlaşdıra bilməlisiniz.
Fasilələr
Əvvəlcə bu layihədə fasilələrin necə yaradıldığını qeyd edəcəyəm. Bunu etmə üsulumuz, əvvəlcə kimliyi, kəsmə işləyicisini və hər bir kəsmə üçün cihaza istinadı izləyən bir kəsmə vektor cədvəli quruluşu yaratmaq idi. Kəsmə identifikatorları xparameters.h -dən gəlir. Kəsmə işçisi, DMA və GPIO üçün yazdığımız bir funksiyadır və I2C kəsilməsi Xlic I2C sürücüsündən gəlir. Cihaz istinadı, başqa bir yerdə başladığımız hər bir cihazın nümunələrini göstərir. _İnit_audio funksiyasının sonuna yaxın fasilə vektor cədvəlindəki hər bir elementdən bir döngə keçir və fasilələri birləşdirmək və aktivləşdirmək üçün XScuGic_Connect () və XScuGic_Enable () funksiyalarını çağırır. Varsayılan olaraq FreeRTOS main.c -də yaradılan bir kəsmə nəzarətçisi olan xInterruptController -ə istinad edirlər. Beləliklə, hər kəsilməmizi artıq FreeRTOS tərəfindən bizim üçün yaradılmış bu kəsmə nəzarətçisinə bağlayırıq.
DMA
DMA başlatma kodu lh_main.c -də başlayır. Əvvəlcə bir XAxiDma quruluşunun statik nümunəsi elan edilir. Sonra _init_audio () funksiyasında konfiqurasiya olunur. Əvvəlcə demo layihəsindən konfiqurasiya funksiyası dma.c. -də olan adlanır. Bu olduqca yaxşı sənədləşdirilmişdir və birbaşa demodan gəlir. Sonra fasilə bağlanır və işə düşür. Bu layihə üçün bütün məlumatlar DMA tərəfindən I2S nəzarətçisinə göndərildiyindən yalnız master-to-slave kəsilməsi tələb olunur. Səs yazmaq istəyirsinizsə, kölə-usta fasiləsinə də ehtiyacınız olacaq. DMA-nın göndərmək üçün dediyiniz hər hansı bir məlumatı göndərməsini bitirdikdən sonra ustadan qula müdaxilə çağırılır. Bu fasilə layihəmiz üçün olduqca vacibdir, çünki DMA hər dəfə bir səs nümunəsi tamponunu göndərməyi bitirdikdə dərhal növbəti tamponu göndərməyə başlamalıdır, əks halda göndərmələr arasında səsli bir gecikmə baş verə bilər. Dma_mm2s_ISR () funksiyasının içərisində fasiləni necə idarə etdiyimizi görə bilərsiniz. _Audio_task () a növbəti DMA köçürməsini başlata biləcəyini bildirmək üçün xSemaphoreGiveFromISR () və portYIELD_FROM_ISR () istifadə etdiyimiz vacib hissə sona yaxındır. Daimi səs məlumatlarını göndərmə üsulumuz iki tampon arasında dəyişməkdir. Bir tampon I2C blokuna ötürüldükdə, digər tamponun dəyərləri hesablanır və saxlanılır. Sonra kəsmə DMA -dan gəldikdə, aktiv tampon dəyişir və daha əvvəl yazılmış tampon köçürülməyə başlayır, əvvəllər köçürülmüş tampon isə yeni məlumatlarla yazılmağa başlayır. _Audio_task funksiyasının əsas hissəsi fnAudioPlay () -ın çağırıldığı yerdir. fnAudioPlay (), DMA nümunəsini, tamponun uzunluğunu və məlumatların ötürüləcəyi tampona bir işarəçini alır. Daha çox nümunənin gəldiyini bildirmək üçün I2S qeydlərinə bir neçə dəyər göndərilir. Sonra XAxiDma_SimpleTransfer () köçürməyə başlamaq üçün çağırılır.
I2S Audio
audio.c və audio.h, I2S inisializasiyasının baş verdiyi yerdir. I2S başlatma kodu, bir çox yerdə dolaşan olduqca geniş yayılmış bir kod parçasıdır, digər mənbələrdən kiçik dəyişikliklər tapa bilərsiniz, amma bu işləməlidir. Çox yaxşı sənədləşdirilmişdir və arfa layihəsi üçün dəyişdirilməyə çox ehtiyac yoxdur. Gəldiyi DMA audio demosu, mikrofon və ya xətt girişlərinə keçmək üçün funksiyalara malikdir, buna görə də bu funksiyaya ehtiyacınız varsa istifadə edə bilərsiniz.
Səs sintezi
Səs sintezinin necə işlədiyini izah etmək üçün, son üsula səbəb olan inkişafda istifadə olunan hər bir səs modelini sadalayacağam, çünki bunun necə edildiyini belə başa düşəcəksiniz.
Metod 1: Sinus dəyərlərinin bir dövrü, hər bir simli üçün həmin simliğin notasına uyğun tezlikdə hesablanır və bir sıra olaraq saxlanılır. Məsələn, serialın uzunluğu nümunələrdəki # sinus dalğasının dövrü olacaq, bu da # nümunə / dövrə bərabərdir. Nümunə götürmə sürəti 48kHz və qeyd tezliyi 100Hz olarsa, hər dövrdə 4800 nümunəyə aparan 48.000 nümunə/saniyə və 100 dövr/saniyə var və sıra uzunluğu 4800 nümunə olacaq və bir tam dəyərləri ehtiva edəcək sinus dalğası dövrü. Simli çalındıqda, səs nümunəsi tamponu sinus dalğası massivindən bir dəyər alaraq və nümunə olaraq səs tamponuna qoyaraq doldurulur, sonra indeksi sinus dalğası massivinə artıraraq əvvəlki nümunəmizi kurs boyunca istifadə edirik. 4800 nümunədən bir sinus dalğa dövrəsi səs tamponuna qoyulur. Bir modulo əməliyyatı, dizin indeksində həmişə 0 ilə uzunluq arasında düşməsi üçün istifadə olunur və dizin indeksi müəyyən bir eşikdən (məsələn, 2 saniyə dəyərində nümunələr) keçdikdə simli söndürülür. Eyni anda birdən çox simli oynamaq üçün, hər bir sətrin dizi indeksini ayrıca izləyin və hər bir nümunəni əldə etmək üçün hər bir sətrin sinus dalğasının dəyərini əlavə edin.
Metod 2: Daha musiqili bir ton yaratmaq üçün əvvəlki modeldən başlayırıq və hər bir əsas tezliyə harmoniklər əlavə edirik. Harmonik tezliklər, əsas tezliyin tam ədədləri olan tezliklərdir. Bir -biri ilə əlaqəli olmayan iki tezliyin eyni vaxtda səslənməsindən fərqli olaraq, harmoniklər əlavə edildikdə yalnız bir səs kimi səslənməyə davam edir, lakin fərqli bir ton. Bunu etmək üçün hər dəfə sinus dalğasının dəyərini (serial indeksi % dizi uzunluğu) səs nümunəsinə əlavə etdikdə (2 * sıra indeksi % dizi uzunluğu) və (3 * sıra indeksi % sıra uzunluğu) əlavə edirik.) və sair bir çox harmoniklərin istənilməsi üçün. Bu vurulan indekslər sinus dalğasını orijinal tezliyin tam ədədləri olan tezliklərdə keçəcəkdir. Tonun daha çox idarə olunmasına imkan vermək üçün hər harmonikin dəyərləri ümumi səsdəki o harmonikin miqdarını əks etdirən bir dəyişənlə vurulur. Məsələn, əsas sinus dalğasının ümumi səsdə daha çox faktor olması üçün bütün dəyərləri 6 ilə çarpıla bilər, 5 -ci harmonik 1 -in çarpanına sahib ola bilər, yəni dəyərləri ümumi səsə daha az qatqı təmin edir.
Metod 3: Yaxşı, indi notlarda çox gözəl tonumuz var, amma yenə də olduqca vacib bir problem var: sabit bir müddət ərzində sabit bir həcmdə oynayırlar. Əsl alət kimi səsləndirmək üçün çalınan telin həcmi zamanla hamar bir şəkildə pozulmalıdır. Bunu həyata keçirmək üçün bir sıra eksponent olaraq çürüyən funksiyanın dəyərləri ilə doldurulur. İndi səs nümunələri yaradılarkən hər bir sətirdən gələn səs əvvəlki metodda olduğu kimi hesablanır, lakin səs nümunəsinə əlavə edilməzdən əvvəl eksponent tənəzzül funksiyası sırasındakı sətirlərin dizinindəki dəyərlə vurulur. Bu zamanla səsin hamar bir şəkildə dağılmasını təmin edir. Dizin indeksi çürümə dizisinin sonuna çatdıqda, simli dayandırılır.
Metod 4: Bu son addım, simli səslərə real simli səslərini verən şeydir. Xoş səslənməzdən əvvəl, lakin aydın şəkildə sintez edilmişdir. Həqiqi bir dünya arfa simini daha yaxşı təqlid etməyə çalışmaq üçün hər bir harmonikə fərqli bir çürümə dərəcəsi verilir. Həqiqi sətirlərdə, sim ilk dəfə vurulduqda, bir simdən gözlədiyimiz bir kəsmə səsi yaradan yüksək tezlikli harmoniklərin yüksək tərkibi var. Bu yüksək tezlikli harmoniklər qısaca olaraq səsin əsas hissəsidir, vurulan telin səsi, lakin daha yavaş harmoniklər ələ keçirildikcə çox tez çürüyür. Səs sintezində istifadə olunan hər bir harmonik ədəd üçün hər birinin öz çürümə sürəti ilə bir çürümə sırası yaradılır. İndi hər bir harmonik müstəqil olaraq sətrin dizin indeksindəki uyğun çürümə massivinin dəyəri ilə vurula və səyə əlavə edilə bilər.
Ümumiyyətlə, səs sintezi intuitivdir, lakin hesablama ağırdır. Bütün simli səsi bir anda yaddaşda saxlamaq çox yaddaşa ehtiyac olardı, ancaq sinus dalğasının və hər kadr arasındakı eksponent funksiyanın hesablanması, səsin oxunma sürətinə uyğun gəlmək üçün çox uzun çəkərdi. Hesablamanı sürətləndirmək üçün kodda bir sıra fəndlərdən istifadə olunur. Sinus və eksponensial çürümə cədvəllərinin ilkin yaradılmasından başqa bütün riyaziyyat tam ədəd formatında aparılır ki, bu da 24 bitlik səs çıxışında mövcud olan ədədi boşluğun yayılmasını tələb edir. Məsələn, sinus cədvəli 150 amplitudundadır, belə ki, hamardır, lakin o qədər də böyük deyil ki, bir çox simlər birlikdə çalınsın və 24 bitdən çox olsun. Eyni şəkildə, eksponensial cədvəl dəyərləri tam ədədlərə yuvarlanmadan və saxlanmadan əvvəl 80 -ə vurulur. Harmonik çəkilər 0 ilə 10 arasında ayrı -ayrı dəyərlər götürə bilər. Həmçinin bütün nümunələr əslində ikiqat artırılır və sinus dalğaları 2 ilə indekslənir, bu da nümunə götürmə sürətini yarı yarıya azaldır. Bu, səslənə biləcək maksimum tezliyi məhdudlaşdırır, lakin mövcud tellərin və harmoniklərin kifayət qədər tez hesablanması üçün lazım idi.
Bu səs modelini yaratmaq və işə salmaq prosessor tərəfində xeyli zəhmət tələb edirdi və bu layihənin müddətində fpga tərəfində sıfırdan işləməsi inanılmaz dərəcədə çətin olardı (bit axını hər dəfə yenidən yaratmağı düşünün səsi yoxlamaq üçün bir verilog parçası dəyişdirildikdə). Bununla birlikdə, fpga -da bunu etmək, ehtimal ki, nümunələri kifayət qədər tez hesablaya bilməmək və daha çox sim, harmonik və hətta səs effektləri və ya digər vəzifələrin işə salınmasına imkan verməmək problemini aradan qaldırmaq üçün daha yaxşı bir yol ola bilər. prosessor tərəfi.
Addım 6: Sensorların tellərinin bağlanması
Sətirlər yaratmaq üçün, simin çalındığını aşkar edəcək IR şüa sensorlarından istifadə etdik. Sensorlarımızı aşağıdakı linkdən sifariş etdik. Sensorlarda güc, topraklama və məlumat teli var, yayıcılarda isə yalnız güc və torpaq teli var. Həm yayıcıları, həm də sensorları gücləndirmək üçün PMOD başlıqlarından 3.3 V və torpaq pinlərindən istifadə etdik. Bütün sensorlar və yayıcıları gücləndirmək üçün bütün sensorlar və yayıcıları paralel olaraq bağlamaq lazımdır. Sensorlardan gələn məlumat tellərinin hər birinin öz pmod pininə getməsi lazımdır.
Addım 7: Skeletin qurulması
Arfa şəklini yaratmaq üçün üç parça sensorlar və yayıcıları yerləşdirmək üçün bir skelet kimi istifadə olunur. İki 18 düymlük PVC borudan birində sensorlar və yayıcılar bir -birindən 1,5 düym ardıcıl olaraq düzülür və sonra boruya yapışdırılır. Digər 18 düymlük PVC borularda sensorlar və emitentlər növbələndirilmiş qaydada düzülür, lakin sifarişi ofset etməyinizə əmin olun (yəni birinci borunun əvvəlcə sensoru olsaydı, ikincisinin əvvəlcə bir emitenti olmalı və ya əksinə). Lövhəyə çatacaqlarını təmin etmək üçün məlumatlara, gücə və torpaq tellərinə daha uzun telləri lehimləmək lazım olacaq.
Addım 8: Ağacın xarici hissəsinin qurulması
Bu addım isteğe bağlıdır, lakin çox tövsiyə olunur. Ağacın xarici görünüşü nəinki arfa gözəl görünür, həm də sensorları və telləri zədələnmədən qoruyur. Taxta çərçivə ağacdan düzbucaqlı bir halqa ilə yaradıla bilər. Düzbucağın içərisində boru və sensor skeletinə uyğunlaşmaq üçün ən az 1-1/2 düymlük bir açılış olmalıdır. Çərçivə qurulduqdan sonra, lövhəyə qoşulmaq üçün sensordan gələn telləri buraxan və buraxan iki delik qazın.
*Qeyd: Təmir edilməli və ya kiçik düzəlişlər edilməli olduğu təqdirdə boru skeletini çıxarmaq və daxil etmək üçün giriş nöqtələrinin əlavə edilməsi tövsiyə olunur.
Addım 9: Bütün parçaları bir yerə yığın
Bütün əvvəlki addımlar bitdikdən sonra arfa qurmaq vaxtıdır. Əvvəlcə boru skeletini taxta xarici hissəyə yerləşdirin. Sonra sensorlar və yayıcılar üçün telləri lövhədə düzgün yerə bağlayın. Sonra SDK -nı açın və lövhəni proqramlaşdırmaq üçün debug düyməsini basın. Lövhə proqramlaşdırıldıqdan sonra bir cüt qulaqlıq və ya dinamikə qoşun. Hansı sensorun hansı pmod limanında bitəcəyindən asılı olaraq, arfa ipləriniz yəqin ki, sıradan çıxacaq. Bu qədər tel iştirak edərkən hansı telin hansı sensora getdiyini söyləmək çətin ola biləcəyi üçün proqramdakı bit mövqelərini kəsmək üçün simli nömrələri xəritələşdirməyin bir yolunu daxil etdik. "Static int sensor_map [NUM_STRINGS]" tapın və sətirlər sıradan aşağıdan yuxarıya qədər oynanana qədər serialdakı dəyərləri tənzimləyin.
Menyu, seriyalı bir terminal açaraq (məsələn, RealTerm) istifadə edilə bilər və baud sürətini 115200, ekranı isə ANSI olaraq təyin edə bilərsiniz. Menyuya yuxarı və aşağı hərəkət etmək üçün w və s düymələri və dəyərləri dəyişdirmək üçün a və d düymələri ilə getmək olar.
Addım 10: ROCK OUT
Arfa tam işlək vəziyyətə gəldikdən sonra. Arfa ustası olun və öz musiqinizin şirin səsinə qulaq asın!
Tövsiyə:
MakeyMakey və Scratch ilə Su Sintezatoru: 6 Addım (Şəkillərlə)
MakeyMakey və Scratch ilə Su Sintezatoru: Müxtəlif materialları açarlara və ya düymələrə çevirmək və beləliklə kompüterdə hərəkətləri və ya səsləri tetiklemek üçün MakeyMakey -dən istifadə etmək maraqlı bir işdir. Hansı materialın zəif cərəyan impulsunu keçirdiyini öyrənir və onu icad edə və təcrübə edə bilərəm
Dörd Dinamik Sintezatoru: 10 Addım (Şəkillərlə birlikdə)
Dörd Hoparlör Sintezatoru: Burada olan sadə bir sintezator var: 22 düym həcmi nəzarət tonu fərqli səs effektləri dəyişən (dinamiklər üçün) dörd dinamik (işiqçilər üçün) Hər kəs onu qura bilər, elektron komponentlər istisna olmaqla, hər şeyi evdə tapa bilərsiniz
Arduino sintezatoru: 20 addım (şəkillərlə birlikdə)
Arduino Sintezatoru: Arduino, Səs Kitabxanası adlanan kitabxana vasitəsilə səs çıxara bilir. Arduino Synthesizer, müəyyən dəyərləri səs çıxarmağa çağıra biləcək bir interfeys və bir proqram yaratmaqla güclü bir vasitədir
Micro Midi sintezatoru: 5 addım (şəkillərlə birlikdə)
Micro Midi Sintezatoru: Bu təlimat, VLSI VS1053b Audio və Midi DSP çipinin real vaxt Midi rejimində istifadəsini nümayiş etdirir. Bu rejimdə 64 səsli polifonik GM (General Midi) Midi sintezatoru kimi çıxış edir. Bir Arduino Uno müstəqil mikro OLED ekranı idarə edir
Çörək lövhəsində müstəqil Arduino / ATMega çipi: 8 addım (şəkillərlə)
Breadboard -da Bağımsız Arduino / ATMega Çipi: Əgər mənim kimiyəmsə, Arduino -nu aldıqdan və ilk çipimdə son bir proqram qurduqdan sonra Arduino Duemilanove -dan çıxarıb öz dövrəmə qoymaq istədim. Bu da gələcək layihələr üçün Arduinomu azad edəcək. Problem