İçindekiler:

Zybo Board Üzerinde Laser Arp Synthesizer: 10 Adım (Resimlerle)
Zybo Board Üzerinde Laser Arp Synthesizer: 10 Adım (Resimlerle)

Video: Zybo Board Üzerinde Laser Arp Synthesizer: 10 Adım (Resimlerle)

Video: Zybo Board Üzerinde Laser Arp Synthesizer: 10 Adım (Resimlerle)
Video: Zybo XADC Demonstration: VIVADO and Zynq FPGA Development 2024, Temmuz
Anonim
Zybo Board üzerinde Lazer Arp Sentezleyici
Zybo Board üzerinde Lazer Arp Sentezleyici

Bu eğitimde, kullanıcının enstrümanın akort ve tonunu değiştirmesine izin verecek bir seri arayüze sahip IR sensörlerini kullanarak tamamen işlevsel bir lazer arp oluşturacağız. Bu arp, asırlık enstrümanın 21. yüzyıl versiyonu olacak. Sistem, Vivado Design Suites ile birlikte bir Xilinx Zybo geliştirme kartı kullanılarak oluşturuldu. Projeyi tamamlamak için ihtiyacınız olacak:

  • 12 IR sensör ve emitör (dizi sayısına bağlı olarak daha fazla veya daha az kullanılabilir)
  • Zybo Zynq-7000 geliştirme kartı
  • Ücretsiz RTOS
  • Vivado Tasarım Süiti
  • Tel (sensörleri panoya bağlamak için)
  • 3 adet PVC boru ((2) 18 inç ve (1) 8 inç)
  • 2 PVC dirsek

1. Adım: Digilent'in Zybo DMA Ses Demosunu Alın

Bu projenin FPGA tarafı, büyük ölçüde burada bulunan demo projesine dayanmaktadır. İşlemcinin AXI Akışı üzerinden bir I2S ses bloğuna yazabileceği verileri doğrudan bellekten göndermek için doğrudan bellek erişimini kullanır. Aşağıdaki adımlar, DMA ses demo projesini hazır hale getirmenize ve çalıştırmanıza yardımcı olacaktır:

  1. Zybo panosu için pano dosyasının yeni bir sürümü gerekli olabilir. Vivado için yeni pano dosyaları almak için bu talimatları izleyin.
  2. Demo projesini Vivado'da açmak için bu sayfadaki talimatlardaki 1. ve 2. adımları izleyin. SDK donanım aktarımını değil, Vivado yöntemini kullanın.
  3. Bazı ip bloklarınızın güncellenmesi gerektiğini söyleyen bir mesaj alabilirsiniz. Öyleyse, "IP Durumunu Göster"i seçin ve ardından IP durumu sekmesinde tüm güncel olmayan IP'leri seçin ve "Seçilileri Yükselt"e tıklayın. Bittiğinde ve çıktı ürünü oluşturmak isteyip istemediğinizi soran bir pencere açıldığında, devam edin ve "Oluştur" u tıklayın. Kritik bir uyarı mesajı alırsanız, görmezden gelin.
  4. Kaynak dosyaları görmek için tasarımdan Vivado'daki kaynaklar sekmesine geçin. "design_1" blok tasarımına sağ tıklayın ve "HDL Wrapper Oluştur" seçeneğini seçin. İstendiğinde, "kullanıcı düzenlemelerine izin vermek için oluşturulan sarmalayıcıyı kopyala"yı seçin. Proje için bir sarmalayıcı dosyası oluşturulacaktır.
  5. Artık diğer öğreticide bir şekilde atlanmış olan bu kritik adımlar tamamlandığında, daha önce bağlantılı öğreticiye dönebilir ve 4. adımdan sonuna kadar devam edebilir ve demo projesinin doğru çalıştığından emin olabilirsiniz. Kaydedilmesi için ses girişinin bir yolu yoksa, kulaklıklarınız takılıyken kayıt yapın ve oynatma düğmesine bastığınızda 5-10 saniyelik bulanık bir ses dinleyin. Oynatma düğmesine bastığınızda kulaklık jakından bir şey çıktığı sürece, muhtemelen düzgün çalışıyordur.

2. Adım: Vivado'da Bazı Değişiklikler Yapın

Vivado'da Bazı Değişiklikler Yapın
Vivado'da Bazı Değişiklikler Yapın

Şimdi Digilent'in DMA ses demosunu çalıştırdınız, ancak buradaki nihai hedef bu değil. Bu yüzden Vivado'ya geri dönmeli ve sensörlerimizin PMOD başlıklarına takılabilmesi ve onların değerini yazılım tarafında kullanabilmemiz için bazı değişiklikler yapmalıyız.

  1. Vivado'da blok diyagramı açın
  2. Blok şemasında boş alana sağ tıklayıp menüden "IP Ekle"yi seçerek bir GPIO bloğu oluşturun. "AXI GPIO" öğesini bulun ve seçin.
  3. Yeni IP bloğuna çift tıklayın ve IP'yi yeniden özelleştir penceresinde IP yapılandırma sekmesine gidin. Tüm girişleri seçin ve genişliği 12'ye ayarlayın, çünkü arpımızda 12 "string" olacak ve bu nedenle 12 sensöre ihtiyacımız olacak. Daha az veya daha fazla sensör kullanmak istiyorsanız bu sayıyı uygun şekilde ayarlayın. Ayrıca kesmeyi etkinleştir'i ayarlayın.
  4. Yeni GPIO IP bloğuna sağ tıklayın ve "bağlantı otomasyonunu çalıştır" seçeneğini seçin. AXI kutusunu işaretleyin ve tamam'a basın. Bu, AXI arayüzünü otomatik olarak bağlamalı, ancak bloğun çıkışlarını bağlantısız bırakmalıdır.
  5. Ekstra kesmeye yer açmak için xlconcat_0 IP bloğuna çift tıklayın ve port sayısını 4'ten 5'e değiştirin. Ardından yeni GPIO bloğundan ip2intc_irpt pinini xlconcat bloğundaki yeni kullanılmayan porta bağlayabilirsiniz.
  6. Yeni GPIO IP bloğunun "GPIO" çıktısına sağ tıklayın ve "harici yap"ı seçin. Çizginin nereye gittiğini bulun ve yan taraftaki küçük beşgen üzerine tıklayın ve solda adı değiştirebileceğiniz bir pencere açılmalıdır. Adı "SENSÖRLER" olarak değiştirin. Sağladığımız kısıtlamalar dosyasının çalışmasını istiyorsanız aynı adı kullanmanız önemlidir, aksi takdirde kısıtlama dosyasındaki adı değiştirmeniz gerekecektir.
  7. Kaynaklar sekmesine geri dönün, kısıtlamalar dosyasını bulun ve sağladığımızla değiştirin. Dosyayı değiştirmeyi veya sadece kısıtlamalar dosyamızın içeriğini kopyalamayı ve eskisinin içeriğinin üzerine yapıştırmayı seçebilirsiniz. Kısıtlama dosyamızın yaptığı önemli şeylerden biri, PMOD başlıklarındaki çekme dirençlerini etkinleştirmektir. Bu, kullandığımız belirli sensörler için gereklidir, ancak tüm sensörler aynı değildir. Sensörleriniz açılan dirençlere ihtiyaç duyuyorsa, "set_property PULLUP true" örneğinin her örneğini "set_property PULLOWN true" ile değiştirebilirsiniz. Eğer karttakinden farklı bir direnç değeri gerektiriyorsa, bu satırları kaldırabilir ve harici dirençler kullanabilirsiniz. Pin isimleri, kısıtlamalar dosyasındaki yorumlardadır ve Zybo Şemasındaki ilk diyagramdaki etiketlere karşılık gelirler. buradan ulaşabileceğiniz sayfa. Farklı pmod pinleri kullanmak istiyorsanız, kısıtlama dosyasındaki isimleri şematikteki etiketlerle eşleştirmeniz yeterlidir. PMOD başlığı JE ve JD'yi kullanıyoruz ve her birinde 1 ve 7 numaralı pinleri atlayarak altı veri pini kullanıyoruz. Bu bilgi, sensörlerinizi bağlarken önemlidir. Şematikte gösterildiği gibi, PMODS üzerindeki 6 ve 12 numaralı pinler VCC'dir ve 5 ve 11 numaralı pinler topraklanmıştır.
  8. HDL sarmalayıcıyı daha önce olduğu gibi yeniden oluşturun ve eskisini kopyalayıp üzerine yazın. Bu tamamlandığında, bit akışı oluşturun ve donanımı önceki gibi dışa aktarın ve SDK'yı yeniden başlatın. Eski donanım dosyasını değiştirmek isteyip istemediğiniz sorulursa, cevap evet. Donanımı dışa aktarırken, düzgün bir şekilde değiştirilmesi için SDK'nın kapatılması muhtemelen en iyisidir.
  9. SDK'yı başlatın.

3. Adım: FreeRTOS'u Çalıştırın

Bir sonraki adım, FreeRTOS'un Zybo kartında çalışmasını sağlamaktır.

  1. Halihazırda bir kopyanız yoksa, buradan FreeRTOS'u indirin ve dosyaları çıkarın.
  2. FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_A9_Zynq_ZC702\RTOSDemo konumunda bulunan FreeRTOS Zynq demosunu içe aktarın. İçe aktarma işlemi, diğer demo projesiyle hemen hemen aynıdır, ancak FreeRTOS Zynq demosu, FreeRTOS klasöründeki diğer dosyalara dayandığından, dosyaları çalışma alanınıza kopyalamamalısınız. Bunun yerine, tüm FreeRTOS klasörünü proje klasörünüzün içine yerleştirmelisiniz.
  3. "dosya" -> "yeni" -> "kart destek paketi"ne giderek yeni bir pano destek paketi oluşturun. Bağımsız'ın seçili olduğundan emin olun ve bitir'i tıklayın. Bir süre sonra bir pencere açılacaktır, lwip141'in yanındaki kutuyu işaretleyin (bu, FreeRTOS demolarından birinin derlenememesini engeller) ve Tamam'a basın. Bu tamamlandıktan sonra RTOSdemo projesine sağ tıklayın ve "özellikler"e gidin, "proje referansları" sekmesine gidin ve oluşturduğunuz yeni bsp'nin yanındaki kutuyu işaretleyin. Umarım tanınır, ancak bazen Xilinx SDK bu tür şeyler hakkında garip olabilir. Bu adımdan sonra hala xparameters.h eksik veya buna benzer bir hata alıyorsanız, bu adımı tekrarlamayı ve belki SDK'dan çıkıp yeniden başlatmayı deneyin.

Adım 4: Lazer Arp Kodu Ekleyin

Artık FreeRTOS içe aktarıldığına göre, lazer arp projesindeki dosyaları FreeRTOS demosuna getirebilirsiniz.

  1. FreeRTOS demosunda src klasörü altında yeni bir klasör oluşturun ve main.c dışında sağlanan tüm c dosyalarını bu klasöre kopyalayıp yapıştırın.
  2. RTOSDemo main.c dosyasını sağlanan main.c ile değiştirin.
  3. Her şey doğru yapılırsa, bu noktada lazer arp kodunu çalıştırabilmelisiniz. Test amacıyla, DMA demo projesinde kullanılan düğme girişi artık sensörler takılı olmadan sesleri çalmak için kullanılıyor (dört ana düğmeden herhangi biri çalışacaktır). Her bastığınızda bir dizi çalacak ve birden fazla basışta sistemdeki tüm diziler arasında geçiş yapacaktır. Zybo kartındaki kulaklık jakına birkaç kulaklık veya hoparlör takın ve bir düğmeye bastığınızda gelen tellerin seslerini duyabildiğinizden emin olun.

Adım 5: Kod Hakkında

Bu öğreticiyi okuyan birçoğunuz, sesi nasıl kuracağınızı veya farklı bir şey yapmak için DMA kullanmayı veya farklı bir müzik aleti oluşturmayı öğrenmek için buradasınız. Bu nedenle, sonraki birkaç bölüm, sağlanan kodun, DMA kullanarak çalışan bir ses çıkışı elde etmek için daha önce açıklanan donanımla birlikte nasıl çalıştığını açıklamaya ayrılmıştır. Kod parçalarının neden orada olduğunu anlarsanız, oluşturmak istediğiniz şey için bunları ayarlayabilmelisiniz.

kesintiler

Öncelikle bu projede kesintilerin nasıl oluşturulduğundan bahsedeceğim. Bunu ilk önce ID'yi, kesme işleyicisini ve her kesme için aygıta bir referansı tutan bir kesme vektörü tablosu yapısı oluşturduk. Kesinti kimlikleri xparameters.h'den gelir. Kesme işleyicisi DMA ve GPIO için yazdığımız bir fonksiyondur ve I2C kesmesi Xlic I2C sürücüsünden gelir. Cihaz referansı, başka bir yerde başlattığımız her cihazın örneklerine işaret eder. _init_audio işlevinin sonuna doğru, kesme vektör tablosundaki her öğeden bir döngü geçer ve kesmeleri bağlamak ve etkinleştirmek için XScuGic_Connect() ve XScuGic_Enable() olmak üzere iki işlevi çağırır. Varsayılan olarak FreeRTOS main.c'de oluşturulan bir kesme denetleyicisi olan xInterruptController'a başvururlar. Temel olarak, kesmelerimizin her birini, bizim için FreeRTOS tarafından zaten oluşturulmuş olan bu kesme denetleyicisine ekliyoruz.

DMA

DMA başlatma kodu lh_main.c'de başlar. Önce bir XAxiDma yapısının statik bir örneği bildirildi. Ardından _init_audio() işlevinde yapılandırılır. İlk olarak, dma.c'deki demo projesinden yapılandırma işlevi çağrılır. Oldukça iyi belgelenmiştir ve doğrudan demodan gelir. Ardından kesme bağlanır ve etkinleştirilir. Tüm veriler DMA tarafından I2S denetleyicisine gönderildiğinden, bu proje için yalnızca master-slave kesmesi gereklidir. Ses kaydetmek istiyorsanız, köleden ana bilgisayara kesmeye de ihtiyacınız olacaktır. DMA, göndermesini söylediğiniz verileri göndermeyi bitirdiğinde, master-slave kesmesi çağrılır. Bu kesinti projemiz için inanılmaz derecede önemlidir, çünkü DMA bir ses örnekleri arabelleği göndermeyi her bitirdiğinde, hemen bir sonraki ara belleği göndermeye başlamalıdır, yoksa göndermeler arasında sesli bir gecikme meydana gelir. dma_mm2s_ISR() işlevinin içinde kesmeyi nasıl ele aldığımızı görebilirsiniz. Önemli kısım, xSemaphoreGiveFromISR() ve portYIELD_FROM_ISR() kullanarak _audio_task()'ın bir sonraki DMA aktarımını başlatabileceğini bildirmek için kullandığımız sona yakındır. Sabit ses verilerini gönderme şeklimiz, iki arabellek arasında geçiş yapmaktır. Bir arabellek I2C bloğuna iletildiğinde, diğer arabellek değerleri hesaplanıp saklanıyor. Daha sonra, kesinti DMA'dan geldiğinde aktif arabellek değişir ve daha önce yazılan arabellek aktarılmaya başlarken, daha önce aktarılan arabelleğin üzerine yeni veriler yazılmaya başlar. _audio_task işlevinin anahtar kısmı, fnAudioPlay() öğesinin çağrıldığı yerdir. fnAudioPlay(), DMA örneğini, arabelleğin uzunluğunu ve verilerin aktarılacağı arabelleğe yönelik bir işaretçiyi alır. Daha fazla örneğin geldiğini bildirmek için I2S kayıtlarına birkaç değer gönderilir. Ardından aktarımı başlatmak için XAxiDma_SimpleTransfer() çağrılır.

I2S Ses

audio.c ve audio.h, I2S başlatma işleminin gerçekleştiği yerdir. I2S başlatma kodu, birçok yerde dolaşan oldukça yaygın bir kod yığınıdır, diğer kaynaklardan küçük farklılıklar bulabilirsiniz, ancak bu çalışmalıdır. Oldukça iyi belgelenmiş ve arp projesi için çok fazla değiştirilmesi gerekmiyor. Geldiği DMA ses demosu, mikrofon veya hat girişlerine geçiş işlevlerine sahiptir, böylece bu işleve ihtiyacınız varsa bunları kullanabilirsiniz.

Ses Sentezi

Ses sentezinin nasıl çalıştığını açıklamak için, geliştirmede kullanılan ve nihai yönteme yol açan ses modellerinin her birini listeleyeceğim, çünkü size bunun neden bu şekilde yapıldığına dair bir fikir verecektir.

Yöntem 1: Her dize için, o dizenin notasına karşılık gelen frekansta bir sinüs değeri periyodu hesaplanır ve bir dizide saklanır. Örneğin, dizinin uzunluğu, örneklerdeki sinüs dalgasının periyodu olacaktır, bu da örnek sayısı / döngüye eşittir. Örnekleme hızı 48 kHz ve nota frekansı 100Hz ise, o zaman döngü başına 4800 örneğe yol açan 48.000 örnek/saniye ve 100 döngü/saniye vardır ve dizi uzunluğu 4800 örnek olacaktır ve bir tamın değerlerini içerecektir. sinüs dalgası dönemi. Dize çalındığında, ses örneği arabelleği, sinüs dalgası dizisinden bir değer alarak ve örnek olarak ses arabelleğine koyarak, ardından dizini sinüs dalgası dizisine artırarak doldurulur, böylece kurs boyunca önceki örneğimizi kullanırız. 4800 örnekten bir sinüs dalgası döngüsü ses arabelleğine konur. Dizi dizini üzerinde, her zaman 0 ile uzunluk arasına düşecek şekilde bir modulo işlemi kullanılır ve dizi dizini belirli bir eşiği aştığında (belki 2 saniyelik örnekler gibi) dize kapatılır. Aynı anda birden fazla diziyi çalmak için, her bir dizi dizi indeksini ayrı ayrı takip edin ve her bir örneği elde etmek için her dizinin sinüs dalgasından gelen değeri birlikte ekleyin.

Yöntem 2: Daha müzikal bir ton oluşturmak için önceki modelle başlıyoruz ve her bir temel frekansa harmonikler ekliyoruz. Harmonik frekanslar, temel frekansın tam sayı katları olan frekanslardır. Birbiriyle ilgisiz iki frekansın bir araya toplanıp, aynı anda iki farklı sesin çalınmasıyla sonuçlanmasının aksine, harmonikler bir araya getirildiğinde, yalnızca bir ses gibi, ancak farklı bir tonla ses çıkarmaya devam eder. Bunu başarmak için, ses örneğine konumdaki sinüs dalgasının değerini (dizi indeksi % dizi uzunluğu) her eklediğimizde, ayrıca (2 * dizi indeksi % dizi uzunluğu) ve (3 * dizi indeksi % dizi uzunluğu) ekleriz.) ve bunun gibi birçok harmonik istendiği için. Bu çarpılmış endeksler, sinüs dalgasını orijinal frekansın tam sayı katları olan frekanslarda geçecektir. Tonun daha fazla kontrol edilmesini sağlamak için, her bir harmoniğin değerleri, genel sesteki o harmoniğin miktarını temsil eden bir değişken ile çarpılır. Örneğin, temel sinüs dalgası, genel seste daha fazla bir faktör yapmak için tüm değerlerinin 6 ile çarpılmasına sahip olabilirken, 5. harmonik 1 çarpanına sahip olabilir, bu da değerlerinin genel sese çok daha az katkıda bulunduğu anlamına gelir.

Yöntem 3: Tamam, şimdi notalarda çok hoş bir tonumuz var, ancak yine de oldukça önemli bir sorun var: sabit bir ses seviyesinde sabit bir süre boyunca çalıyorlar. Gerçek bir enstrüman gibi ses çıkarmak için çalınan bir telin hacmi zamanla düzgün bir şekilde azalmalıdır. Bunu başarmak için, bir dizi, üstel olarak azalan bir fonksiyonun değerleriyle doldurulur. Şimdi, ses örnekleri oluşturulurken, önceki yöntemde olduğu gibi her bir diziden gelen ses hesaplanır, ancak ses örneğine eklenmeden önce, üstel bozulma işlevi dizisindeki o dizilerin dizi indeksindeki değerle çarpılır. Bu, sesin zamanla sorunsuz bir şekilde dağılmasını sağlar. Dizi dizini, bozulma dizisinin sonuna ulaştığında, dizi durdurulur.

Yöntem 4: Bu son adım, dize seslerine gerçekçi dize sesini gerçekten veren şeydir. Önceleri kulağa hoş geliyordu ama açıkça sentezlenmişti. Gerçek dünyadaki bir arp dizesini daha iyi taklit etmeye çalışmak için her harmoniğe farklı bir bozulma hızı atanır. Gerçek dizelerde, dize ilk vurulduğunda, bir dizeden beklediğimiz türde bir koparma sesi yaratan yüksek frekanslı harmonik içeriği vardır. Bu yüksek frekanslı harmonikler çok kısaca sesin ana kısmıdır, vurulan telin sesidir, ancak daha yavaş harmonikler devraldıkça çok hızlı bir şekilde bozulurlar. Ses sentezinde kullanılan her harmonik sayı için her biri kendi bozulma hızına sahip bir bozunma dizisi oluşturulur. Artık her harmonik, dizenin dizi dizinindeki karşılık gelen bozunma dizisinin değeriyle bağımsız olarak çarpılabilir ve sese eklenebilir.

Genel olarak ses sentezi sezgiseldir ancak hesaplama ağırdır. Tüm dize sesini bir kerede bellekte saklamak çok fazla bellek gerektirir, ancak sinüs dalgasını ve her kare arasındaki üstel işlevi hesaplamak, ses çalma hızına ayak uydurmak için çok uzun sürer. Hesaplamayı hızlandırmak için kodda bir takım hileler kullanılır. Sinüs ve üstel bozulma tablolarının ilk oluşturulması dışında tüm matematik, 24 bit ses çıkışındaki mevcut sayısal alanın yayılmasını gerektiren tamsayı formatında yapılır. Örneğin, sinüs tablosunun genliği 150'dir, bu nedenle düzgündür, ancak birlikte çalınan birçok dizi 24 bitten fazla ekleyebilecek kadar büyük değildir. Benzer şekilde, üstel tablo değerleri tam sayılara yuvarlanmadan ve saklanmadan önce 80 ile çarpılır. Harmonik ağırlıklar 0 ile 10 arasında ayrı değerler alabilir. Ayrıca tüm örnekler aslında iki katına çıkar ve sinüs dalgaları 2'lerle indekslenir, bu da örnekleme oranını etkin bir şekilde yarıya indirir. Bu, çalınabilecek maksimum frekansı sınırlar, ancak mevcut dizi ve harmonik sayısının yeterince hızlı bir şekilde hesaplanması için gerekliydi.

Bu ses modelini oluşturmak ve çalıştırmak, işlemci tarafında büyük çaba gerektirdi ve bu projenin zaman çerçevesinde fpga tarafında sıfırdan çalışmasını sağlamak inanılmaz derecede zor olurdu (bit akışını her seferinde yeniden oluşturmanız gerektiğini düşünün). sesi test etmek için bir verilog parçasının değiştirildiği zaman). Bununla birlikte, bunu fpga'da yapmak muhtemelen daha iyi bir yol olabilir, muhtemelen örnekleri yeterince hızlı hesaplayamama sorununu ortadan kaldırabilir ve daha fazla dizi, harmonik ve hatta ses efektlerinin veya diğer görevlerin çalıştırılmasına izin verebilir. işlemci tarafı

Adım 6: Sensörleri Kablolama

Sensörleri Kablolama
Sensörleri Kablolama

Dizileri oluşturmak için, dizinin ne zaman çalındığını algılayacak olan IR kırılma ışını sensörlerini kullandık. Sensörlerimizi aşağıdaki linkten sipariş ettik. Sensörlerde bir güç, toprak ve veri kablosu bulunurken yayıcılarda yalnızca bir güç ve topraklama kablosu bulunur. Hem emitörlere hem de sensörlere güç sağlamak için PMOD başlıklarından 3,3 V ve topraklama pimlerini kullandık. Tüm sensörlere ve emitörlere güç sağlamak için tüm sensörleri ve emitörü paralel olarak bağlamak gerekir. Sensörlerden gelen veri kablolarının her birinin kendi pmod pinine gitmesi gerekecektir.

Adım 7: İskeletin İnşası

İskeletin İnşası
İskeletin İnşası

Arpın şeklini oluşturmak için üç parça, sensörleri ve emitörleri yerleştirmek için bir iskelet olarak kullanılır. 18 inçlik iki PVC boru parçasından birinde sensörleri ve emitörleri birbirinden 1,5 inç aralıklarla sırayla hizalayın ve ardından boruya bantlayın. Diğer 18 inç PVC boruda, sensörleri ve emitörleri dönüşümlü olarak hizalayın, ancak sırayı dengelediğinizden emin olun (yani, ilk boruda bir sensör varsa, ilk önce ikinci bir emitöre sahip olmalıdır ve bunun tersi de geçerlidir). Panoya ulaşabilmelerini sağlamak için veri, güç ve topraklama kablolarına daha uzun kabloları lehimlemek gerekecektir.

Adım 8: Ahşap Dış Cepheyi İnşa Etme

Ahşap Dış Cepheyi İnşa Etmek
Ahşap Dış Cepheyi İnşa Etmek

Bu adım isteğe bağlıdır, ancak şiddetle tavsiye edilir. Ahşap dış kısım sadece arpın güzel görünmesini sağlamakla kalmaz, aynı zamanda sensörleri ve telleri hasardan korur. Ahşap çerçeve, ahşaptan içi boş bir dikdörtgen halka ile oluşturulabilir. Dikdörtgenin iç kısmında boru ve sensör iskeletine uyması için en az 1-1 / 2 inçlik bir açıklığa sahip olması gerekir. Çerçeve oluşturulduktan sonra, sensörden ve yayıcılardan gelen kabloların panoya bağlanması için dışarı çıkmasına izin verecek iki delik açın.

*Not: Onarım veya küçük ayarlamalar yapılması gerektiğinde boru iskeletinin çıkarılıp takılabilmesi için erişim noktalarının eklenmesi önerilir.

9. Adım: Tüm Parçaları Bir Araya Getirmek

Tüm Parçaları Birleştirmek
Tüm Parçaları Birleştirmek

Önceki tüm adımlar bittiğinde, arp inşa etme zamanı gelmiştir. Önce boru iskeletini ahşap dış cephenin içine yerleştirin. Ardından sensörlerin ve emitörlerin kablolarını kartta doğru konuma takın. Ardından SDK'yı açın ve kartı programlamak için hata ayıklama düğmesine tıklayın. Kart programlandıktan sonra bir çift kulaklık veya hoparlör takın. Hangi sensörün hangi pmod portunda bittiğine bağlı olarak, arp'ınızın dizeleri muhtemelen başlangıçta bozuk olacaktır. Bu kadar çok kablo söz konusu olduğunda hangi kablonun hangi sensöre gittiğini söylemek zor olabileceğinden, yazılımdaki bit konumlarını kesmek için dizi numaralarını eşlemenin bir yolunu ekledik. "static int sensor_map[NUM_STRINGS]" öğesini bulun ve dizeler sırayla en düşükten en yükseğe oynayana kadar dizideki değerleri ayarlayın.

Menü, bir seri terminal (örn. RealTerm) açarak ve baud hızını 115200'e ve ekranı ANSI'ye ayarlayarak kullanılabilir. Menüde yukarı ve aşağı hareket etmek için w ve s tuşları ve değerleri değiştirmek için a ve d tuşları kullanılarak gezinilebilir.

Adım 10: ÇIKARIN

Arp tamamen işlevsel olduğunda. Arpta ustalaşın ve kendi müziğinizin tatlı sesini dinleyin!

Önerilen: