Spisu treści:

Ultradźwiękowe pianino Pi z kontrolą gestów!: 10 kroków (ze zdjęciami)
Ultradźwiękowe pianino Pi z kontrolą gestów!: 10 kroków (ze zdjęciami)

Wideo: Ultradźwiękowe pianino Pi z kontrolą gestów!: 10 kroków (ze zdjęciami)

Wideo: Ultradźwiękowe pianino Pi z kontrolą gestów!: 10 kroków (ze zdjęciami)
Wideo: Робот-Пианино Загорелся, Играя Rush E (Сложнейшую Песню в Мире) 2024, Listopad
Anonim
Image
Image
Ultradźwiękowe pianino Pi z kontrolą gestów!
Ultradźwiękowe pianino Pi z kontrolą gestów!

Ten projekt wykorzystuje niedrogie czujniki ultradźwiękowe HC-SR04 jako wejścia i generuje nuty MIDI, które można odtwarzać za pomocą syntezatora na Raspberry Pi w celu uzyskania wysokiej jakości dźwięku.

Projekt wykorzystuje również podstawową formę sterowania gestami, w której instrument muzyczny można zmienić, trzymając przez kilka sekund ręce nad dwoma zewnętrznymi czujnikami. Kolejny gest może być użyty do wyłączenia Raspberry Pi po zakończeniu.

Powyższy film przedstawia gotowy produkt w prostej wycinanej laserowo obudowie. W dalszej części tej instrukcji znajduje się bardziej szczegółowe wideo, które wyjaśnia, jak działa projekt.

Stworzyłem ten projekt w połączeniu z The Gizmo Dojo (moja lokalna przestrzeń dla twórców w Broomfield, Kolorado), aby stworzyć kilka interaktywnych eksponatów, które możemy zabrać na lokalne imprezy STEM/STEAM i Maker Faires.

Zapoznaj się również z najnowszą dokumentacją i samouczkami na https://theotherandygrove.com/octasonic/, która zawiera teraz informacje o wersji tego projektu w Pythonie (ta instrukcja została napisana dla wersji Rust).

Krok 1: Składniki

Do tej instrukcji potrzebne będą następujące składniki:

  • Raspberry Pi (2 lub 3) z kartą SD
  • 8 czujników ultradźwiękowych HC-SR04
  • Oktasoniczna tablica zaciskowa
  • Dwukierunkowy konwerter poziomów logicznych
  • 32 x 12" żeńskie przewody połączeniowe do podłączenia czujników ultradźwiękowych
  • 13 x 6" żeńskie przewody połączeniowe do podłączenia Raspberry Pi, Octasonic i konwertera poziomów logicznych
  • Odpowiedni zasilacz dla Raspberry Pi
  • Głośniki komputerowe lub podobne

Zalecam używanie Raspberry Pi 3, jeśli to możliwe, ponieważ ma większą moc obliczeniową, co zapewnia bardziej responsywny i przyjemny dźwięk. Może działać dobrze z Raspberry Pi 2 z niewielkimi poprawkami, ale nie próbowałbym używać oryginalnego Raspberry Pi do tego projektu.

Czujniki ultradźwiękowe HC-SR04 mają 4 połączenia - 5V, GND, Trigger i Echo. Zazwyczaj Trigger i Echo są podłączone do oddzielnych pinów mikrokontrolera lub Raspberry Pi, ale oznacza to, że do podłączenia 8 czujników trzeba by użyć 16 pinów, co nie jest praktyczne. W tym miejscu pojawia się tabliczka zaciskowa Octasonic. Ta tablica łączy się ze wszystkimi czujnikami i ma dedykowany mikrokontroler, który monitoruje czujniki, a następnie komunikuje się z Raspberry Pi przez SPI.

HC-SR04 wymaga 5 V, a Raspberry Pi tylko 3,3 V, dlatego potrzebujemy również konwertera poziomów logicznych, który połączy Raspberry Pi z płytką zaciskową Octasonic.

Krok 2: Podłącz czujniki ultradźwiękowe do płyty Octasonic

Podłącz czujniki ultradźwiękowe do płyty Octasonic
Podłącz czujniki ultradźwiękowe do płyty Octasonic
Podłącz czujniki ultradźwiękowe do płyty Octasonic
Podłącz czujniki ultradźwiękowe do płyty Octasonic

Użyj 4 żeńsko-żeńskich przewodów połączeniowych, aby podłączyć każdy czujnik ultradźwiękowy do płytki, uważając, aby podłączyć je we właściwy sposób. Płytka została zaprojektowana tak, aby piny były w tej samej kolejności co piny czujnika ultradźwiękowego. Od lewej do prawej na płytce piny to GND, Trigger, Echo, 5V.

Krok 3: Podłącz konwerter poziomów logicznych do płyty Octasonic

Podłącz konwerter poziomów logicznych do płytki oktasonicznej
Podłącz konwerter poziomów logicznych do płytki oktasonicznej

Raspberry Pi i płyta Octasonic komunikują się przez SPI. SPI wykorzystuje 4 przewody:

  • Master In, Slave Out (MISO)
  • Wyjście Master, Wejście Slave (MOSI)
  • Zegar szeregowy (SCK)
  • Wybór urządzenia podrzędnego (SS)

Dodatkowo musimy podłączyć zasilanie (5V i GND).

Konwerter poziomów logicznych ma dwie strony - niskie napięcie (LV) i wysokie napięcie (WN). Raspberry połączy się ze stroną LV, ponieważ jest to 3,3V. Octasonic połączy się ze stroną WN, ponieważ jest to 5V.

Ten krok dotyczy podłączenia Octasonic do strony WN konwertera poziomów logicznych

Zobacz zdjęcie dołączone do tego kroku pokazujące, które piny należy podłączyć do konwertera poziomów logicznych.

Połączenia od Octasonic do konwertera poziomów logicznych powinny wyglądać następująco:

  • 5V do HV
  • SCK do HV4
  • MISO na HV3
  • MOSI do HV2
  • SS do HV1
  • GND do GND

Krok 4: Podłącz konwerter poziomów logicznych do Raspberry Pi

Podłącz konwerter poziomów logicznych do Raspberry Pi
Podłącz konwerter poziomów logicznych do Raspberry Pi

Raspberry Pi i płyta Octasonic komunikują się przez SPI. SPI wykorzystuje 4 przewody:

  • Master In, Slave Out (MISO)
  • Wyjście Master, Wejście Slave (MOSI)
  • Zegar szeregowy (SCK)
  • Wybór urządzenia podrzędnego (SS)

Dodatkowo musimy podłączyć zasilanie (3,3V i GND). Konwerter poziomów logicznych ma dwie strony - niskie napięcie (LV) i wysokie napięcie (HV). Raspberry połączy się ze stroną LV, ponieważ jest 3,3V. Octasonic połączy się ze stroną WN, ponieważ jest to 5V.

Ten krok służy do podłączenia Raspberry Pi do strony LV konwertera poziomów logicznych

Połączenia z Raspbery Pi do konwertera poziomów logicznych powinny wyglądać następująco:

  • 3,3 V do LV
  • GPIO11 (SPI_SCLK) do LV4
  • GPIO09 (SPI_MISO) do LV3
  • GPIO10 (SPI_MOSI) do LV2
  • GPIO08 (SPI_CE0_N) SS do LV1
  • GND do GND

Użyj schematu dołączonego do tego kroku, aby zlokalizować właściwe piny na Raspberry Pi!

Krok 5: Podłącz Raspberry Pi 5V do Octasonic 5V

Podłącz Raspberry Pi 5V do Octasonic 5V
Podłącz Raspberry Pi 5V do Octasonic 5V
Podłącz Raspberry Pi 5V do Octasonic 5V
Podłącz Raspberry Pi 5V do Octasonic 5V

Pozostaje jeszcze jeden ostatni przewód do dodania. Musimy faktycznie zasilić płytkę Octasonic napięciem 5 V, więc robimy to, podłączając jeden z pinów Raspberry Pi 5 V do pinu 5 V na nagłówku Octasonic AVR. To jest dolny lewy pin w bloku nagłówka AVR (jest to blok 2 x 3 w prawym górnym rogu płyty). Zobacz załączone zdjęcie pokazujące gdzie znajduje się blok AVR.

Zobacz drugi załączony schemat, aby znaleźć pin 5 V na Raspberry Pi.

Krok 6: Zainstaluj oprogramowanie

Zainstaluj Raspian

Zacznij od czystej instalacji Raspbian Jessie, a następnie zaktualizuj ją do najnowszej wersji:

aktualizacja sudo apt-get

sudo apt-get upgrade

Włącz SPI

Aby ten projekt działał, musisz włączyć SPI na Raspberry Pi! W tym celu użyj narzędzia konfiguracyjnego Raspberry Pi.

Ważne jest również ponowne uruchomienie Pi po włączeniu SPI, aby zadziałało

Zainstaluj FluidSynth

Fluidsynth to niesamowity darmowy syntezator MIDI. Możesz zainstalować go z wiersza poleceń za pomocą tego polecenia:

sudo apt-get install fluidsynth

Zainstaluj język programowania Rust

Ultrasonic Pi Piano jest zaimplementowany w języku programowania Rust firmy Mozilla (jest jak C++, ale bez złych bitów). Tego właśnie używają wszystkie fajne dzieciaki w dzisiejszych czasach.

Postępuj zgodnie z instrukcjami na https://rustup.rs/, aby zainstalować Rusta. Aby zaoszczędzić czas, instrukcje są takie, aby uruchomić to jedno polecenie. Podczas instalacji możesz zaakceptować domyślne odpowiedzi na wszelkie pytania.

UWAGA: Od czasu opublikowania tej instrukcji występują pewne problemy z instalacją Rusta na Raspberry Pi. Zły czas:-/ ale zmodyfikowałem poniższe polecenie, aby obejść problem. Mam nadzieję, że wkrótce to naprawią. Pracuję nad stworzeniem obrazu, który ludzie mogą pobrać i wypalić na karcie SD. Jeśli chcesz, proszę o kontakt.

eksport RUSTUP_USE_HYPER=1curl https://sh.rustup.rs -sSf | CII

Pobierz kod źródłowy Ultrasonic Pi Piano

Kod źródłowy kodu źródłowego Ultrasonic Pi Piano jest hostowany na github. Istnieją dwie możliwości uzyskania kodu. Jeśli znasz git i github, możesz sklonować repozytorium:

git klon [email protected]:TheGizmoDojo/UltrasonicPiPiano.git

Alternatywnie możesz pobrać plik zip z najnowszym kodem.

Skompiluj kod źródłowy

cd UltrasonicPiPiano

budowanie ładunku -- zwolnienie

Przetestuj kod

Zanim przejdziemy do tworzenia muzyki w następnym kroku, upewnijmy się, że oprogramowanie działa i że możemy odczytać prawidłowe dane z czujników.

Użyj następującego polecenia, aby uruchomić aplikację. Spowoduje to odczytanie danych z czujników i przekształcenie ich w nuty MIDI, które następnie zostaną wydrukowane na konsoli. Gdy przesuwasz rękę nad czujnikami, powinieneś zobaczyć generowane dane. Jeśli nie, przejdź do sekcji rozwiązywania problemów na końcu tej instrukcji.

bieg ładunku - zwolnienie

Jeśli jesteś ciekawy, flaga "--release" mówi Rustowi, aby skompilował kod tak wydajnie, jak to możliwe, w przeciwieństwie do domyślnego ustawienia "--debug".

Krok 7: Zrób trochę muzyki

Upewnij się, że nadal jesteś w katalogu, do którego pobrałeś kod źródłowy i uruchom następujące polecenie.

Ten skrypt „run.sh” upewnia się, że kod został skompilowany, a następnie uruchamia kod, przesyłając dane wyjściowe do fluidsynth.

./run.sh

Upewnij się, że masz wzmocnione głośniki podłączone do gniazda audio 3,5 mm na Raspberry Pi i powinieneś słyszeć muzykę, gdy przesuwasz ręce nad czujnikami.

Jeśli nie słyszysz muzyki, a masz podłączony monitor HDMI, prawdopodobnie zamiast tego jest tam wyjście audio. Aby to naprawić, po prostu uruchom to polecenie, a następnie uruchom ponownie Pi Piano:

sudo mikser cset numid=3 1

Zmiana głośności

Głośność (lub „wzmocnienie”) określa się za pomocą parametru „-g” do fluidsynth. Możesz zmodyfikować skrypt run.sh i zmienić tę wartość. Pamiętaj, że małe zmiany tego parametru powodują dużą zmianę głośności, więc spróbuj zwiększyć go o małe wartości (np. 0,1 lub 0,2).

Krok 8: Kontrola gestów

Zobacz film dołączony do tego kroku, aby zobaczyć pełną demonstrację projektu, w tym sposób działania kontrolek gestów.

Koncepcja jest bardzo prosta. Oprogramowanie śledzi, które czujniki są zakryte (w promieniu 10 cm), a które nie. Przekłada się to na 8 liczb binarnych (1 lub 0). Jest to bardzo wygodne, ponieważ sekwencja 8 liczb binarnych tworzy „bajt”, który może reprezentować liczby od 0 do 255. Jeśli nie wiesz jeszcze o liczbach binarnych, gorąco polecam poszukać samouczka. Liczby binarne są podstawową umiejętnością, której należy się nauczyć, jeśli chcesz dowiedzieć się więcej o programowaniu.

Oprogramowanie odwzorowuje bieżący stan czujników na pojedynczy bajt reprezentujący bieżący gest. Jeśli ta liczba pozostaje taka sama przez kilka cykli, oprogramowanie działa na tym geście.

Ponieważ czujniki ultradźwiękowe nie są super niezawodne i mogą występować zakłócenia między czujnikami, będziesz musiał wykazać się cierpliwością podczas używania gestów. Spróbuj zmienić odległość, w jakiej trzymasz ręce od czujników, a także kąt, pod jakim trzymasz ręce. Zimno również spróbuj trzymać coś płaskiego i solidnego nad czujnikami, aby lepiej odzwierciedlić dźwięk.

Krok 9: Tworzenie obudowy

Jeśli chcesz, aby była to stała wystawa i móc ją pokazać ludziom, prawdopodobnie będziesz chciał zrobić coś w rodzaju ogrodzenia. Może to być wykonane z drewna, tektury lub wielu innych materiałów. Oto film pokazujący obudowę, nad którą pracujemy dla tego projektu. Wykonany jest z drewna, z wywierconymi otworami, aby utrzymać czujniki ultradźwiękowe na miejscu.

Krok 10: Rozwiązywanie problemów i kolejne kroki

Rozwiązywanie problemów

Jeśli projekt nie działa, zwykle jest to spowodowane błędem okablowania. Nie spiesz się, aby dokładnie sprawdzić wszystkie połączenia.

Innym częstym problemem jest brak włączenia SPI i ponowne uruchomienie pi.

Odwiedź stronę https://theotherandygrove.com/octasonic/, aby uzyskać pełną dokumentację, w tym wskazówki dotyczące rozwiązywania problemów, artykuły dotyczące Rust i Python, a także informacje o tym, jak uzyskać wsparcie.

Następne kroki

Kiedy już projekt zacznie działać, polecam poeksperymentować z kodem i wypróbować różne instrumenty muzyczne. Kody instrumentów MIDI mieszczą się w zakresie od 1 do 127 i są tutaj udokumentowane.

Czy chcesz, aby jeden instrument muzyczny z każdym czujnikiem odtwarzał inną oktawę? A może chciałbyś, aby każdy czujnik był osobnym instrumentem? Możliwości są prawie nieograniczone!

Mam nadzieję, że podobało ci się to pouczenie. Polub, jeśli tak, i koniecznie zasubskrybuj mnie tutaj i mój kanał YouTube, aby zobaczyć przyszłe projekty.

Zalecana: