Turinys:

Lazerinis arfos sintezatorius „Zybo“lentoje: 10 žingsnių (su nuotraukomis)
Lazerinis arfos sintezatorius „Zybo“lentoje: 10 žingsnių (su nuotraukomis)

Video: Lazerinis arfos sintezatorius „Zybo“lentoje: 10 žingsnių (su nuotraukomis)

Video: Lazerinis arfos sintezatorius „Zybo“lentoje: 10 žingsnių (su nuotraukomis)
Video: Prosound Crystal Ball Review 2024, Liepa
Anonim
Lazerinis arfos sintezatorius „Zybo“lentoje
Lazerinis arfos sintezatorius „Zybo“lentoje

Šioje pamokoje mes sukursime visiškai veikiančią lazerinę arfą, naudojant IR jutiklius su nuosekliąja sąsaja, kuri leis vartotojui pakeisti instrumento derinimą ir toną. Ši arfa bus XXI amžiaus seno instrumento perdirbinys. Sistema buvo sukurta naudojant „Xilinx Zybo“kūrimo plokštę kartu su „Vivado Design Suites“. Ko jums reikės norint užbaigti projektą:

  • 12 IR jutiklių ir skleidėjų (gali būti naudojami daugiau ar mažiau, priklausomai nuo eilučių skaičiaus)
  • „Zybo Zynq-7000“kūrimo lenta
  • Nemokama RTOS
  • „Vivado“dizaino liukso numeris
  • Viela (jutikliams prijungti prie plokštės)
  • 3 PVC vamzdžių gabalai ((2) 18 colių ir (1) 8 colių)
  • 2 PVC alkūnės

1 žingsnis: Gaukite „Digilent“„Zybo DMA Audio Demo“

Šio projekto FPGA pusė daugiausia pagrįsta čia esančiu demonstraciniu projektu. Jis naudoja tiesioginę prieigą prie atminties, kad būtų galima siųsti duomenis tiesiai iš atminties, kurią procesorius gali įrašyti per „AXI Stream“į I2S garso bloką. Šie veiksmai padės jums pradėti DMA garso demonstracinį projektą:

  1. Gali prireikti naujos „Zybo“plokštės lentos failo versijos. Vykdykite šias instrukcijas, kad gautumėte naujų „Vivado“lentos failų.
  2. Norėdami pradėti demonstracinį projektą „Vivado“, atlikite šio puslapio instrukcijų 1 ir 2 veiksmus. Naudokite „Vivado“metodą, o ne SDK aparatinės įrangos perdavimą.
  3. Galite gauti pranešimą, kuriame sakoma, kad kai kurie jūsų IP blokai turėtų būti atnaujinti. Jei taip, pasirinkite „Rodyti IP būseną“, tada skirtuke IP būsena pasirinkite visą pasenusį IP ir spustelėkite „Atnaujinti pasirinktą“. Kai jis baigsis ir pasirodys langas, kuriame bus klausiama, ar norite sukurti išvesties produktą, eikite į priekį ir spustelėkite „Generuoti“. Jei gaunate kritinį įspėjamąjį pranešimą, ignoruokite jį.
  4. Peržiūrėkite iš dizaino į „Vivado“skirtuką „Šaltiniai“, kad pamatytumėte šaltinio failus. Dešiniuoju pelės mygtuku spustelėkite bloko dizainą „design_1“ir pasirinkite „Create HDL Wrapper“. Kai būsite paraginti, pasirinkite „nukopijuoti sukurtą įvyniojimą, kad naudotojai galėtų redaguoti“. Bus sukurtas projekto įvyniojimo failas.
  5. Dabar, kai tie svarbūs veiksmai, kurie kažkaip buvo palikti kitoje pamokoje, baigti, galite grįžti prie anksčiau susietos mokymo programos ir tęsti nuo 4 veiksmo iki pabaigos ir įsitikinti, kad demonstracinis projektas veikia tinkamai. Jei neturite galimybės įvesti garso įrašo, kad jis būtų įrašomas, tiesiog įrašykite su ausinėmis ir paspauskite 5-10 sekundžių neryškų garsą, kai paspausite atkūrimo mygtuką. Kol kažkas pasigirs iš ausinių lizdo, kai paspausite atkūrimo mygtuką, greičiausiai jis veiks tinkamai.

2 žingsnis: atlikite keletą pakeitimų „Vivado“

Atlikite keletą pakeitimų „Vivado“
Atlikite keletą pakeitimų „Vivado“

Taigi dabar veikia „Digilent“DMA garso demonstracija, tačiau tai nėra galutinis tikslas. Taigi turime grįžti į „Vivado“ir atlikti kai kuriuos pakeitimus, kad mūsų jutikliai būtų prijungti prie PMOD antraščių ir galėtume panaudoti jų vertę programinės įrangos pusėje.

  1. Atidarykite blokinę schemą „Vivado“
  2. Sukurkite GPIO bloką, dešiniuoju pelės klavišu spustelėdami tuščią tuščią blokų schemos vietą ir meniu pasirinkę „Pridėti IP“. Raskite ir pasirinkite „AXI GPIO“.
  3. Dukart spustelėkite naują IP bloką ir iš naujo pritaikykite IP langą, eikite į skirtuką IP konfigūracija. Pasirinkite visus įėjimus ir nustatykite plotį iki dvylikos, nes arfoje turėsime 12 „stygų“, todėl mums reikės 12 jutiklių. Jei norite naudoti mažiau ar daugiau jutiklių, atitinkamai sureguliuokite šį skaičių. Taip pat nustatykite įgalinti pertraukimą.
  4. Dešiniuoju pelės mygtuku spustelėkite naują GPIO IP bloką ir pasirinkite „paleisti ryšio automatizavimą“. Pažymėkite langelį AXI ir paspauskite Gerai. Tai turėtų automatiškai prijungti AXI sąsają, tačiau bloko išėjimai neturėtų būti prijungti.
  5. Norėdami padaryti daugiau pertraukos, dukart spustelėkite xlconcat_0 IP bloką ir pakeiskite prievadų skaičių nuo 4 iki 5. Tada galite prijungti ip2intc_irpt kaištį iš naujo GPIO bloko prie naujo nenaudojamo xlconcat bloko prievado.
  6. Dešiniuoju pelės mygtuku spustelėkite naujo GPIO IP bloko „GPIO“išvestį ir pasirinkite „make external“. Raskite, kur eina linija, ir spustelėkite mažą šoninį penkiakampį, o kairėje turėtų atsidaryti langas, kuriame galite pakeisti pavadinimą. Pakeiskite pavadinimą į „JUTIKLIAI“. Jei norite, kad mūsų pateiktas apribojimų failas veiktų, svarbu naudoti tą patį pavadinimą, kitaip turėsite pakeisti pavadinimą apribojimų faile.
  7. Grįžę į šaltinių skirtuką, suraskite apribojimų failą ir pakeiskite jį mūsų pateiktu. Galite pasirinkti pakeisti failą arba tiesiog nukopijuoti mūsų apribojimų failo turinį ir įklijuoti jį ant senojo. Vienas iš svarbių dalykų, kurį daro mūsų suvaržymų failas, yra PMOD antraštėse esančių traukimo rezistorių įgalinimas. Tai būtina tam tikriems mūsų naudojamiems jutikliams, tačiau ne visi jutikliai yra vienodi. Jei jūsų jutikliams reikalingi ištraukiami rezistoriai, kiekvieną „set_property PULLUP true“egzempliorių galite pakeisti į „set_property PULLDOWN true“. Jei jiems reikalinga kitokia rezistoriaus vertė, nei nurodyta lentoje, galite pašalinti šias eilutes ir naudoti išorinius rezistorius. Smeigtukų pavadinimai yra suvaržymų failo komentaruose ir atitinka etiketes pirmoje „Zybo“schemos diagramoje puslapį, kurį galite rasti čia. Jei norite naudoti skirtingus pmod kaiščius, apribojimo failo pavadinimus suderinkite su schemoje esančiomis etiketėmis. Mes naudojame PMOD antraštę JE ir JD, o kiekvienoje - šešis duomenų smeigtukus, praleidžiant 1 ir 7 kaiščius. Ši informacija yra svarbi prijungiant jutiklius. Kaip parodyta schemoje, PMODS 6 ir 12 kaiščiai yra VCC, o 5 ir 11 kaiščiai yra sumalti.
  8. Atkurkite HDL įvyniojimą, kaip ir anksčiau, ir nukopijuokite bei perrašykite seną. Kai tai bus padaryta, sukurkite bitų srautą ir eksportuokite aparatinę įrangą, kaip anksčiau, ir iš naujo paleiskite SDK. Jei jūsų paklaus, ar norite pakeisti seną aparatūros failą, atsakymas yra „taip“. Turbūt geriausia, kad SDK būtų uždarytas eksportuojant aparatūrą, kad ji būtų tinkamai pakeista.
  9. Paleiskite SDK.

3 veiksmas: paleiskite „FreeRTOS“

Kitas žingsnis - „FreeRTOS“paleisti „Zybo“lentoje.

  1. Jei dar neturite kopijos, atsisiųskite „FreeRTOS“čia ir išskleiskite failus.
  2. Importuokite „FreeRTOS Zynq“demonstracinę versiją, esančią adresu FreeRTOSv9.0.0 / FreeRTOS / Demo / CORTEX_A9_Zynq_ZC702 / RTOSDemo. Importavimo procesas yra beveik toks pat, kaip ir kito demonstracinio projekto, tačiau kadangi „FreeRTOS Zynq“demonstracinė versija priklauso nuo kitų „FreeRTOS“aplanko failų, neturėtumėte kopijuoti failų į savo darbo vietą. Vietoj to, turėtumėte įdėti visą „FreeRTOS“aplanką į savo projekto aplanką.
  3. Sukurkite naują lentos palaikymo paketą, eidami į „file“-> „new“-> „board support package“. Įsitikinkite, kad pasirinktas atskiras ir spustelėkite Baigti. Po kurio laiko pasirodys langas, pažymėkite langelį šalia „lwip141“(tai sustabdo vienos „FreeRTOS“demonstracinės versijos nepavykimą sukompiliuoti) ir paspauskite Gerai. Po to dešiniuoju pelės klavišu spustelėkite RTOSdemo projektą ir eikite į „Properties“, eikite į skirtuką „projekto nuorodos“ir pažymėkite langelį šalia naujo sukurto bsp. Tikimės, kad tai bus pripažinta, tačiau kartais „Xilinx SDK“gali būti keista dėl tokio dalyko. Jei po šio veiksmo vis tiek gaunate klaidą, kad trūksta xparameters.h arba kažkas panašaus, pabandykite pakartoti šį veiksmą ir galbūt uždaryti bei iš naujo paleisti SDK.

4 žingsnis: pridėkite lazerio arfos kodą

Dabar, kai „FreeRTOS“yra importuota, galite į „FreeRTOS“demonstraciją įtraukti failus iš lazerinės arfos projekto

  1. Sukurkite naują aplanką „sRc“aplanke „FreeRTOS“demonstracinėje versijoje ir nukopijuokite bei įklijuokite visus pateiktus c failus, išskyrus main.c, į šį aplanką.
  2. Pakeiskite RTOSDemo main.c į pateiktą main.c
  3. Jei viskas padaryta teisingai, šiuo metu turėtumėte paleisti lazerio arfos kodą. Bandymo tikslais mygtuko įvestis, kuri buvo naudojama DMA demonstraciniame projekte, dabar naudojama garsams atkurti be prijungtų jutiklių (veiks bet kuris iš keturių pagrindinių mygtukų). Kiekvieną kartą paspaudus ji gros eilutę ir kelis kartus paspausdama pereis per visas sistemos eilutes. Prijunkite kai kurias ausines ar garsiakalbius prie ausinių lizdo „Zybo“plokštėje ir įsitikinkite, kad paspaudę mygtuką girdite stygų garsus.

5 veiksmas: apie kodą

Daugelis iš jūsų, skaitančių šią mokymo programą, greičiausiai čia sužinos, kaip nustatyti garso įrašą ar naudoti DMA, kad būtų galima daryti kažką kitaip, ar sukurti kitą muzikos instrumentą. Dėl šios priežasties keliose sekcijose bus aprašyta, kaip pateiktas kodas veikia kartu su anksčiau aprašyta aparatine įranga, norint gauti veikiančią garso išvestį naudojant DMA. Jei suprantate, kodėl yra kodo vienetų, turėtumėte sugebėti juos koreguoti, kad ir ką norėtumėte sukurti.

Nutraukia

Pirmiausia paminėsiu, kaip šiame projekte sukuriami pertraukimai. Mes tai padarėme pirmiausia sukurdami pertraukimo vektoriaus lentelės struktūrą, kuri seka ID, pertraukimo tvarkyklę ir kiekvieno pertraukimo nuorodą į įrenginį. Nutraukimo ID gaunami iš xparameters.h. Nutraukimo tvarkyklė yra funkcija, kurią parašėme DMA ir GPIO, o I2C pertraukimas gaunamas iš „Xlic I2C“tvarkyklės. Įrenginio nuoroda nurodo kiekvieno įrenginio atvejus, kuriuos inicijuojame kitur. Funkcijos _init_audio pabaigoje ciklas eina per kiekvieną pertraukimo vektoriaus lentelės elementą ir iškviečia dvi funkcijas, XScuGic_Connect () ir XScuGic_Enable (), kad prisijungtų ir įjungtų pertraukas. Jie nurodo „xInterruptController“, kuris yra pertraukimo valdiklis, sukurtas „FreeRTOS main.c“pagal numatytuosius nustatymus. Taigi iš esmės kiekvieną pertraukimą pridedame prie šio pertraukimo valdiklio, kurį mums jau sukūrė „FreeRTOS“.

DMA

DMA inicijavimo kodas prasideda lh_main.c. Pirmiausia deklaruojamas statinis XAxiDma struktūros pavyzdys. Tada funkcijoje _init_audio () jis sukonfigūruotas. Pirmiausia iškviečiama demonstracinio projekto konfigūravimo funkcija, kuri yra dma.c. Tai gana gerai dokumentuota ir pateikiama tiesiai iš demonstracinės versijos. Tada pertraukimas prijungiamas ir įjungiamas. Šiam projektui reikalingas tik pagrindinio-vergo pertraukimas, nes visus duomenis DMA siunčia į I2S valdiklį. Jei norite įrašyti garsą, jums taip pat reikės pertraukti vergo-šeimininko pertrauką. Perkėlimas iš pagrindinio į vergą iškviečiamas, kai DMA baigia siųsti bet kokius duomenis, kuriuos liepėte siųsti. Šis pertraukimas yra neįtikėtinai svarbus mūsų projektui, nes kiekvieną kartą, kai DMA baigia siųsti vieną garso mėginių buferį, jis turi nedelsdamas pradėti siųsti kitą buferį, nes priešingu atveju tarp siuntimų atsiras garsinis vėlavimas. Funkcijos dma_mm2s_ISR () viduje galite pamatyti, kaip mes tvarkome pertrauką. Svarbi dalis yra netoli pabaigos, kur mes naudojame xSemaphoreGiveFromISR () ir portYIELD_FROM_ISR (), norėdami pranešti _audio_task (), kad jis gali inicijuoti kitą DMA perdavimą. Nuolatinius garso duomenis siunčiame keičiant du buferius. Kai vienas buferis perduodamas į I2C bloką, kito buferio vertės apskaičiuojamos ir išsaugomos. Tada, kai pertraukimas ateina iš DMA, aktyvus buferis perjungiamas ir pradedamas perkelti neseniai parašytas buferis, o anksčiau perkeltas buferis pradedamas perrašyti naujais duomenimis. Pagrindinė funkcijos _audio_task funkcija yra ta vieta, kur iškviečiamas fnAudioPlay (). „fnAudioPlay“() paima DMA egzempliorių, buferio ilgį ir žymeklį į buferį, iš kurio bus perkelti duomenys. Keletas verčių siunčiamos į I2S registrus, kad būtų pranešta, jog ateina daugiau pavyzdžių. Tada XAxiDma_SimpleTransfer () iškviečiamas inicijuoti perkėlimą.

„I2S Audio“

„audio.c“ir „audio.h“yra I2S inicijavimo vieta. „I2S“inicijavimo kodas yra gana dažna kodo dalis, sklandanti daugelyje vietų, galbūt rasite nedidelių skirtumų iš kitų šaltinių, tačiau šis turėtų veikti. Tai gana gerai dokumentuota ir nereikia daug keisti arfos projektui. DMA garso demonstravimas, iš kurio jis buvo gautas, turi funkcijas, skirtas perjungti į mikrofono ar linijos įvestis, kad galėtumėte jas naudoti, jei jums to reikia.

Garso sintezė

Norėdami apibūdinti, kaip veikia garso sintezė, aš išvardysiu kiekvieną kūrimo metu naudojamą garso modelį, kuris paskatino galutinį metodą, nes tai leis jums suprasti, kodėl tai daroma taip, kaip tai daroma.

1 metodas: kiekvienai eilutei apskaičiuojamas vienas sinusinių verčių periodas atitinkamu tos eilutės muzikos natos dažniu ir saugomas masyve. Pavyzdžiui, masyvo ilgis bus sinusinės bangos laikotarpis mėginiuose, kuris yra lygus mėginių skaičiui per ciklą. Jei atrankos dažnis yra 48 kHz, o natos dažnis yra 100 Hz, tada per ciklą yra 48 000 mėginių per sekundę ir 100 ciklų per sekundę, o tai reiškia, kad per ciklą bus 4800 mėginių, o masyvo ilgis bus 4800 mėginių ir joje bus pateiktos vienos pilnos vertės sinusinių bangų periodas. Kai grojama eilutė, garso mėginio buferis užpildomas imant reikšmę iš sinusinių bangų masyvo ir įdedant į garso buferį kaip pavyzdį, tada padidinant sinusinio bangos masyvo indeksą, kad naudojant ankstesnį pavyzdį iš 4800 mėginių vienas sinusinių bangų ciklas įvedamas į garso buferį. Masyvo indekse naudojama modulinė operacija, kad ji visada būtų tarp 0 ir ilgio, o kai masyvo indeksas viršija tam tikrą ribą (pvz., Galbūt 2 sekundžių vertės pavyzdžiai), eilutė išjungiama. Jei norite vienu metu leisti kelias stygas, stebėkite kiekvienos stygų masyvo indeksą atskirai ir pridėkite kiekvienos stygos sinusinės bangos vertę, kad gautumėte kiekvieną pavyzdį.

2 metodas: norėdami sukurti labiau muzikinį toną, pradedame nuo ankstesnio modelio ir prie kiekvieno pagrindinio dažnio pridedame harmonikų. Harmoniniai dažniai yra dažniai, kurie yra pagrindinio dažnio sveikieji skaičiai. Skirtingai nei tada, kai susumuojami du nesusiję dažniai, todėl vienu metu skamba du skirtingi garsai, sudedant harmonikas, jis ir toliau skamba kaip vienas garsas, tačiau skiriasi tonas. Norėdami tai padaryti, kiekvieną kartą, kai prie garso mėginio pridedame sinusinės bangos reikšmę vietoje (masyvo indeksas % masyvo ilgis), taip pat pridedame (2 * masyvo indeksas % masyvo ilgis) ir (3 * masyvo indeksas % masyvo ilgis)) ir taip toliau, nes norima daug harmonikų. Šie padauginti rodikliai praeis sinusine banga dažniais, kurie yra sveiki pradinio dažnio kartotiniai. Kad būtų galima geriau valdyti toną, kiekvienos harmonikos vertės padauginamos iš kintamojo, kuris parodo tos harmonikos kiekį bendrame garse. Pavyzdžiui, pagrindinės sinusinės bangos vertės gali būti padaugintos iš 6, kad būtų daugiau bendro garso veiksnys, o penktoji harmonika gali turėti daugiklį 1, o tai reiškia, kad jos vertės daug mažiau prisideda prie bendro garso.

3 metodas: Gerai, todėl dabar turime labai gražų natų toną, tačiau vis dar yra gana svarbi problema: jie groja fiksuotu garsumu tam tikrą laiką. Kad skambantis stygos garsas laikui bėgant skambėtų kaip tikras instrumentas, jos sklandžiai turėtų mažėti. Norėdami tai padaryti, masyvas užpildomas eksponentiškai mažėjančios funkcijos reikšmėmis. Dabar, kai kuriami garso pavyzdžiai, iš kiekvienos eilutės sklindantis garsas apskaičiuojamas taip pat, kaip ir ankstesniame metode, tačiau prieš įtraukiant jį į garso pavyzdį, jis padauginamas iš tos eilutės masyvo indekso vertės eksponentinio skilimo funkcijų masyve. Dėl to garsas sklandžiai išsisklaido laikui bėgant. Kai masyvo indeksas pasiekia skilimo masyvo pabaigą, eilutė sustabdoma.

4 metodas: šis paskutinis žingsnis iš tikrųjų suteikia stygų garsams realistinį stygų garsą. Prieš tai jie skambėjo maloniai, bet aiškiai susintetino. Siekiant geriau imituoti realaus pasaulio arfos stygas, kiekvienai harmonikai priskiriamas skirtingas skilimo greitis. Tikrose stygose, kai styga pirmą kartą išmušta, yra didelis aukšto dažnio harmonikų kiekis, sukuriantis tokį pešimo garsą, kokio tikimės iš eilutės. Šios aukšto dažnio harmonikos yra labai trumpai pagrindinė garso dalis, skambant stygos garsui, tačiau jos labai greitai suyra, kai įsijungia lėtesnės harmonikos. Skilimo masyvas sukuriamas kiekvienam harmoniniam skaičiui, naudojamam garso sintezėje, kiekvienas turi savo skilimo greitį. Dabar kiekvieną harmoniką galima savarankiškai padauginti iš atitinkamos skilimo masyvo vertės eilutės masyvo indekse ir pridėti prie garso.

Apskritai garso sintezė yra intuityvi, tačiau sunku apskaičiuoti. Viso styginio garso įrašymas į atmintį vienu metu užimtų per daug atminties, tačiau sinusinės bangos ir eksponentinės funkcijos apskaičiavimas tarp kiekvieno kadro užtruktų per ilgai, kad neatsiliktų nuo garso atkūrimo greičio. Norėdami pagreitinti skaičiavimą, kode naudojami keli triukai. Visa matematika, išskyrus pradinį sinuso ir eksponentinio skilimo lentelių kūrimą, atliekama sveiko skaičiaus formatu, todėl 24 bitų garso išvestyje reikia išskleisti turimą skaitinę erdvę. Pavyzdžiui, sinusinis stalas yra 150 amplitudės, todėl jis yra lygus, bet ne toks didelis, kad daugelis sujungtų stygų galėtų sudaryti daugiau nei 24 bitus. Panašiai, prieš suapvalinant iki sveikųjų skaičių ir išsaugojant, eksponentinės lentelės reikšmės padauginamos iš 80. Harmoniniai svoriai gali įgyti diskrečias vertes nuo 0 iki 10. Taip pat visi mėginiai iš tikrųjų padvigubinami, o sinusinės bangos indeksuojamos 2, o tai sumažina perpus mažesnį atrankos dažnį. Tai riboja maksimalų dažnį, kurį galima groti, tačiau buvo būtinas, kad dabartinis stygų ir harmonikų skaičius būtų pakankamai greitai apskaičiuotas.

Sukurti šį garso modelį ir priversti jį dirbti reikėjo daug pastangų procesoriaus pusėje, ir būtų buvę neįtikėtinai sunku priversti jį dirbti fpga pusėje nuo nulio per šį projektą (įsivaizduokite, kad kiekvieną kartą turėsite atkurti bitų srautą) kai buvo pakeistas verilogo gabalas, kad būtų patikrintas garsas). Tačiau tai padaryti fpga greičiausiai galėtų būti geresnis būdas, galbūt pašalinant problemą, kad negalime pakankamai greitai apskaičiuoti pavyzdžių ir leisti daugiau eilučių, harmonikų ir net garso efektų ar kitų užduočių. procesoriaus pusėje.

6 veiksmas: jutiklių prijungimas

Jutiklių prijungimas
Jutiklių prijungimas

Norėdami sukurti stygas, naudojome IR pertraukos spindulių jutiklius, kurie nustatys, kada grojama styga. Mes užsisakėme savo jutiklius iš šios nuorodos. Jutikliai turi maitinimo, įžeminimo ir duomenų laidą, o skleidėjai turi tik maitinimo ir įžeminimo laidą. Mes tiekėme 3,3 V ir įžeminimo kaiščius iš PMOD antraščių tiekdami spinduliuotę, tiek jutiklius. Norint maitinti visus jutiklius ir skleidėjus, būtina lygiagrečiai prijungti visus jutiklius ir spinduliuotę. Duomenų laidai iš jutiklių turės pereiti prie savo pmod kaiščio.

7 žingsnis: skeleto konstravimas

Skeleto konstravimas
Skeleto konstravimas

Siekiant sukurti arfos formą, trys dalys yra naudojamos kaip skeletas jutikliams ir skleidėjams uždėti. Ant vieno iš dviejų 18 colių PVC vamzdžio dalių sulygiuokite jutiklius ir spinduliuotę kintama tvarka 1,5 colio atstumu vienas nuo kito ir tada priklijuokite juos prie vamzdžio. Kituose 18 colių PVC vamzdžiuose sulygiuokite jutiklius ir spinduliuotę kintama tvarka, tačiau įsitikinkite, kad jie yra pakeisti (pvz., Jei pirmasis vamzdis pirmiausia turėjo jutiklį, antrasis pirmiausia turėtų turėti spinduliuotę ir atvirkščiai). Reikės lituoti ilgesnius duomenų, maitinimo ir įžeminimo laidus, kad jie galėtų pasiekti plokštę.

8 žingsnis: medžio išorės statyba

Medžio išorės statyba
Medžio išorės statyba

Šis žingsnis yra neprivalomas, tačiau labai rekomenduojamas. Medinė išorė ne tik gražiai atrodo arfa, bet ir apsaugo jutiklius ir laidus nuo pažeidimų. Medinį rėmą galima sukurti iš medžio esančio stačiakampio formos žiedo. Stačiakampio viduje turi būti bent 1-1/2 colių anga, kad tilptų vamzdis ir jutiklio karkasas. Sukūrę rėmą, gręžkite dvi skyles, kurios leis iš jutiklio ir spinduliuotės laidus prijungti juos prie plokštės.

*Pastaba: Rekomenduojama pridėti prieigos taškų, kad būtų galima išimti ir įdėti vamzdžio karkasą, jei reikia atlikti remontą arba šiek tiek pakoreguoti.

9 žingsnis: visų dalių sujungimas

Sujunkite visus gabalus
Sujunkite visus gabalus

Kai visi ankstesni veiksmai bus baigti, laikas sukonstruoti arfą. Pirmiausia įdėkite vamzdžio karkasą į medinę išorę. Tada įkiškite jutiklių ir skleidėjų laidus į tinkamą plokštės vietą. Tada atidarykite SDK ir spustelėkite derinimo mygtuką, kad užprogramuotumėte plokštę. Kai lenta užprogramuota, prijunkite ausines arba garsiakalbį. Priklausomai nuo to, kuris jutiklis patenka į kurį pmod prievadą, jūsų arfos stygos greičiausiai bus netinkamos. Kadangi gali būti sunku pasakyti, kuris laidas eina į kurį jutiklį, kai yra tiek daug laidų, mes įtraukėme būdą, kaip susieti eilučių numerius ir nutraukti bitų pozicijas programinėje įrangoje. Raskite „static int sensor_map [NUM_STRINGS]“ir pakoreguokite masyvo vertes, kol eilutės groja nuo mažiausio iki aukščiausio.

Meniu galima naudoti atidarius serijinį terminalą (pvz., „RealTerm“) ir nustatant duomenų perdavimo spartą į 115200, o ekrane - į ANSI. Meniu galima naršyti naudojant klavišus w ir s, kad judėtų aukštyn ir žemyn, o mygtukus a ir d - keisti reikšmes.

10 žingsnis: ROCK OUT

Kai arfa visiškai funkcionuos. Įvaldyk arfą ir klausyk saldaus savo muzikos garso!

Rekomenduojamas: