Próbuję zbudować kontroler podobny do MIDI, który ma szyję jak gitara. Na szyi znajduje się ogromna matryca czujników ciśnienia. Kontroler będzie emulował 3 ciągi.
Działa to tak: Są 3 długie paski dwustronnej taśmy miedzianej (o szerokości 0,5 cm, tak długiej jak szyjka), które są podłączone do zasilania (prawdopodobnie 3,3 V lub 5 V, na razie nie ma to znaczenia). Na tych paskach znajduje się warstwa Velostatu, która zmienia oporność w zależności od ciśnienia. Na szczycie velostatu będzie kolejna warstwa rzędów lub ogniw taśmy miedzianej, połączona z czymś, co wyrzuca odczyt napięcia przez warstwę velostatu. Ponieważ szyja ma około 40 cm długości, będzie co najmniej 80 rzędów.
Jeśli wyobrażasz sobie 3 dolne paski taśmy miedzianej jako kolumny wykresu wzdłuż szyi, czujniki będą albo komórkami, albo rzędami, w zależności od metody pomiaru (myślałem, że można również zmultipleksować kolumny, to mogą istnieć rzędy.) Istnieje kilka specjalnych warunków, które mogą to ułatwić: Ponieważ jest to kontroler podobny do gitary, nie każda interakcja musi być mierzona! Liczy się tylko dotyk znajdujący się najbliżej korpusu kontrolera. Również rozdzielczość 8 bitów powinna być wystarczająco dokładna. 255 poziomów ciśnienia i tak jest prawdopodobnie więcej niż jest to potrzebne.
Teraz trudne fragmenty:
Pomiar musi być w czasie rzeczywistym wystarczający do wykrycia uderzeń młotka itp. (Nie mam pojęcia, jak wysoka musi być częstotliwość próbkowania - oszacowana na kilka kHz dla dobrego pomiaru i grywalności), a wyjście cyfrowe kontrolera powinno być albo MIDI (na 3 osobnych kanałach - po jednym na ciąg) lub sygnał cyfrowy, który można przetwarzać za pomocą Raspberry Pi.
Teraz, gdy moja wiedza jest naprawdę ograniczona, nie mogłem wymyślić odpowiednich narzędzi do pracy. Wiem jednak, że: Jest to możliwe. Istnieje podobny, ale inny kontroler, który wykorzystuje bardzo podobną technikę (którą praktycznie odtworzyłem, dopóki nie zauważyłem, że mają patent, a informacja o tym, jak to robią, nie jest tak tajemnicza, jak myślałem), nazywa się to ROLI Wybrzeże.
TL; DR:
około 240 czujników
można podzielić na grupy po 80, które są zasilane tą samą linią
jest to aplikacja działająca w czasie rzeczywistym, muszę wywierać nacisk z każdego czujnika, gdy zostanie dotknięty (niektóre warunki mają zastosowanie, patrz wyżej)
Z góry dziękuję, wiem, że to dużo do przeczytania. Jestem wdzięczny za wszelkie sugestie i byłbym bardzo zadowolony, gdybyś mógł mi pomóc w pokonaniu strasznego bałaganu, który postanowiłem wywołać!
Rzeczy, o których do tej pory myślałem:
Multipleksowanie wierszy i kolumn, odczytywanie każdej komórki za pomocą MCP3008 lub większego ADC i łączenie łańcuchów ATmegas (łańcuchowych lub drzewiastych), które tylko popychają pozycję względem najniższej interakcji do końcowego sygnału, ale z moich obliczeń, które mogą być wąskie gardło koszty ogólne komunikacji. Również wcześniejszy model zawierał potencjometry wstęgowe, które odrzuciłem, ponieważ projekt był zły (kilka prób nie było wystarczająco fajnych).
EDYCJA / AKTUALIZACJA:
Dzięki za dobre sugestie do tej pory! Dzięki nim mogę teraz wyrazić mój problem znacznie wyraźniej:
Mam matrycę 80 rzędów * 3 kolumny czujników ciśnienia. Kiedy człowiek wchodzi w interakcję z matrycą czujników, kilka czujników w pobliżu odbierze dotyk, ale tylko wzdłuż kolumny. Kolumny są mechanicznie oddzielone. Czujniki mają rezystancję między 100 Ohm a 1 kOhm. Wszystkie te czujniki muszą być odczytywane z głębokością 8 bitów, przetwarzane, a wyniki muszą być przesyłane z częstotliwością co najmniej 1 kHz. Tak więc pojedynczy odczyt / przetwarzanie musi zająć mniej niż milisekundę. Ostateczne wyjście na kolumnę musi wynosić: 4 bajty dla float32 i 1 bajt dla uint8. Pływak32 wskaże uśrednioną pozycję pierwszej interakcji wzdłuż kolumny. Interakcja jest definiowana jako kolejne skupisko czujników o ciśnieniu powyżej pewnego progu. Tutaj przetwarzanie wchodzi w skład miksu: kolumna będzie przesuwana w dół, aż odczyt przekroczy próg. Będzie to wtedy liczone jako początek interakcji. Ciśnienie i położenie każdego czujnika są zapamiętywane aż do pierwszego czujnika, który spadnie poniżej progu przy maksymalnie (prawdopodobnie) 4 kolejnych czujnikach. Ze wszystkich czujników zarejestrowanej interakcji będą przetwarzane tylko dwa czujniki - ten, który odczytuje najwyższe ciśnienie (najniższy opór) i najwyższy bezpośrednio powyżej lub poniżej niego. Pozycja zmiennoprzecinkowa jest obliczana przez uśrednienie dwóch pozycji czujnika ważonych ich ciśnieniami. Ogólny nacisk interakcji będzie po prostu dodaniem obu ciśnień zaciśniętych między 0 a 255 (dodaj oba ciśnienia jednostki 8 do uint16 i podziel przez 2 bez zaokrąglania, odrzuć niepotrzebne bity - powinno to być szybkie). To musi się zdarzyć dla każdej kolumny. Wynik o wielkości 15 bajtów zostanie następnie przesłany przez SPI do małego komputera (Raspberry Pi B3), który działa jak syntezator. Nie jestem nastawiony na metodę transmisji. Jeśli SPI nie jest odpowiednim narzędziem do tego zadania, jestem gotów zastosować dowolną metodę komunikacji, którą poradzi sobie Raspberry Pi. Ponieważ jest to aplikacja muzyczno-interaktywna, opóźnienie ma kluczowe znaczenie.
Moje dokładne pytania: czy można to rozwiązać za pomocą jednego mikrokontrolera bez rozbijania banku? Nie stać mnie na zakup układów scalonych o wartości kilkuset dolarów na projekt hobbystyczny. Jaki sprzęt polecasz? Czy są jakieś nieoczywiste zastrzeżenia, których muszę się wystrzegać?
Podejście, które do tej pory czerpałem z odpowiedzi, polegało na zasilaniu każdej kolumny osobno, a następnie odczytywaniu wierszy za pomocą 5 16-kanałowych ADC (ADS7961) podłączonych do Arduino przez SPI. Martwię się, że może to nie być najłatwiejsze / najtańsze podejście lub zbyt szybkie, aby osiągnąć częstotliwość> 1 kHz.
Oświadczenie: Jestem chemikiem teoretycznym i strasznym amatorem w dziedzinie elektrotechniki, wszystko, co wiem, jest samoukiem i nie ma żadnego profesjonalnego zaplecza (co z kolei jest powodem, dla którego szukam pomocy od bardziej kompetentnych ludzi). Ale znam się na oprogramowaniu. Jeśli chodzi o oprogramowanie, dowiem się z wystarczającą ilością czasu. Poza tym jestem Niemcem, więc proszę wybaczcie sporadyczne błędy gramatyczne.