Spisu treści:

Laserowy syntezator harfy na płycie Zybo: 10 kroków (ze zdjęciami)
Laserowy syntezator harfy na płycie Zybo: 10 kroków (ze zdjęciami)

Wideo: Laserowy syntezator harfy na płycie Zybo: 10 kroków (ze zdjęciami)

Wideo: Laserowy syntezator harfy na płycie Zybo: 10 kroków (ze zdjęciami)
Wideo: kierunek MUZYKA odc. 8: dźwięki przyszłości. 2024, Listopad
Anonim
Laserowy syntezator harfowy na płycie Zybo
Laserowy syntezator harfowy na płycie Zybo

W tym samouczku stworzymy w pełni funkcjonalną harfę laserową za pomocą czujników podczerwieni z interfejsem szeregowym, który pozwoli użytkownikowi na zmianę strojenia i tonu instrumentu. Ta harfa będzie remake'iem wiekowego instrumentu XXI wieku. System został stworzony przy użyciu płytki rozwojowej Xilinx Zybo wraz z pakietami Vivado Design Suites. Co będziesz potrzebować do ukończenia projektu:

  • 12 czujników i emiterów podczerwieni (można użyć mniej lub więcej w zależności od liczby ciągów)
  • Płytka rozwojowa Zybo Zynq-7000
  • Darmowe RTOS
  • Apartament Vivado Design
  • Przewód (do podłączenia czujników do płytki)
  • 3 kawałki rury PCV ((2) 18 cali i (1) 8 cali)
  • 2 kolanka PCV

Krok 1: Zdobądź demo audio Zybo DMA firmy Digilent

Strona FPGA tego projektu opiera się w dużej mierze na projekcie demonstracyjnym, który można znaleźć tutaj. Wykorzystuje bezpośredni dostęp do pamięci, aby wysyłać dane bezpośrednio z pamięci, które procesor może zapisać poprzez strumień AXI do bloku audio I2S. Poniższe kroki pomogą Ci uruchomić i uruchomić projekt demo audio DMA:

  1. Może być konieczna nowa wersja pliku tablicy dla tablicy Zybo. Postępuj zgodnie z tymi instrukcjami, aby uzyskać nowe pliki tablicy dla Vivado.
  2. Wykonaj kroki 1 i 2 w instrukcjach na tej stronie, aby otworzyć projekt demonstracyjny w Vivado. Użyj metody Vivado, a nie przekazywania sprzętowego SDK.
  3. Możesz otrzymać komunikat, który mówi, że niektóre z twoich bloków IP powinny zostać zaktualizowane. Jeśli tak, wybierz „Pokaż status IP”, a następnie w zakładce Status IP zaznacz wszystkie nieaktualne adresy IP i kliknij „Aktualizuj wybrane”. Po zakończeniu i pojawieniu się okna z pytaniem, czy chcesz wygenerować produkt wyjściowy, kliknij „Generuj”. Jeśli otrzymasz krytyczny komunikat ostrzegawczy, zignoruj go.
  4. Przełącz się z projektu do zakładki źródeł w Vivado, aby zobaczyć pliki źródłowe. Kliknij prawym przyciskiem myszy projekt bloku „design_1” i wybierz „Utwórz opakowanie HDL”. Po wyświetleniu monitu wybierz „skopiuj wygenerowane opakowanie, aby zezwolić na edycję użytkownika”. Zostanie wygenerowany plik opakowujący dla projektu.
  5. Teraz, gdy te krytyczne kroki, które zostały jakoś pominięte w innym samouczku, zostały zakończone, możesz wrócić do wcześniej połączonego samouczka i kontynuować od kroku 4 do końca i upewnić się, że projekt demonstracyjny działa poprawnie. Jeśli nie masz możliwości wprowadzenia dźwięku do nagrania, po prostu nagrywaj ze słuchawkami i słuchaj 5-10 sekundowego rozmytego dźwięku po naciśnięciu przycisku odtwarzania. Dopóki coś wychodzi z gniazda słuchawkowego po naciśnięciu przycisku odtwarzania, prawdopodobnie działa poprawnie.

Krok 2: Wprowadź zmiany w Vivado

Wprowadź pewne zmiany w Vivado
Wprowadź pewne zmiany w Vivado

Teraz masz działające demo audio DMA firmy Digilent, ale nie jest to wcale ostateczny cel. Musimy więc wrócić do Vivado i wprowadzić pewne zmiany, aby nasze czujniki można było podłączyć do nagłówków PMOD i wykorzystać ich wartość po stronie oprogramowania.

  1. Otwórz schemat blokowy w Vivado
  2. Utwórz blok GPIO, klikając prawym przyciskiem myszy w pustym miejscu na schemacie blokowym i wybierając z menu „Dodaj IP”. Znajdź i wybierz „AXI GPIO”.
  3. Kliknij dwukrotnie nowy blok IP iw oknie ponownego dostosowania adresu IP przejdź do zakładki Konfiguracja IP. Wybierz wszystkie wejścia i ustaw szerokość na dwanaście, ponieważ będziemy mieli 12 „strun” na naszej harfie i dlatego potrzebujemy 12 czujników. Jeśli chcesz używać mniej lub więcej czujników, odpowiednio dostosuj tę liczbę. Ustaw także włączenie przerwania.
  4. Kliknij prawym przyciskiem myszy nowy blok GPIO IP i wybierz „uruchom automatyzację połączenia”. Sprawdź pole AXI i kliknij OK. Powinno to automatycznie połączyć interfejs AXI, ale wyjścia bloku pozostawić niepodłączone.
  5. Aby zrobić miejsce na dodatkowe przerwanie, kliknij dwukrotnie blok IP xlconcat_0 i zmień liczbę portów z 4 na 5. Następnie możesz podłączyć pin ip2intc_irpt z nowego bloku GPIO do nowego nieużywanego portu w bloku xlconcat.
  6. Kliknij prawym przyciskiem myszy wyjście „GPIO” nowego bloku GPIO IP i wybierz „make external”. Znajdź miejsce, do którego prowadzi linia i kliknij mały boczny pięciokąt, a po lewej stronie powinno otworzyć się okno, w którym możesz zmienić nazwę. Zmień nazwę na "CZUJNIKI". Ważne jest, aby użyć tej samej nazwy, jeśli chcesz, aby dostarczony przez nas plik z ograniczeniami działał, w przeciwnym razie będziesz musiał zmienić nazwę w pliku z ograniczeniami.
  7. Wróć do zakładki źródeł, znajdź plik z ograniczeniami i zastąp go tym, który udostępniamy. Możesz wybrać zastąpienie pliku lub po prostu skopiować zawartość naszego pliku ograniczeń i wkleić go na zawartość starego. Jedną z ważnych rzeczy, które robi nasz plik z ograniczeniami, jest włączenie rezystorów pullup w nagłówkach PMOD. Jest to konieczne dla konkretnych czujników, których używaliśmy, jednak nie wszystkie czujniki są takie same. Jeśli twoje czujniki wymagają rezystorów pulldown, możesz zmienić każdą instancję „set_property PULLUP true” na „set_property PULLDOWN true”. Jeśli wymagają innej wartości rezystora niż ta na płytce, to można te linie usunąć i zastosować zewnętrzne rezystory. Nazwy pinów znajdują się w komentarzach w pliku ograniczeń i odpowiadają etykietom na pierwszym schemacie w Zybo Schematics stronę, którą można znaleźć tutaj. Jeśli chcesz użyć różnych pinów pmod, po prostu dopasuj nazwy w pliku ograniczeń do etykiet na schemacie. Używamy nagłówka PMOD JE i JD i używamy sześciu pinów danych na każdym, pomijając piny 1 i 7. Ta informacja jest ważna podczas podłączania czujników. Jak pokazano na schemacie, styki 6 i 12 na PMODS to VCC, a styki 5 i 11 są uziemione.
  8. Zregeneruj opakowanie HDL tak jak poprzednio, a następnie skopiuj i nadpisz starą. Kiedy to zrobisz, wygeneruj strumień bitów i wyeksportuj sprzęt, jak poprzednio, i ponownie uruchom SDK. Jeśli zostaniesz zapytany, czy chcesz zastąpić stary plik sprzętowy, odpowiedź brzmi: tak. Prawdopodobnie najlepiej jest zamknąć pakiet SDK podczas eksportowania sprzętu, aby został prawidłowo wymieniony.
  9. Uruchom SDK.

Krok 3: Uruchom FreeRTOS

Następnym krokiem jest uruchomienie FreeRTOS na płycie Zybo.

  1. Jeśli nie masz jeszcze kopii, pobierz FreeRTOS tutaj i rozpakuj pliki.
  2. Zaimportuj wersję demonstracyjną FreeRTOS Zynq znajdującą się pod adresem FreeRTOSv9.0.0\FreeRTOS\Demo\CORTEX_A9_Zynq_ZC702\RTOSDemo. Proces importowania jest prawie taki sam, jak w przypadku innego projektu demonstracyjnego, jednak ponieważ demo FreeRTOS Zynq opiera się na innych plikach w folderze FreeRTOS, nie należy kopiować plików do swojego obszaru roboczego. Zamiast tego należy umieścić cały folder FreeRTOS w folderze projektu.
  3. Utwórz nowy pakiet obsługi płyty, przechodząc do „plik” -> „nowy” -> „pakiet obsługi płyty”. Upewnij się, że wybrano opcję samodzielny i kliknij Zakończ. Po chwili pojawi się okno, zaznacz pole obok lwip141 (to zapobiega niepowodzeniu kompilacji jednego z dem FreeRTOS) i naciśnij OK. Po zakończeniu kliknij prawym przyciskiem myszy projekt RTOSdemo i przejdź do "właściwości", przejdź do zakładki "referencje projektu" i zaznacz pole obok utworzonego nowego bsp. Miejmy nadzieję, że zostanie rozpoznany, ale czasami SDK Xilinx może być dziwny w tego rodzaju rzeczach. Jeśli nadal pojawia się błąd po tym kroku, że brakuje xparameters.h lub coś w tym stylu, spróbuj powtórzyć ten krok i być może wyjść i ponownie uruchomić SDK.

Krok 4: Dodaj kod harfy laserowej

Po zaimportowaniu FreeRTOS możesz przenieść pliki z projektu laserowej harfy do wersji demonstracyjnej FreeRTOS

  1. Utwórz nowy folder w folderze src w demie FreeRTOS i skopiuj i wklej wszystkie dostarczone pliki c oprócz main.c do tego folderu.
  2. Zastąp RTOSDemo main.c dostarczonym main.c.
  3. Jeśli wszystko zostało zrobione poprawnie, powinieneś być w stanie uruchomić kod harfy laserowej w tym momencie. Do celów testowych wejście przycisku, które zostało użyte w projekcie demonstracyjnym DMA, jest teraz używane do odtwarzania dźwięków bez podłączonych czujników (działa dowolny z czterech głównych przycisków). Zagra strunę za każdym razem, gdy ją naciśniesz i przejdzie przez wszystkie struny w systemie przez wiele naciśnięć. Podłącz słuchawki lub głośniki do gniazda słuchawkowego na płycie Zybo i upewnij się, że po naciśnięciu przycisku słychać dźwięki strun.

Krok 5: O kodzie

Wielu z was czytających ten samouczek prawdopodobnie będzie tutaj, aby dowiedzieć się, jak skonfigurować dźwięk lub użyć DMA, aby zrobić coś innego lub stworzyć inny instrument muzyczny. Z tego powodu kilka następnych rozdziałów poświęconych jest opisaniu, jak dostarczony kod działa w połączeniu z wcześniej opisanym sprzętem, aby uzyskać działające wyjście audio przy użyciu DMA. Jeśli rozumiesz, dlaczego fragmenty kodu tam są, powinieneś być w stanie dostosować je do tego, co chcesz stworzyć.

Przerwania

Najpierw wspomnę jak tworzone są przerwania w tym projekcie. Sposób, w jaki to zrobiliśmy, polegał na utworzeniu najpierw struktury tablicy wektorów przerwań, która śledzi ID, procedurę obsługi przerwań i odniesienie do urządzenia dla każdego przerwania. Identyfikatory przerwań pochodzą z xparameters.h. Obsługa przerwań to funkcja, którą napisaliśmy dla DMA i GPIO, a przerwanie I2C pochodzi ze sterownika Xlic I2C. Odwołanie do urządzenia wskazuje na instancje każdego urządzenia, które inicjujemy w innym miejscu. Pod koniec funkcji _init_audio pętla przechodzi przez każdy element w tablicy wektorów przerwań i wywołuje dwie funkcje, XScuGic_Connect() i XScuGic_Enable(), aby połączyć i włączyć przerwania. Odwołują się do xInterruptController, który jest domyślnie kontrolerem przerwań tworzonym we FreeRTOS main.c. Więc w zasadzie dołączamy każde z naszych przerwań do tego kontrolera przerwań, który został już dla nas stworzony przez FreeRTOS.

DMA

Kod inicjalizacji DMA zaczyna się w lh_main.c. Najpierw deklarowana jest statyczna instancja struktury XAxiDma. Następnie w funkcji _init_audio() zostaje skonfigurowany. Najpierw wywoływana jest funkcja configure z projektu demo, która znajduje się w dma.c. Jest dość dobrze udokumentowany i pochodzi prosto z wersji demonstracyjnej. Następnie przerwanie zostaje połączone i włączone. W tym projekcie wymagane jest tylko przerwanie master-to-slave, ponieważ wszystkie dane są wysyłane przez DMA do kontrolera I2S. Jeśli chcesz nagrać dźwięk, będziesz także potrzebował przerwania slave-to-master. Przerwanie master-to-slave jest wywoływane, gdy DMA zakończy wysyłanie danych, które kazałeś mu wysłać. To przerwanie jest niezwykle ważne dla naszego projektu, ponieważ za każdym razem, gdy DMA zakończy wysyłanie jednego bufora próbek audio, musi natychmiast rozpocząć wysyłanie następnego bufora, w przeciwnym razie między wysyłkami pojawi się słyszalne opóźnienie. Wewnątrz funkcji dma_mm2s_ISR() możesz zobaczyć, jak radzimy sobie z przerwaniem. Ważna część jest pod koniec, gdzie używamy xSemaphoreGiveFromISR() i portYIELD_FROM_ISR(), aby powiadomić _audio_task(), że może zainicjować następny transfer DMA. Sposób, w jaki wysyłamy stałe dane audio, polega na naprzemiennym używaniu dwóch buforów. Kiedy jeden bufor jest przesyłany do bloku I2C, wartości drugiego bufora są obliczane i przechowywane. Następnie, gdy przerwanie pochodzi z DMA, aktywny bufor przełącza się i ostatnio zapisany bufor zaczyna być przesyłany, podczas gdy poprzednio przesłany bufor zaczyna być nadpisywany nowymi danymi. Kluczową częścią funkcji _audio_task jest miejsce, w którym wywoływana jest funkcja fnAudioPlay(). fnAudioPlay() pobiera instancję DMA, długość bufora oraz wskaźnik do bufora, z którego będą przesyłane dane. Kilka wartości jest wysyłanych do rejestrów I2S, aby wiedzieć, że nadchodzi więcej próbek. Następnie wywoływana jest funkcja XAxiDma_SimpleTransfer() w celu zainicjowania transferu.

Dźwięk I2S

audio.c i audio.h to miejsca, w których odbywa się inicjalizacja I2S. Kod inicjalizacji I2S jest dość powszechnym fragmentem kodu, który unosi się w wielu miejscach, możesz znaleźć niewielkie różnice w stosunku do innych źródeł, ale ten powinien działać. Jest to dość dobrze udokumentowane i nie wymagało zbyt wiele zmian w projekcie harfy. Demo audio DMA, z którego pochodzi, ma funkcje przełączania na wejścia mikrofonowe lub liniowe, dzięki czemu możesz z nich korzystać, jeśli potrzebujesz tej funkcji.

Synteza dźwięku

Aby opisać, jak działa synteza dźwięku, wymienię każdy z modeli dźwiękowych użytych w rozwoju, który doprowadził do ostatecznej metody, ponieważ da ci to poczucie, dlaczego jest to zrobione tak, jak jest zrobione.

Metoda 1: Jeden okres wartości sinusoidalnych jest obliczany dla każdej struny z odpowiednią częstotliwością dla nuty muzycznej tej struny i przechowywany w tablicy. Na przykład długość tablicy będzie okresem przebiegu sinusoidalnego w próbkach, który jest równy # próbek / cykl. Jeśli częstotliwość próbkowania wynosi 48kHz, a częstotliwość nut wynosi 100Hz, to jest 48 000 próbek na sekundę i 100 cykli na sekundę, co daje 4800 próbek na cykl, a długość tablicy będzie wynosić 4800 próbek i będzie zawierać wartości jednej pełnej okres sinusoidalny. Kiedy ciąg jest odtwarzany, bufor próbek audio jest wypełniany przez pobranie wartości z tablicy fal sinusoidalnych i umieszczenie jej w buforze audio jako próbki, a następnie zwiększenie indeksu do tablicy fal sinusoidalnych, tak aby w trakcie korzystania z naszego poprzedniego przykładu z 4800 próbek jeden cykl sinusoidalny jest umieszczany w buforze audio. Operacja modulo jest używana na indeksie tablicy, tak że zawsze mieści się on w zakresie od 0 do długości, a gdy indeks tablicy przekracza pewien próg (np. wartość próbek może wynosić 2 sekundy), łańcuch jest wyłączany. Aby odtwarzać wiele strun w tym samym czasie, śledź oddzielnie indeks tablicy każdego strun i dodaj wartość z fali sinusoidalnej każdego strun, aby uzyskać każdą próbkę.

Metoda 2: Aby stworzyć bardziej muzyczny ton, zaczynamy od poprzedniego modelu i dodajemy harmoniczne do każdej częstotliwości podstawowej. Częstotliwości harmoniczne to częstotliwości będące całkowitymi wielokrotnościami częstotliwości podstawowej. W przeciwieństwie do sumowania dwóch niepowiązanych częstotliwości, co skutkuje równoczesnym odtwarzaniem dwóch różnych dźwięków, po dodaniu do siebie harmonicznych brzmi to jak jeden dźwięk, ale z innym tonem. Aby to osiągnąć, za każdym razem, gdy dodajemy wartość fali sinusoidalnej w lokalizacji (indeks tablicy % długości tablicy) do próbki audio, dodajemy również (2 * indeks tablicy % długość tablicy) i (3 * indeks tablicy % długość tablicy) i tak dalej, niezależnie od tego, ile harmonicznych jest pożądanych. Te pomnożone indeksy przechodzą przez falę sinusoidalną z częstotliwościami będącymi całkowitymi wielokrotnościami częstotliwości pierwotnej. Aby umożliwić większą kontrolę tonu, wartości każdej harmonicznej są mnożone przez zmienną, która reprezentuje ilość tej harmonicznej w całym dźwięku. Na przykład fundamentalna fala sinusoidalna może mieć wszystkie wartości pomnożone przez 6, aby uczynić ją bardziej czynnikiem w ogólnym brzmieniu, podczas gdy piąta harmoniczna może mieć mnożnik równy 1, co oznacza, że jej wartości mają znacznie mniejszy udział w ogólnym brzmieniu.

Metoda 3: OK, więc teraz mamy bardzo ładny ton nut, ale wciąż pozostaje dość istotny problem: grają ze stałą głośnością przez ustalony czas. Aby w ogóle brzmiała jak prawdziwy instrument, głośność granej struny powinna z czasem gładko zanikać. Aby to osiągnąć, tablica jest wypełniana wartościami funkcji zanikającej wykładniczo. Teraz, gdy tworzone są próbki audio, dźwięk pochodzący z każdego ciągu jest obliczany tak jak w poprzedniej metodzie, ale zanim zostanie dodany do próbki audio, zostanie pomnożony przez wartość w indeksie tablicy tych ciągów w tablicy funkcji wykładniczego zaniku. To sprawia, że dźwięk z czasem rozchodzi się płynnie. Gdy indeks tablicy osiągnie koniec tablicy rozpadu, ciąg jest zatrzymywany.

Metoda 4: Ten ostatni krok jest tym, co naprawdę nadaje dźwiękom struny ich realistyczny dźwięk. Wcześniej brzmiały przyjemnie, ale wyraźnie zsyntetyzowane. Aby spróbować lepiej naśladować strunę harfy w świecie rzeczywistym, do każdej harmonicznej przypisywana jest inna szybkość wybrzmiewania. W prawdziwych strunach, gdy struna zostaje uderzona po raz pierwszy, występuje wysoka zawartość harmonicznych wysokiej częstotliwości, które tworzą rodzaj szarpiącego dźwięku, jakiego oczekujemy od struny. Te wysokie częstotliwości harmoniczne są bardzo krótko główną częścią dźwięku, dźwiękiem uderzanej struny, ale zanikają bardzo szybko, gdy wolniejsze harmoniczne przejmują kontrolę. Dla każdej liczby harmonicznej używanej w syntezie dźwięku tworzona jest tablica zaniku, każda z własną szybkością zaniku. Teraz każda harmoniczna może być niezależnie pomnożona przez wartość odpowiadającej jej tablicy zaniku na indeksie tablicy struny i dodana do dźwięku.

Ogólnie synteza dźwięku jest intuicyjna, ale ciężka kalkulacja. Przechowywanie całego dźwięku struny w pamięci zajęłoby zbyt dużo pamięci, ale obliczenie fali sinusoidalnej i funkcji wykładniczej między każdą klatką zajęłoby zbyt dużo czasu, aby nadążyć za szybkością odtwarzania dźwięku. W kodzie zastosowano szereg sztuczek, aby przyspieszyć obliczenia. Cała matematyka, z wyjątkiem początkowego tworzenia tablic sinusoidalnych i wykładniczych, jest wykonywana w formacie całkowitym, co wymaga rozłożenia dostępnej przestrzeni numerycznej na 24-bitowym wyjściu audio. Na przykład tablica sinusów ma amplitudę 150, więc jest gładka, ale nie tak duża, aby wiele strun granych razem mogło mieć ponad 24 bity. Podobnie wykładnicze wartości tabeli są mnożone przez 80 przed zaokrągleniem do liczb całkowitych i zapisaniem. Wagi harmoniczne mogą przyjmować wartości dyskretne od 0 do 10. Również wszystkie próbki są faktycznie podwajane, a fale sinusoidalne są indeksowane przez dwójki, co skutecznie zmniejsza o połowę częstotliwość próbkowania. Ogranicza to maksymalną częstotliwość, która może być odtwarzana, ale było konieczne, aby aktualna liczba strun i harmonicznych została obliczona wystarczająco szybko.

Stworzenie tego modelu dźwięku i uruchomienie go wymagało znacznego wysiłku po stronie procesora i byłoby niezwykle trudno uruchomić go od zera po stronie FPGA w ramach czasowych tego projektu (wyobraź sobie, że musisz odtwarzać strumień bitów za każdym razem raz kawałek Verilog został zmieniony, aby przetestować dźwięk). Jednak zrobienie tego na FPGA może być prawdopodobnie lepszym sposobem na zrobienie tego, być może eliminując problem braku możliwości obliczenia próbek wystarczająco szybko i pozwalając na uruchomienie większej liczby strun, harmonicznych, a nawet efektów dźwiękowych lub innych zadań na po stronie procesora.

Krok 6: Okablowanie czujników

Podłączanie czujników
Podłączanie czujników

Do stworzenia strun wykorzystaliśmy czujniki wiązki podczerwieni, które wykryją, kiedy struna jest grana. Zamówiliśmy nasze czujniki z poniższego linku. Czujniki mają przewód zasilający, uziemiający i danych, podczas gdy emitery mają tylko przewód zasilający i uziemiający. Użyliśmy pinów 3,3 V i uziemienia z gniazd PMOD do zasilania zarówno emiterów, jak i czujników. Do zasilania wszystkich czujników i emiterów konieczne jest równoległe połączenie wszystkich czujników i emiterów. Przewody danych z czujników będą musiały iść do własnego pinu pmod.

Krok 7: Konstruowanie szkieletu

Konstruowanie szkieletu
Konstruowanie szkieletu

W celu stworzenia kształtu harfy te trzy elementy służą jako szkielet, na którym umieszcza się czujniki i emitery. Na jednym z dwóch 18-calowych kawałków rury PVC dopasuj czujniki i emitery w naprzemiennej kolejności 1,5 cala od siebie, a następnie przyklej je do rury. Na drugiej 18-calowej rurze PVC wyrównaj czujniki i emitery w kolejności naprzemiennej, ale upewnij się, że kolejność jest przesunięta (tj. jeśli pierwsza rura miała czujnik jako pierwsza, druga powinna mieć najpierw emiter i odwrotnie). Konieczne będzie przylutowanie dłuższych przewodów do przewodów danych, zasilania i uziemienia, aby zapewnić, że będą mogły dotrzeć do płytki.

Krok 8: Budowanie zewnętrznej części drewna

Budowanie zewnętrznej części drewna
Budowanie zewnętrznej części drewna

Ten krok jest opcjonalny, ale wysoce zalecany. Drewniana obudowa nie tylko sprawia, że harfa wygląda ładnie, ale także chroni czujniki i przewody przed uszkodzeniem. Drewnianą ramę można stworzyć za pomocą pustego prostokątnego pierścienia z drewna. Wnętrze prostokąta musi mieć otwór o wielkości co najmniej 1-1/2 cala, aby pasował do rury i szkieletu czujnika. Po zbudowaniu ramy wywierć dwa otwory, które pozwolą wyprowadzić przewody z czujnika i emiterów w celu połączenia ich z płytką.

*Uwaga: Zaleca się dodanie punktów dostępowych, aby móc wyjąć i włożyć szkielet rury w przypadku konieczności naprawy lub drobnych regulacji.

Krok 9: Łączenie wszystkich elementów razem

Składanie wszystkich elementów razem
Składanie wszystkich elementów razem

Po zakończeniu wszystkich poprzednich kroków nadszedł czas na skonstruowanie harfy. Najpierw umieść szkielet rury wewnątrz drewnianej powierzchni zewnętrznej. Następnie podłącz przewody czujników i emiterów we właściwym miejscu na płytce. Następnie otwórz SDK i kliknij przycisk debugowania, aby zaprogramować płytkę. Po zaprogramowaniu płytki podłącz słuchawki lub głośnik. W zależności od tego, który czujnik znajdzie się w którym porcie pmod, struny twojej harfy będą prawdopodobnie na początku niesprawne. Ponieważ może być trudno powiedzieć, który przewód idzie do którego czujnika, gdy zaangażowanych jest tak wiele przewodów, wprowadziliśmy sposób mapowania numerów ciągów w celu przerwania pozycji bitów w oprogramowaniu. Znajdź „static int sensor_map[NUM_STRINGS]” i dostosuj wartości w tablicy, aż ciągi będą odtwarzane w kolejności od najniższej do najwyższej.

Z menu można korzystać otwierając terminal szeregowy (np. RealTerm) i ustawiając szybkość transmisji na 115200, a wyświetlacz na ANSI. Po menu można poruszać się za pomocą klawiszy w i s do poruszania się w górę iw dół oraz klawiszy a i d do zmiany wartości.

Krok 10: ROZKOSZUJ

Gdy harfa jest w pełni sprawna. Opanuj harfę i słuchaj słodkiego brzmienia własnej muzyki!

Zalecana: