Witam wszystkie użytkowniczki i użytkowników elektrody. Chciałbym zaprezentować moduł midi z RaspberryPi. To jeden z nielicznych projektów na „użytek własny”, który powstał do końca.
Moja córka uczy się gry na fortepianie już sporo lat i jakiś czas temu wpadła na genialny pomysł, że uliczna gra jest doskonałym pomysłem. To było niedługo po okresie covidowym i muzycy byli głodni występów. Pomysł dobry tylko jak? Mamy pianino, ale to z wiadomych względów odpada. Mamy Yamaha MODX8, ale to nadal jest ciężkie, nieporęczne a w dodatku dość drogie. Kiedy dodamy do tego opcję deszczu to temat kompletnie odpada. Mamy jeszcze krótki keyboard, ale tu usłyszałem, że to się do niczego nie nadaje. Innymi słowy potrzebujemy pełnej, dynamicznej klawiatury z pedałem w dodatku ma być na tyle tania aby nie bała się deszczu, zestaw ma być przenośny i zasilany bateryjnie. Przyznam szczerze, że miałem nadzieję, że temat jakoś się rozmyje. Niestety tak się nie stało i te absurdalne założenia trzeba było spełnić.
Przegląd dostępnych rozwiązań szybko pokazał że będzie trudno. Wybór padł na klawiaturę M-Audio Keystation 88 MK3. Miała same zalety: tania, lekka, poręczna i dużo pozytywnych opinii. Niestety to goła klawiatura. Teoretycznie można pojechać w plener z laptopem, ale to byłoby mało wygodne tym bardziej, że trzeba zabrać ze sobą jeszcze statyw, krzesło i głośnik. Oczyma wyobraźni widziałem jak to się skończy więc drążyłem temat dalej. Znalazłem na youtube ten film:
https://youtu.be/ebPyMOJnA4A?si=8GwI4YaKYekOolmT
Polecam kanał tego autora bo jest tam sporo ciekawych rzeczy. W jednym z filmów pojawia się pytanie, dlaczego muzycy nie sięgają po Raspberry Pi mimo że istnieje mnóstwo świetnego darmowego oprogramowania. Oprogramowanie może i jest darmowe, ale opakowanie już nie koniecznie lub jest tanie i kompletnie niefunkcjonalne. Postanowiłem więc wyjść naprzeciw tym problemom i dotknąć maliny.
W zasadzie co może pójść nie tak? Mamy gotową instrukcję jak zamienić malinę w fortepian, wystarczy zamknąć to w obudowie, dorzucić baterię i już. Doświadczenie pokazuje, że kiedy nie mamy pojęcia o tym w co wkładamy ręce to absolutnie wszystko może pójść nie tak i trochę tak było. Plan był dość prosty. Kupić malinę, uruchomić to w „pająku” a kiedy wszystko będzie ok, to narysować płytkę, kupić klawiaturę i skreślić temat z długiej listy rzeczy do zrobienia.
Co poszło nie tak?
1. W materiale Pana Floyda jest RaspberryPi 4, ja oczywiści kupiłem najbardziej wypasioną 5. Być może teraz wszystko byłoby ok, ale kiedy uruchamiałem projekt, główne moduły powodowały segmentation fault. Dokupiłem więc RaspberryPi 4.
2. Do testów kupiłem audio hat, który nie działał.
3. Okazało się, że instrumenty, które mam mogę podłączyć tylko przez midi (nie przez USB) więc postanowiłem narysować płytkę łamiąc tym samym plan, który obrałem na początku. Mały keybord ma tylko midi a MODX wymaga sterowników windows.
4. Audio trochę ożyło. To był sukces w porównaniu z audio hatem, niestety przy wyższych poziomach dźwięku, pojawiało się przesterowanie. LM4881, którego użyłem w końcówce mocy bezwzględnie wymaga elementów R44, R45, C58, C59. Nie widziałem tego w dokumentacji, więc w pierwszej wersji ich nie było. Kostka wzbudzała się na około 1MHz czego nie słychać w słuchawkach jednak rewelacyjnie powodowało to efekt przesteru już przy małych sygnałach.
5. Okazało się, że mały keyboard wysyła niekompletne raki midi. Wciśnięcie klawisza było pozbawione pierwszego bajtu, puszczenie zazwyczaj też choć nie zawsze. W przypadku MODX puszczenie klawisza zawsze było niekompletnie. Jaki w tym sens? Zgaduję, że taki aby ludzie kupowali oryginalne kabelki midi<>USB, ale to tylko moja teoria. Oba instrumenty podłączane do siebie dogadują się bez problemów. W układzie sygnał midi przechodzi przez procesor. Midi jest czytane jednym uartem a wysyłane drugim. Plan był taki, żeby poprawić trochę dzieło Yamaha.
6. W pewnym momencie pożyczyłem od kolegi klawiaturę midi USB i wszystko ożyło. Ale radość trwała krótko bo okazało się, że dźwięki są pocięte a sustain powoduję kompletny dramat. Próbowałem wrzucać sample do ramdisk ale nie wiele to wnosiło. Wtedy przypomniałem sobie, że Pan Floyd wyraźnie mówił aby używać kart SD A2. U mnie była A1 bo przecież innej nie miałem a później zapomniałem.
7. Kiedy wszystko działało już poprawnie i zrobiliśmy pierwsze testy plenerowe okazało się, że malina potrafi się zawiesić. W sumie nie wiem co dokładnie się wtedy dzieje bo w domu nigdy mi się to nie zdarzyło. Jest to mega słabe bo załadowanie systemu z uruchomieniem wszystkich modułów trwa dość długo. Może i do grania w parku z kapeluszem jest to jeszcze ok to na scenę z tym zestawem już bym się chyba nie odważył.
8. Opóźnienia… Okazuje się, że to standardowy problem midi z którym nigdy się nie spotkałem bo nie jestem muzykiem. Niedawno kolega powiedział mi, że istnieje jakaś mityczna dystrybucja linuxa dedykowana do minimalizacji tych opóźnień. Córka od początku mówiła, że gra się na tym dziwnie. Okazuje się, że najtańszy keybord Yamaha jako źródło dźwięku, nie generuje słyszalnych opóźnień w ogóle deklasując malinę.
9. Użyłem akumulatorków NIHM bo przewracały mi się w szufladzie. One mają ciekawą własność, że kiedy osiągają stan naładowania, napięcie na nich nieznacznie spada. Nie udało mi się wychwycić tego momentu a z drugiej strony nie chciałem ryzykować uszkodzenia. Zgaduję, że to może być efekt lekko różnego stopnia zużycia ogniw.
10. Układ ma pewną wadę polegającą na tym, że kiedy urządzenie jest wyłączone i podłączone do zasilacza to po zakończeniu procesu ładowania idzie spać na amen i nigdy nie wznowi ładowania. Jest to o tyle istotne, że baterie NIHM mają sporą retencję. Pozostawiając urządzenie w spoczynku na rok czy dwa zastaniemy rozładowane baterie mimo że układ był podłączony do zasilania.
11. O ile całość nie wymaga szczególnych mechanicznych egzorcyzmów to w gruncie rzeczy jest nietechnologiczna. Po pierwsze mamy diody led THT lutowane powierzchniowo do padów bez otworów. Po drugie niewidoczna frontowa płytka wymaga pogłębienia otworów mocujących tak aby stożkowe śrubki nie zapierały o płytkę maskującą. Po trzecie całość trzyma się tylko na frontowych prowadnicach obudowy co sprawia że urządzenie jest mało wytrzymałe na wstrząsy i upadki. Przyklejenie koszyka z bateriami wymaga obcięcia jednego kołka obudowy. Nie udało mi się w żaden rozsądny sposób przytulić Raspberry do frontu tak aby wykorzystać zamontowane na nim USB, dlatego pojawia się kabelek, który generalnie jest słabym pomysłem, ale to zobaczymy dopiero po zdjęciu obudowy.
12. Wybrany przeze mnie mikrokontroler to porażka. Tu wykazałem się skrajną ignorancją używając filtrów TME. Określiłem obudowę, zaznaczyłem 2x UART oraz że to ma być AVR i kupiłem jakieś koszmarne leżaki magazynowe. 2 UARTy były potrzebne do tego, że nie byłem pewien czy uda mi się zmusić RaspberryPI 5 do pracy z niestandardową prędkością. Urzekł mnie blok ADC o który potknąłem się lata temu w innym mikrokontrolerze tej rodziny.
Jak widać, sporo rzeczy poszło nie tak choć miało być szybko i prosto. Sam układ nie wnosi zbyt wiele odkrywczego. To na co warto zwrócić uwagę to wejście MIDI zrealizowane na TLP2391. Zaporowa dioda przed nim jest na wypadek gdyby ktoś chciał użyć transoptora z pojedynczą diodą – ja miałem akurat taki. W specyfikacji MIDI znajdziemy 6N138 i taki oryginalnie był. Problemy z czytaniem MIDI, które opisałem wcześniej skłoniły mnie do wnikliwszej analizy tematu. Stwierdziłem że mamy XXI wiek i można użyć czegoś szybszego. Sygnał na wyjściu 6N138 ma strasznie leżące zbocza. Z TLP2391 zbocza są pionowe i układ wymaga znacznie mniejszego prądu na wejściu.
Warty uwagi jest również układ ładowania baterii. Najprościej byłoby zrobić liniowy stabilizator prądu to jednak będzie się grzało w dodatku napięcie zasilania jest w okolicach wartości pełnego naładowania baterii. Stąd flyback, ale żeby nie komplikować układu, steruje nim mikrokontroler. Pewną herezją jest brak pomiaru prądu po stronie pierwotnej, ale zawsze chciałem zrobić coś takiego. Główna zaleta jest taka że przetwornica pracuje non stop dobierając sobie właściwy współczynnik wypełnienia. Standardowo w flyback sprzężenie zwrotne wyłącza układ gdy na wyjściu pojawia się żądana wartość. Uzwojenie pierwotne jest pompowane do nominalnego prądu w każdym aktywnym takcie. Starty i stopy przetwornicy słychać jako pisk mimo że przetwornica pracuje grubo powyżej słyszalnej częstotliwości. Ten pisk propaguje się również w postaci zakłóceń co w sprzęcie audio nie jest najlepszym pomysłem. W tej realizacji ten problem nie istnieje.
To co należałoby dopisać to poprawienie skoszonych ramek MIDI Yamaha, ale straciłem motywację do rozwijania projektu kiedy dotarło do mnie, że opóźnienia są nieakceptowalne. Finalnie sample proponowane przez Pana Floyd’a brzmią bardzo ciekawie. Osobiście podobają mi się bardziej niż te oryginalne w Yamaha MODX.
A tu rezultat:
Pozdrawiam i czekam na komentarze.