Spisu treści:

Kask Spartan Voice Changer: 14 kroków (ze zdjęciami)
Kask Spartan Voice Changer: 14 kroków (ze zdjęciami)

Wideo: Kask Spartan Voice Changer: 14 kroków (ze zdjęciami)

Wideo: Kask Spartan Voice Changer: 14 kroków (ze zdjęciami)
Wideo: Ups. 2024, Listopad
Anonim
Kask Spartan Voice Changer
Kask Spartan Voice Changer
Kask Spartan Voice Changer
Kask Spartan Voice Changer

Cześć! Jesteśmy zespołem 4 studentów z Politechniki Sorbony:

  • Louis Buchert
  • Bilal Melehi
  • Bao Tinh Piot
  • Marco Longépé

Projekt ten realizowany jest w ramach naszych studiów i ma na celu zapoznanie się z szeregiem narzędzi, a także zademonstrowanie naszego dorobku teoretycznego.

Słynny obiekt przybiera wygląd hełmu przypominającego hełm bohatera pewnej gry wideo, której imię zostanie utracone. Od strony projektowej mamy również ekran, który wyświetla transformację Fouriera sygnału audio wychodzącego z głośnika. Celem tego zestawu słuchawkowego jest zmiana głosu nosiciela w czasie rzeczywistym za pomocą wielu efektów do wyboru.

Cele edukacyjne:

  • Uchwyć dźwięk z mikrofonu
  • Wzmacniaj, filtruj, digitalizuj sygnał
  • Zrealizuj FFT sygnału
  • Pokaż tę FFT na ekranie
  • Synteza sygnału
  • Wydobądź dźwięk z głośnika
  • Realizuj efekty na dźwięku audio (pogłos, echo itp.)

Teraz, gdy umieściliśmy tło i zaprezentowaliśmy projekt, czas wziąć go w ręce!

Krok 1: Wymagania 1/3 - Sprzęt

Wymagania 1/3 - Sprzęt
Wymagania 1/3 - Sprzęt

Aby pomyślnie zbudować kask, będziemy potrzebować sprzętu do uruchomienia urządzenia.

  • Płytka rozwojowa DE0-Nano-SoC firmy Terasic + ekran TFT LCD Adafruit (Arduino)
  • Dostęp do drukarki 3D do wykonania kasku (jeśli jesteś studentem, zbliż się do swojej uczelni, niektóre mają laboratoria dostępne dla studentów)
  • Komputer z łączem internetowym i minimum łączności (USB, Ethernet). Komputer musi mieć również mocny procesor, ponieważ kompilowanie programów na Qsys zajmuje dużo czasu.
  • (Niewymagane) Drukarka wykonująca obwody drukowane (PCB) z plików Gerber w celu zmniejszenia obwodu + lutownica do umieszczania komponentów na PCB.
  • (Zdecydowanie zalecane): Dobra kawa, aby cieszyć się pracą z naszym Instructable:)

Krok 2: Wymagania 2/3 – Komponenty dla Twojego obwodu

Wymagania 2/3 - Komponenty do Twojego obwodu
Wymagania 2/3 - Komponenty do Twojego obwodu
Wymagania 2/3 - Komponenty do Twojego obwodu
Wymagania 2/3 - Komponenty do Twojego obwodu
Wymagania 2/3 - Komponenty do Twojego obwodu
Wymagania 2/3 - Komponenty do Twojego obwodu

Oto komponenty potrzebne do twojego obwodu:

  • Wzmacniacz audio klasy Texas Instrument LM386 AB
  • Chlebak
  • Zestaw kabli męsko-męskich, męsko-żeńskich
  • Przetwornik cyfrowo-analogowy LM358P (DAC)
  • Głośnik
  • Mały mikrofon używany w obwodzie analogowym
  • Zestaw rezystorów do gier od 1kOhm do 220kOhm
  • Kondensator 1,5nF
  • Kondensator 50nF
  • Kondensator 100nF
  • Kondensator 100uF
  • Kondensator 220uF
  • x4 Kondensatory 10uF

Krok 3: Wymagania 3/3 - Oprogramowanie

Wymagania 3/3 - Oprogramowanie
Wymagania 3/3 - Oprogramowanie
Wymagania 3/3 - Oprogramowanie
Wymagania 3/3 - Oprogramowanie

Last but not least, będziesz potrzebować oprogramowania:

  • Quartus 15.1: wersja Lite
  • Kompilator C (na przykład gcc)
  • Altium do projektowania PCB
  • Wbudowany pakiet SoC firmy Altera do komunikacji z mapą SoC

  • Kit

Krok 4: Obwód wejściowy

Obwód wejściowy
Obwód wejściowy
Obwód wejściowy
Obwód wejściowy
Obwód wejściowy
Obwód wejściowy
Obwód wejściowy
Obwód wejściowy

Zbudujmy obwód. Skorzystaj z powyższego obrazu obwodu, aby złożyć go na swojej płytce stykowej. Zobaczysz również zdjęcie płyty BreadBoard i obwodu wewnątrz, aby zobaczyć, jak połączone są piny. Cały obwód zasilany jest prądem stałym 5V (DC). W tym celu można użyć baterii 5V z konwerterem USB-B lub generatora funkcji.

Niektóre przypomnienia:

  • Zasilanie 5V i uziemienie są połączone osobnymi poziomymi liniami płytki stykowej
  • Jeśli chcesz połączyć 2 elementy równolegle, umieść je we wspólnej linii płytki stykowej
  • Jeśli chcesz połączyć 2 komponenty szeregowe, komponenty muszą mieć tylko jeden pin we wspólnej linii płytki stykowej.

Nie wahaj się i obejrzyj dedykowany samouczek dotyczący korzystania z płytki stykowej i budowania na niej obwodu. Nie zapomnij również uważnie przeczytać położenie pinów wzmacniacza audio LM358P (patrz zdjęcie powyżej)

Krok 5: Obwód wyjściowy

Obwód wyjściowy
Obwód wyjściowy
Obwód wyjściowy
Obwód wyjściowy
Obwód wyjściowy
Obwód wyjściowy
Obwód wyjściowy
Obwód wyjściowy

Zupełnie takie same instrukcje jak w kroku 4. Cztery wejścia: SDI, nie CS, SCK, nie LDAC pochodzą z płyty DE0-Nano-Soc. Zobaczymy później, jak je wygenerować.

Nie zapomnij uważnie przeczytać pozycji pinów wzmacniacza audio LM386 (patrz zdjęcie powyżej)

Krok 6: [OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania

[OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania
[OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania
[OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania
[OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania
[OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania
[OPCJONALNIE] Tworzenie płytki drukowanej i elementów do lutowania

Jeśli masz szczęście posiadać drukarkę płytek drukowanych lub możesz z niej korzystać, stworzymy własną płytkę drukowaną (PCB). Pamiętaj, że ten krok jest opcjonalny. Ten krok polega jedynie na przeniesieniu obwodu z płytki stykowej na płytkę drukowaną.

Będziesz potrzebował tych 2 plików GERBER.

Te pliki zostały wykonane na Altium. Użyj ich w oprogramowaniu drukarki PCB, aby wydrukować PCB. Po otrzymaniu PCB upewnij się, że jest ona czysta, a ścieżki są prawidłowo wydrukowane.

Teraz nadchodzi prawdziwa okazja: lutowanie. 2 zdjęcia powyżej to mapa układu na płytce drukowanej. Każdy element ma nazwy (R6, C4, MK1 itd.). Zdjęcia w krokach 4 i 5 pokazują parametry elementów (rezystancja, przewodność…). Umieść każdy element z płytki stykowej na płytce drukowanej zgodnie z ich nazwami.

Po przylutowaniu wszystkiego lutownicą, przetestuj każdy element woltomierzem, aby sprawdzić, czy nie ma zwarcia.

Krok 7: Konfiguracja SoC

Konfiguracja SoC
Konfiguracja SoC
Konfiguracja SoC
Konfiguracja SoC

Jeśli chodzi o konfigurację SoC, będziesz musiał uruchomić niektóre polecenia i skrypty zawarte w pakiecie SoC wbudowanym w terminalu. Aby to zrobić, będziesz musiał dodać trochę $PATH. PATH są używane w terminalu, aby powiedzieć, że szuka pliku w katalogach podanych przez path podczas uruchamiania polecenia. Aby to zrobić, wpisz następującą linię poleceń:

eksportuj PATH=/cygdrive/c/altera_lite/15.1/quartus/sopc_builder/bin:$PATH

Następnie wpisz wiersz poleceń, aby wygenerować nagłówki z pliku sof. Plik soft uzyskasz, kompilując swój projekt na Quartus. W tym celu wpisz:./generate_header.

Krok 8: Programowanie C HPS

Programowanie C HPS
Programowanie C HPS

W tej części musimy zrealizować 2 rzeczy, a mianowicie odczytać wartość ADC i zapisać ją w SPI.

1. Przeczytaj wartość ADC

Adres pamięci, w której znajduje się ADC, nie jest bezpośrednio dostępny, w rzeczywistości system linux obecny na karcie tworzy abstrakcję pamięci. Aby naprawdę uzyskać dostęp do adresu ADC, użyjemy funkcji mmap.

"h2p_lw_spi_addr=virtual_base + ((długi bez znaku)(ALT_LWFPGASLVS_OFST + SPI_0_BASE) & (długi bez znaku)(HW_REGS_MASK));"

Ta instrukcja umożliwia dodanie przesunięcia na początku adresu bazowego, aby osiągnąć adres pamięci przydzielonej dla przetwornika ADC i wykonanie na otrzymanym adresie logicznego AND, aby uwzględnić maskowanie.

Następnie wystarczy wyłuskać wskaźnik w programie, aby uzyskać jego wartość.

2. Wpisz wartość ADC w SPI

Manipulacja jest identyczna, tym razem dajemy mmapie offset do lądowania na adres przydzielony przez SPI. Pisząc w SPI, dokumentacja techniczna określa, że należy wpisać na adres + 1 wartość adc.

"*(h2p_lw_spi_addr+1) = ((0x1 << 12) | *h2p_lw_adc_addr);"

Ta instrukcja umożliwia pisanie do SPI. Rzeczywiście, bit 4, a więc 1 << 12, to bit, który pozwala aktywować SPI. W przypadku logicznego OR podajemy zatem zarówno bit aktywacji, jak i wartość ADC do SPI.

Krok 9: Cyfrowe pozyskiwanie ADC z karty

Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty
Cyfrowe pozyskiwanie ADC z karty

Przede wszystkim będziesz musiał ustawić adres Ethernet IP swojego komputera poprzez Panel sterowania -> Sieć -> Parmesals kart. Wybierz interfejs Ethernet karty, właściwość, adres IPv4 i wprowadź stały adres IP, maskę itp.

Następnie podłącz kartę od strony gniazda zasilania za pomocą kabla micro USB. Otwórz programator Quartus i uruchom eksport. Ta manipulacja zostanie powtórzona po każdym wyłączeniu karty.

Zmień kabel z wtyczką micro USB, aby podłączyć tym razem obok gniazda Ethernet. Teraz z Putty konieczne będzie połączenie z kartą łączem szeregowym. Konfiguracja jest widoczna na zdjęciach, pomysł polega na zastąpieniu COM5 przez COM, a następnie numer, który można znaleźć w menedżerze urządzeń (kliknij prawym przyciskiem myszy na logo Windows, aby je otworzyć).

Naciśnij enter, jesteś podłączony.

Informacje o ponownym uruchomieniu projektu: - Napraw ethernet ip odpowiadające karcie - Włącz kartę, po każdym włączeniu zasilania należy umieścić za pomocą "programu" pod quartus projekt skompilowany na karcie. Odbywa się to przez port micro-USB - Aby móc wyświetlić wynik programu używamy więcej micro USB ale UART - Z kitem skonfigurowanym na port szeregowy COM5 (lub 6 zegarków gestinnaire periph) Podłączamy do karty. - Ustaw hasło (passwd) - Ustaw adres IP ifconfig ethxx IPchoice (IP niedaleko tego dla eth komputera) - Generuj nagłówek zgodnie z Qsys z wbudowanym terminalem (export PATH) - make - scp l exec w mapa - wykonaj pod szpachelką program

Krok 10: Obliczanie FFT

Obliczanie FFT
Obliczanie FFT

Aby uzyskać szybką transformację Fouriera w naszym programie C, użyjemy biblioteki napisanej przez Marka Borgerdinga: Kiss FFT. Bibliotekę można pobrać tutaj: https://kissfft.sourceforge.net/. Zastosowanie FFT do sygnału jest konieczne w celu modyfikacji i zastosowania efektów sygnału. Może również służyć do wyświetlania widma sygnału.

Pierwszym krokiem w twoim programie w C jest przydzielenie pamięci w celu przechowania wyniku FFT. Rozmiar pamięci zależy od liczby punktów użytych do obliczenia FFT. Im więcej masz punktów, tym bardziej precyzyjna będzie gra FFT. Jednak program będzie działał wolniej i będzie zużywał więcej pamięci. Zauważ, że otrzymasz dwie tablice z funkcji kiss_fft: wejście i wyjście funkcji (cx_in i cx_out)

Gdy nasza tablica zostanie wypełniona nowymi wartościami FFT, tj. gdy r = Win - 1, przetwarzamy FFT. Jeśli chodzi o wyświetlacz, wyświetlamy tylko dodatnią część widma, ponieważ istnieje symetria między częścią ujemną a częścią dodatnią.

W odniesieniu do osi poziomej zmniejszamy wartości szczytowe o 100*wysokość/(wysokość²) w celu rozróżnienia szczytów głównych częstotliwości.

Używamy wywołania systemowego usleep w celu zdefiniowania częstotliwości odczytu wartości ADC. Ta częstotliwość jest obecnie ustawiona na 1,5 Hz.

Krok 11: Wyświetlanie FFT

Wyświetlanie FFT
Wyświetlanie FFT
Wyświetlanie FFT
Wyświetlanie FFT

Na podstawie przykładu podanego na ekranie Adafruit TFT LCD dostępnym tutaj: https://www.terasic.com/downloads/cd-rom/de0-nano-s… zaprogramowaliśmy NIOS naszej płytki tak, aby mógł czytać wartość ADC.

Tak więc rejestr ADC jest dzielony między NIOS i HPS, ponieważ wartości ADC będą używane do wyświetlania FFT na ekranie NIOS, a te same wartości zostaną zapisane w SPI w celu wyprowadzenia z płyty i ostatecznie przekonwertowania przez DAC, aby uzyskać sygnał analogowy.

Krok 12: Montaż

montaż
montaż

Już prawie skończyliśmy! Będziesz musiał złożyć każdą część projektu (obwód wejściowy, obwód wyjściowy i płytkę). Upewnij się, że części zostały połączone z właściwymi pinami zgodnie z projektem Quartus.

  1. Obwód wejściowy wyśle sygnał audio przechwycony przez mikrofon, wzmocniony, przefiltrowany i przesunięty.
  2. Program C obecny na karcie odczyta wartości ADC, jak widzieliśmy wcześniej, i zapisze je w SPI, abyśmy mogli odzyskać wartość z GPIO karty.
  3. Następnie wyjściowe GPIO SPI przekaże informacje, które zostaną zdekodowane przez nasz DAC i wzmocnione biegiem, aby dotrzeć do głośnika.

Krok 13: Efekty dźwiękowe

Efekty dźwiękowe
Efekty dźwiękowe
Efekty dźwiękowe
Efekty dźwiękowe

Jedyny krok w lewo to efekty dźwiękowe.

Dostępne efekty to:

  • Filtr wysokiej częstotliwości
  • Filtr niskiej częstotliwości

Możesz przełączać się między efektami za pomocą przycisku. Ten przycisk zmieni zmienną w naszym programie C, dzięki czemu będzie mógł zastosować odpowiedni efekt.

Krok 14: [OPCJONALNIE] Wykonanie hełmu

[OPCJONALNIE] Dokonywanie kasku
[OPCJONALNIE] Dokonywanie kasku
[OPCJONALNIE] Dokonywanie kasku
[OPCJONALNIE] Dokonywanie kasku
[OPCJONALNIE] Dokonywanie kasku
[OPCJONALNIE] Dokonywanie kasku

Tutaj jesteśmy w najbardziej ręcznym kroku projektu:

  1. Najpierw skleiliśmy różne wydrukowane w 3D części hełmu.
  2. Aby wypełnić luki między sklejonymi kawałkami, dodaliśmy wykończenie za pomocą długopisu 3D.
  3. Wypolerowaliśmy szczeliny wypełnione długopisem i ogólnie hełmem, aby obraz dobrze się potem trzymał.
  4. Pomalowaliśmy hełm 2 warstwami: pierwszą na antracytową czerń z bliska, a drugą na pierwotną zieleń z dalszej części, aby uzyskać odcienie ciemniejszej zieleni.
  5. W końcu wydrukowaliśmy logo naszej szkoły z boku hełmu

Zalecana: