Elektroda.pl
Elektroda.pl
X
CControls
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Klawiatura sterująca MIDI ze starego pianina

WWektor 14 Lut 2010 22:49 7088 27
  • #1 14 Lut 2010 22:49
    WWektor
    Poziom 12  

    Witam! Wczoraj przeglądałem strony różnych sklepów muzycznych w poszukiwaniu dobrej klawiatury MIDI z ważonymi klawiszami. Ceny takich klawiszy zaczynają się powyżej 3 kzł i to bez zbędnych bajerów. Żona podsunęła mi świetny pomysł przerobienia starego pianina które niestety posiada drewnianą płytę i absolutnie nie nadaje się do grania (stoi jako mebel). Cała mechanika klawiszy jest sprawna, między młoteczkami a strunami jest jakieś 5cm odległości. Prześledziłem trochę internet i wiem, że w klawiaturach midi do pomiaru dynamiki (bo to jest główny problem) stosuje się najczęściej dwa styki załączane jeden po drugim , czas pomiędzy pierwszym i drugim stykiem jest ściśle związany z prędkością klawisza, a więc i z dynamiką. Jeśli chodzi o domowe wykonanie, to styki raczej nie wchodzą w grę, bo wszystko będzie zbyt mało precyzyjne. Chyba najbardziej skutecznym rozwiązaniem wydają się być piezzo elementy, w które uderzać będą młoteczki pianina. Co myślicie o takim rozwiązaniu, może znacie jakieś inne lepsze/ciekawsze??
    Kolejną sprawą jest elektronika. Przeliczyłem podstawowe parametry i wychodzi tak:
    Prędkość protokołu midi 31250bps. W paczce uruchamiającej nutę są 3 bajty + bit startu i stopu dla każdego, czyli 30bitów na paczkę, a więc 31250/30.
    Wychodzi około 1kHz na nutę. Wniosek prosty, elektronika musi przeskanować całą klawiaturę (88 klawiszy) 1000 razy na sekundę - to trochę dużo.
    Podstawowy AVR ma 8 kanałów ADC których nie potrafi naraz sczytać, a więc nie uda sie tego zrobić jednym AVRkiem który multipleksowałby klawiaturę po 8 klawiszy, bo ADC nie wyrobi. Myślałem też nad ARMem7 (np AT91SAM7S64), ale z tego co pamiętam, on też nie sczytuje wszystkich kanałów razem. Myślałem też o zastosowaniu 11 AVRków, które by sczytywały po 8 klawiszy i szybkim uartem byłyby odpytywane z wyników przez jeden nadrzędny uC, który zająłby się też buforowaniem danych i wysłaniem przez MIDI np ARM7. Wysyłanie do Midi można by wtedy zrealizować przez DMA i nie zawracać czasu procesora, który mógłby obsługiwać wyświetlacz itp. Pech jest taki, że klawiszy może być wciśniętych wiele na raz:/
    Może ktoś z was miał podobny problem z ADC, może da się jakoś ominąć małą prędkość przetworników jakimś sprytnym trikiem, na który nie wpadłem :)
    Klawiatura sterująca MIDI ze starego pianina Klawiatura sterująca MIDI ze starego pianina
    Jutro spróbuję z kilkoma piezo podłączonymi do jednego AVRka, akurat mam kilka i opiszę wyniki :)

    [/img]

    0 27
  • CControls
  • #2 15 Lut 2010 17:49
    _jta_
    Specjalista elektronik

    Nie widzę powodu, by prędkość protokołu wiązać z częstotliwością skanowania. Myślę, że przesyła się informacje
    o zmianach (czas i siła uderzenia klawisza, puszczenie klawisza), a nie w kółko informację o stanie każdego klawisza.
    Natomiast dobrze byłoby zbadać, jaki jest sygnał z piezoelementu przy uderzeniu w klawisz, i jaki przy puszczeniu.
    Przede wszystkim ocenić, o ile można się spóźnić z odczytem, żeby jeszcze prawidłowo rozpoznać czas i siłę.
    Można skanować wszystkie klawisze, można mieć elektronikę, która będzie sygnalizować zmiany, żeby ADC czytał
    napięcie tylko z tych przetworników, na których są zmiany, a nie skanował wszystkich - może się okazać, że takie
    skanowanie przy użyciu ADC będzie wymagało ADC wykonującego milion przetworzeń na sekundę, albo i więcej.

    0
  • #3 15 Lut 2010 20:53
    WWektor
    Poziom 12  

    Po konsultacji z kilkoma znajomymi doszliśmy do wniosku że prościej będzie wykorzystać timery a nie ADC do czytania dynamiki. Pomysł jest taki, żeby w momencie oderwania młoteczka (czyli wciśnięcia klawisza) załączać timer, a w momencie uderzenia w piezo podłączonego do portu (uderzenie wymusi krótką zmianę stanu na porcie - już przetestowane) wyłączać timer. Sczytać wartość timera. Wynik przekłada się na prędkość młoteczka a więc dynamikę. 11 Attiny2313 czytanych przez ARM7 po kolei przez SPI. Każdy ATtiny na 8 przycisków.

    Co o tym myślicie??

    0
  • #4 16 Lut 2010 17:51
    mdziewie
    Poziom 18  

    Żeby nie zużywać za dużo timerów, można zrobić jeden chodzący "wolno" i tylko czytać jego wartość w dwóch kluczowych momentach; potem odejmować i jest git. Wtedy, korzystając z przerwań typu "pin change", możemy jednym prockiem obsłużyć stosunkowo sporo kanałów (wychodzi mi 21 wejść dla Atmegi 88, pozostawiając dwie nóżki dla komunikacji).
    Myślałem jeszcze nad pozbyciem się "nadzorcy". Wersje są dwie:
    1) połączyć procki portami szeregowymi w "sznureczek" - eleganckie, ale mało atrakcyjne, bo najdalszy procek będzie miał spore opóźnienia (w najlepszym razie 300 mikrosekund na jedno "ogniwo" łańcucha, a to i tak tylko w przypadku mądrego przemyślenia komunikacji).
    2) połączyć wyjścia równolegle (np. dużą bramką AND) - w tym przypadku trzeba wprowadzić dodatkowy mechanizm arbitrażu (żeby nie nadawały na raz), co może nie być takie łatwe w realizacji.

    A ponieważ nikt nie spodziewał się hiszpańskiej inkwizycji, to:
    3) połączyć je przez I2C.

    Oczywiście to wszystko pod warunkiem zastosowania atmeg, a nie "tajniaków".

    Pozdrawiam, niecierpliwie czekając na efekty:)

    0
  • #5 16 Lut 2010 19:38
    _jta_
    Specjalista elektronik

    Może by zacząć od ustalenia jakie czasy wchodzą w rachubę - podejrzewam, że przy mocnym uderzeniu
    ruch młoteczka trwa setki mikrosekund - a to trzeba zmierzyć z niezbyt dużym błędem, inaczej będzie tak,
    że grasz równo, a wychodzi losowo głośniej i ciszej. Można tak, że jest centralny licznik, przy uderzeniu
    w klawisz zapisać jego stan, i odczytać zanim się przekręci - ale to będzie co najmniej układ scalony
    (np. 74HC374) na każdy klawisz, już nie mówiąc o jakimś formowaniu impulsów - może taniej wyjdzie
    na uC? ATtiny2313 ma 8 pinów generujących przerwania przy zmianie stanu logicznego - pytanie, czy
    to wystarczy na 8 klawiszy? kwestia w tym, że do jednego klawisza są co najmniej 2 czujniki.

    Przetwarzanie sygnałów z czujnika (analogowych) na cyfrowe do podania na uC - chyba najtaniej
    będzie użyć poczwórnego wzmacniacza operacyjnego, albo komparatora (albo obu - formowanie
    impulsu, wykrycie przekroczenia progu) - i może tranzystorów (w hurcie 6gr/szt)?
    Trzeba wymyślić, jak zrobić, żeby każde zdarzenie (uderzenie klawisza, uderzenie młoteczka,
    puszczenie klawisza) generowało zmianę powodującą przerwanie, i żeby je rozróżnić - jeden
    klawisz pewnie będzie wymagał co najmniej 2 wejść ATtiny.

    0
  • CControls
  • #6 16 Lut 2010 20:15
    wlw_wl
    Poziom 38  

    Zamiast piezoelementów można by zastosować elementy optyczne, np. tcrt5000, podłączone do lm324, dadzą Ci logiczną jedynkę i będziesz mógł dostrajać każdy klawisz osobno potencjometrem. Pomija się wtedy mechaniczny kontakt elementów, a więc klawiatura nie będzie się z czasem rozstrajać od ich zużycia.

    Dając jedną parę czujników na młoteczek można precyzyjnie określać i rejestrować moment startu i uderzenia młoteczka.

    Sam robiłem już układy na elementach tcrt5000 i lm324 i działa to bardzo fajnie. Jeśli czujników ma być duża ilość, to można zamienić na tańsze czujniki, o ile dokładność na to pozwoli.

    0
  • #7 17 Lut 2010 10:10
    WWektor
    Poziom 12  

    Wczoraj miałem chwile czasu i zaprojektowałem i wykonałem płytkę pod atmege8. Układ jest bardzo prosty bo sprowadza się w zasadzie do wyprowadzenia portów (dwóch) pierwszy bezpośrednio na styki wykrywające początek lotu młoteczka, a drugi przez rezystory do piezo. Płytkę przygotowałem pod 8 klawiszy. Celem tej prostej płytki będzie:
    1. Uruchomienie timera1 tak by pracował w kółko
    2. W momencie zmiany stanu przycisku zapisuje wartość timera do ramu
    3. W momencie uderzenia w piezo odczytuje wartość z ramu dla danego klawisza wysyła przez UART, a zaraz potem wysyła przez uart aktualny stan z timera
    Ten algorytm jest przygotowany tylko do testów (do podpiętego terminala) Chcę sprawdzić czy takie mierzenie w ogóle ma sens.

    Do płytki podłączyłem kwarca żeby było max szybko (aktualnie męcze to na 12MHz)
    Cały program napisałem w ASM żeby mieć dokładna kontrolę nad tym co się dzieje.
    W pętli głównej sprawdzane są stany wszystkich portów po kolei więc procek robi to naprawdę szybko. Po naciśnięciu klawisza dokłada się do tego dosłownie kilka-kilkanaście cykli zegarowych więc niezbyt dużo. Reszte robią peryferia, a procesor dalej kontroluje porty.

    Trasmisję do ARMa planuję puścić po bardzo szybkim UARTcie(równoległe płytki). W płytce przygotowałem dodatkowy pin ChipEnable podpięty do przerwania zewnętrznego. Przerwanie będzie wyzwalać wysłanie tablicy dynamiki zapisanych klawiszy przez szybki uart.

    Co do optyki to znacznie taniej wychodzi piezo. Fakt że optyka najprawdopodobniej byłaby znacznie dokładniejsza, ale koszty rosną wtedy ekstremalnie :/ Poza tym nie będe ściągał strun w pianinie bo cholera wie czym to się skończy, a młoteczek musi w coś uderzać zanim zahaczy o rozstrojone struny.

    Może dziś wieczorkiem podłącze pierwszy klawisz :) Jeszcze nie myślałem nad mechaniką. Tylko tyle, że znalazłem jedną śrubkę pod którą przez podkładke przykręciłem sobie element piezo i akurat pasuje że młoteczek w niego uderza :)

    Ciągle jeszcze męczy mnie temat styków-tych wykrywających wciśnięcie klawisza. Myślałem żeby umiejscowić je przy samych młoteczkach na jakiejś listwie. Problem jest taki, że muszą one pracować bardzo delikatnie i dokładnie:/ Plus jest taki, że młoteczek w momencie oderwania się po uderzeniu w strunę (w piezo) do puki nie zostanie puszczony klawisz nie wraca spowrotem tylko utrzymuje się jakiś centymetr wcześniej. Myślałem o jakimś rodzaju szczotek ale coś cienko to widze, najlepiej żeby nic do młoteczków nie trzeba było przyklejać tylko, żeby styki były całkiem statyczne.

    Co do nadzorcy (ARM7) już od dawna nosiłem się z zamiarem zmontowania profesjonalnego seqencera MIDI, który potrafiłby wileościeżkowo nagrywać na kartę pamięci, edytować i wyświetlać zapisane nutki. Taki Cakewalk, czy CuBase hardwarowy :) Tak się składa że mam elegancki niebieski wyświetlacz graficzny 240x128 pikseli z interfejsem dotykowym i planuje go do tego wykorzystać :) Jeśli wszytko pójdzie zgodnie z planem (największym problemem jest odpalenie tej klawiatury z pianina) to chciałbym przerobić swój stary keybordzik PSR-520 na moduł brzmieniowy, czyli wywalić klawiaturę wstawić elektronikę w ładną obudowę i cieszyć się interfejsem MIDI (na nim też będę testował protokół midi z pianina, bo drogiego sprzętu podłączać nie będę - trochę by było szkoda).

    W pdfce podsyłam plik schematu płytki :)

    0
  • #8 18 Lut 2010 21:13
    _jta_
    Specjalista elektronik

    Hm... a jak pianista najpierw lekko naciśnie klawisz (młoteczek ruszy się ze swojego miejsca), a potem mocniej,
    żeby uderzyć w strunę? zmierzony czas będzie dużo dłuższy, niż odpowiadałby sile uderzenia w strunę...

    Może lepiej tak, że uderzenie młoteczka w czujnik piezo daje impuls, którym ładujesz kondensator, i mierzysz
    czas rozładowania - wtedy rzeczywiście sprawdzisz siłę uderzenia. Ale puszczenie klawisza chyba drugim
    piezo - jak młoteczek wraca na miejsce, to w niego uderza. Chyba że znajdziesz takie zamocowanie piezo,
    żeby "odczuło" i uderzenie młoteczka "w strunę", i uderzenie przy powrocie...

    Albo - ale to już nie będzie dobrze naśladować pianina - zrobisz tak, że przy naciśnięciu klawisza młoteczek
    uderza w piezo (i mierzysz, z jaką siłą), a potem naciska to piezo, dopóki nie puścisz klawisza i piezo to czuje
    - brak nacisku oznacza, że klawisz został puszczony; tylko jak po uderzeniu trzymasz klawisz lekko wciśnięty,
    to piezo (to od uderzenia) tego nie poczuje - jest tak, jakbyś klawisz całkiem puścił, a w prawdziwym pianinie
    młoteczek jeszcze by się nie cofnął na tyle, co przy całkowitym puszczeniu, i nie tłumiłby struny...

    A jak puścisz klawisz powoli (w wersji z dwoma piezo)? Uderzenie przy powrocie będzie słabiutkie, drugie
    piezo może go nie wyczuć... ale na to jest sposób: drugie piezo pracuje jako generator ultradźwięku kiedy
    młoteczek go nie dotyka - jak dotknie, to przytłumia, i generator przestaje działać. I jest jak w pianinie.

    Jeszcze jeden efekt "pianinowy", który może by warto naśladować: naciskasz lekko klawisz, i uderzasz klawisz
    obok, a potem puszczasz - drgania przenoszą się na sąsiednią strunę, która nie jest przytłumiona i to słychać.
    No i oczywiście pedały, którymi wpływasz na tłumienie strun - to też wypada odwzorować w elektronicznym...

    0
  • #9 19 Lut 2010 08:56
    viayner
    Poziom 34  

    Witam,
    Chcialbym zasugerowac nieco inne rozwiazanie problemu.
    Po pierwsze to nie trzeba stosowac jakichs zaawansowanych mikrokontrolerow, jezeli spojzycie na schematy strszych syntezatorow to do obslugi klawiatury wykozystywane byly 8035/8051 i to nie tylko obslugiwalo dynamike ale i AT i komunikajce midi.
    Wlasnie reaktywuje starego syntka Casio i on ma klawiature rozwiazana w ten sposob ze start klawisza odczytujwe uC przez czytanie matrycy 8x8 stykow podkalwiszowych a dynamike obsluguje przewodzacy polimer (rezystancja elementu zalezy od jego wymiaru - tu od grubosci) przy odrobinie zaawansowania ta sama metoda obsluguje sie AT kanalowe.
    uC nie musi czytac calej klawiatury, czeka tylko na zdarzenie - przerwanie i wtedy obsluguje klawiature. Stosujac 2x 8x8 matryce obsluzysz 64 klawisze z dynamika na podwojnych stykach - pierwsza matryca to rozpoczecie nacisku a druga to czas jego lotu w dol czyli dynamika, obslugujesz tylko ten klawisz ktory zostal wcisniety w pierwszej matrycy.
    Pozdrawiam

    0
  • #10 19 Lut 2010 09:57
    _jta_
    Specjalista elektronik

    Niestety, działanie tak obsługiwanej klawiatury (mam na myśli system z keyboardów Casio, o którym piszesz)
    jest nieporównywalnie gorsze od klawiatury normalnego pianina. Rozpoznawanie siły uderzenia przez pomiar
    czasu - po pierwsze w pewnych sytuacjach zawiedzie (pisałem); po drugie wymaga dużej szybkości obsługi,
    bo przy silnym uderzeniu czas jest bardzo krótki; po trzecie drgania styków mogą wprowadzać błąd pomiaru.

    To się nadaje do naśladowania organów, w których dźwięk ma zależeć od głębokości wciśnięcia klawisza,
    ale nie do naśladowania pianina, w którym dźwięk ma zależeć od siły uderzenia w klawisz.

    0
  • #11 19 Lut 2010 16:02
    viayner
    Poziom 34  

    Witam,
    To o czym pisalem dotyczy syntezatorów Casio a nie keyboard'ów. Wbrew pozorom ta firma robila kiedys bardzo porzadne urzadzenia tego typu. Po drugie dziala poprawanie. Mianowicie algorytm sprawdza maksymalne wcisniecie klawisza i czas w jakim to zostalo wykonane. Przy zdefiniowaniu odpowiednich poziomow AT tez da sie z tego wydobyc. Maksymalne wcisniecie klawisza, jak by nie patrzec, zalezy od sily jego wcisniecia - dynamika.
    Mam takowy instrument i dziala to jak najbardziej poprawanie.
    Pozdrawiam

    0
  • #12 19 Lut 2010 18:07
    _jta_
    Specjalista elektronik

    Ale to nie pianino... tłumaczyłem o co chodzi, chyba nie przeczytałeś.

    0
  • #13 20 Lut 2010 10:16
    viayner
    Poziom 34  

    Witam,
    Czytalem, ale wracajac do sprawy to niuanse brzmieniowe zalatwia modul dzwiekowy o ktorym tu nie wspominamy. Klawiatura sterujaca wysyla tylko komunikty midi odpowiadajace wcisnieciu klawisza, jego puszczeniu, dynamice i AT, ewentualnie komunikaty modulatorow i pedalow jezeli takowe sa zainstalwane.
    To co zaproponowalem wyglada w uproszczeniu tak:
    - klawisz ma styk informujacy o jego nacisnieciu nawet bardzo lekkim.
    - sensor pod klaiwszem tu polimer (lub piezo element) zmieniajacy rezystancje informuje z jaka sila klawisz zostal wcisniety i to jest velocity o ktora nam wszystkim chodzi. Interesuje nas max jej wartosc.
    Klawiatura sterujaca nigdy nie dorowna koncertowemu fortepianowi.
    Klawiatury sterujace steruja dowolnym modulem dzwiekowym i to od niego zalezy co i jak zinterpretuje.
    Pozdrawiam

    0
  • #14 20 Lut 2010 10:48
    _jta_
    Specjalista elektronik

    To nie zrozumiałeś, że ruch klawisza opisuje więcej parametrów... żaden pomiar rezystancji nie załatwi sprawy,
    i żaden moduł dźwiękowy nie zrekonstruuje informacji straconej przez pomiar nie tego parametru, co trzeba.

    Piezoelement może zmierzyć siłę uderzenia, i o to chodzi, tylko trzeba sprawdzić, jaki zakres napięć można mieć.
    Piezoelementem można również sprawdzać siłę nacisku młoteczka - im większy nacisk, tym większe tłumienie
    drgań - mierząc je rozpoznamy, czy pianista po uderzeniu w klawisz nadal wciska go mocno, czy tylko lekko - ale
    nie wiem, czy to ma wpływ na działanie normalnego pianina - czy nacisk na klawisz dociska młoteczek do struny?

    Aha, dobrze byłoby poszukać w miarę tanich piezoelementów, i najlepiej od razu z przewodami - kiedyś
    takie były po 50gr na WGE (Warszawskiej Giełdzie Elektronicznej), ale nie pamiętam, w którym pawilonie.

    0
  • #15 20 Lut 2010 11:54
    viayner
    Poziom 34  

    Witam,
    Przepraszam masz racje chyba sie nie zrozumielismy.
    Klawiatura sterujaca wysyla tylko komunikaty o jakich wspomnialem, w uproszczeniu KeyOn KeyOff, Velocity i AT pomijam kontrolery dodatkowe.
    W module definjujesz co i jak sie dzieje przy jakiejs konkretnej wartosci Velocity i ewentualnie przy AT - np. wspomniane przenoszenie drgan na sasiednie struny przy docisku.
    Sprawdz budowe komend midi, co jest wysylane i kiedy.
    Przykladowo KeyOn - 3 bajty - (komenda) (kod klawisza) (velocity)
    KeyOff standardowo - 3 bajty - (komenda) (kod klawisza) (velocity =0) niektore nowsze moduly rozpoznaja velocity <>0 i tu mozna cos dodatkowego uzyskac, ale nie kazdy modol to rozpoznaje !!!.
    AT jak wyzej 3 bajty. Nie bardzo widze tu miejsce na cos dodatkowego.
    Brawo, tylko pogratulowac jezeli celem tego projektu jest opisanie dokladnego ruchu klawisza ale czy ta ilosc komunikatow nie "zapcha" transmisji i czy modul zdola to zinterpretowac.
    PS a swoja droga jak bedzie roznica miedzy czasem zalaczenia 2 przelacznikow przeliczonym na wartosc z zakresu 0-127 a max/min wartoscia rezystancji przeliczana na taki sam zakres ? - wazne aby uzyskac parametr velocity - sile uderzenia w klawisz.
    Pozdrawiam

    0
  • #16 20 Lut 2010 13:21
    _jta_
    Specjalista elektronik

    Różne metody pomiaru mierzą różne wielkości, jakkolwiek są one zazwyczaj skorelowane.
    Istotne jest, by zmierzyć tę właściwą, i metodą, która nie będzie dawać błędnych wyników.

    0
  • #17 22 Lut 2010 08:48
    WWektor
    Poziom 12  

    Widzę, że dyskusja się mocno ożywiła :)
    Z powodu braku czasu na razie nie mogłem się zająć tematem, ale temat muszę rozwiązać bo taki instrument jest mi potrzebny a pieniędzy na lepszy (nowy - niekoniecznie lepszy) nie mam.
    Kilka sprostowań do tematu:
    1. Nie potrzebuje generować dźwięków, interesują mnie jedynie komunikaty MIDI
    2. Zupełnie mija się z celem badanie jakichkolwiek złożonych charakterystyk ruchu klawisza :P Chodzi tu tylko i wyłącznie jak wspomniał kolega Viayner o parametr velocity czyli głośność nuty (dynamika). W projekcie pomijam AfterTouch, chociaż pewnie mógłby się przydać, ale nie będę przesadzać - utrudniło by to znacznie mechanikę i podniosło koszt przedsięwzięcia.
    3. Z dodatkowych kontrolerów zamierzam zamontować Pedał Sustain.

    Protokół jaki zamierzam zrealizować sprowadza się do paczek 3 bajtowych:
    <włącz nutę/na którym kanale><Jaką nutę><Jak głośno>
    <wyłącz nutę/na którym kanale>Jaką nutę><0>

    Może jutro będę miał chwilę czasu to przysiądę i pomierzę timerem przybliżony czas lotu młoteczka. W internecie, niestety nic na ten temat nie znalazłem:/

    Jeśli mógłbym prosić o przeniesienie dyskusji na temat styków wykrywających wciśnięcie klawisza. Jeszcze raz opiszę jak to wszystko wygląda:
    1. Pod klawisz nie ma dostępu:/ musiałbym rozebrać cały układ mechaniki co grozi po prostu rozwaleniem starego pianina.
    2. Klawisz naciska jedną dźwigienkę do której jeszcze nie ma dostępu
    3. Potem druga dźwigienka (odrywa się od pierwszej)
    4. Młoteczek, który też odrywa się od dźwigienki 2
    Procedura wygląda następująco:
    1. Początkowy stan wciśnięcia klawisza-młoteczek unosi się i odrywa o długiej listwy na której się opiera(listwa pokryta jest filcem, żeby nie stukało jak młoteczki wracają na swoje miejsce). Wg mnie tu powinny znaleźć się jakieś styki wykrywające ten stan.
    2. Młoteczek leci, po drodze odrywa się od dźwigienki która go popchnęła
    3. Młoteczek uderza w strunę (piezo) po przebyciu jakiś 6cm drogi
    4. Młoteczek opada z powrotem na pokrytą również filcem dźwigienkę popychającą
    5. Jeśli klawisz jest dalej trzymany to dźwigienka uniemożliwia młoteczkowi oparcie się o listwę z filcem(młotek utrzymuje się jakiś 1 cm od ostatecznej pozycji spoczynkowej

    Wg mnie realizacja styków na listwie z filcem o którą opierają się młoteczki w spoczynku jest chyba dość racjonalnym rozwiązaniem wykrycia czy klawisz jest wciśnięty. W większości produkowanych klawiatur do syntezatorów, czy pianin cyfrowych stosuje się tzw gumki (takie jak w pilotach od TV) leżące jedna za drugą pod klawiszem - mierzony jest czas od załączenia pierwszej do drugiej gumki, a w bardzo drogich klawiaturach stosowana jest optyka - idea jest taka sama jak w przypadku styków. Więc podejrzewam, że stosunkowo najłatwiej będzie zmierzyć czas od oderwania się młoteczka od styku aż do uderzenia w piezo, a nuta się nie wyłączy do puki młoteczek nie opadnie i nie załączy podstawowego styku.
    Już nawet zastanawiałem się nad jakimś rozwiązaniem optycznym, boje się że styki długo nie pociągną i będą nieprecyzyjne:/ drgania styków itp. Problem jest jeszcze taki, że młoteczki są bardzo lekkie i doskonale wyważone, co oznacza, że bardzo delikatnie opierają się na tej listwie z filcem i nie wchodzi w grę wciśnięcie młoteczkiem jakiegoś kupnego microswitcha czy innego włącznika.

    0
  • #18 22 Lut 2010 10:25
    _jta_
    Specjalista elektronik

    Dobrze byłoby sprawdzić, w jakim zakresie może się mieścić, w zależności od siły uderzenia w klawisz:
    - czas ruchu młoteczka (od oderwania się od położenia spoczynkowego, do uderzenia)
    - napięcie z piezoelementu, w który uderza młoteczek (może naładować jakiś kondensator)
    Jeden z tych parametrów trzeba wykorzystać, żeby ustalić, jaka była siła uderzenia. Pomiar czasu może
    dać dokładniejszy wynik przy lekkim uderzeniu; pomiar napięcia (może jakoś przetworzyć je na impuls
    elektryczny o czasie zależnym od jego wartości, najlepiej logarytmicznie - rozładowanie kondensatora)
    - przy silniejszym, bądź niezależny od siły uderzenia (licząc błąd względny, w % tego, co zmierzymy).

    Jeśli czujnik ma rozpoznawać, czy młoteczek opiera się delikatnie, czy się nie opiera, to trudno będzie
    o taki czujnik, który to zrobi szybko, określając precyzyjnie kiedy młoteczek przestał się o niego opierać
    - jest ryzyko, że przy silnym uderzeniu pomiar czasu wprowadzi spory błąd oceny siły uderzenia.
    Trzeba się liczyć z tym, że grający puści klawisz delikatnie, i wtedy młoteczek cofnie się na miejsce
    bez uderzenia - źle będzie, jeśli czujnik to "przegapi", i nuta będzie grać bez końca. Dlatego myślałem
    o czujniku w postaci piezoelementu drgającego w zakresie ultradźwięków i wykrywaniu tłumienia.

    Jeszcze jedno - w pianinie jest jeszcze jakiś mechanizm, który tłumi drgania struny, kiedy klawisz
    nie jest wciśnięty - jakoś go nie zauważyłem w twoim opisie, a to tłumienie wypadałoby wykrywać.

    0
  • #19 22 Lut 2010 12:23
    WWektor
    Poziom 12  

    Tłumienie strun jest ściśle powiązane z klawiszem, i jego wykorzystanie jest zbędne bo bezpośrednio przekłada się na trzymany czy puszczony klawisz. A więc jeśli pianista puści klawisz to dopiero wtedy tłumienie opada na struny a to jest to samo co opadnięcie młoteczka na listwę do pozycji spoczynkowej. Jako, że struny nie biorą udziału i są niepożądane w tym projekcie to tak samo tłumienie strun niczego nie zmienia. Pomyślałem przez chwile że można by wykorzystać tłumiki opadające na struny do wykrywania wciśnięcia klawisza, ale niestety ta część mechaniki pianina jest zdecydowanie mniej precyzyjna i na dodatek nie obejmuje wszystkich strun, tzn około 2 oktawy najwyższych dźwięków w ogóle nie są tłumione, struny wybrzmiewają bardzo szybko i po prostu nie jest to potrzebne. Coraz bardziej skłaniam się w stronę jakieś prymitywnej i łatwo dostępnej optyki do wykrywania oderwania młoteczka od listwy spoczynkowej. Dzisiaj wieczorem spróbuje ściągnąć charakterystykę prędkości młoteczka.

    0
  • #20 22 Lut 2010 12:31
    _jta_
    Specjalista elektronik

    Jeśli optyka, to LED-y + fototranzystory - fotooporniki są zbyt wolne, ich opóźnienie jest rzędu dziesiątych części sekundy. Nie wiem, jak z cenami.

    0
  • #21 23 Lut 2010 09:14
    viayner
    Poziom 34  

    Witam,
    Troszke niejasnosci znowu sie pojawilo. Jak pisalem wczesniej wszelkie niuanse brzmieniowe "zalatwia" modul dzwiekowy a wiec przenoszenia drgan na sasiednie struny czy tlumienie ich - to jest modul dzwiekowy - jak by nie patrzec struny sa modulem dzwiekowym fortepianu a opadajacy mloteczek ktory je tlum to odpowiednik odpowiedniego kontrolera/komunikatu a raczej jego interpretacji midi.
    Kolega ktory zalozyl post chce przeksztalcic klawiature mloteczkowa pianina w kontroler midi i jak sam dodal nawet dosc prosty.
    Moze rozdzielmy to co robi klawiatura / kontroler midi od tego co robi modol dzwiekowy.
    Wracajac do sprawy, rownie dobry by byl uklad przyciskow jak uklad optyczny. Proponuje 2 rownolegle uklady - zamontowane pod ruchoma dzwignia-mloteczkiem. Matryca ogolnie mowiac nie wdajac sie w szczegoly "stykow". Pierwszy jest uruchamiany przy minimalnym wcisnieciu klawisza a drugi przy nieco glebszym - ale nie przy wcisnieciu klawisza do konca - to nie ten parametr, poza tym nie zawsze wciska sie klawisz do konca. Mierzymy czas miedzy polaczeniami. Jak ? wcisniecie klawisza w pierwszej matrycy uruchamia timer/przerwanie i czekamy na pojawienie sie tego samego klawisza w drugiej matrycy. Potem reset timera itp.
    Czunik piezo umieszczony pod mloteczkiem jak najbardziej ale ja bym je tu wykorzystal jako czujnik maksymalnego docisku klawisza - AT.
    Masz 88 klawiszy wiec przydalo by sie 8x10 linji z uC i to 2 razy. Chyba ze by pokusic sie o rozwiazanie tego typu ze wykrywamy wcisniecie i puszczenie styku - wtedy jeden styk zamontowany w taki sposob ze najpierw sie zalacza a dalej rozlacza, czyli wykrywanie przejscia L/H i potem H/L. Mam gdzies portexpandery16bitowe I2C ktore maja funkcje interrupt poczytam w datasheet'cie czy to by sie nie udalo na nich zrobic i w razie czego sie odezwe.
    Pozdrawiam

    0
  • #22 23 Lut 2010 11:29
    _jta_
    Specjalista elektronik

    Mam wrażenie, że piszemy nie o niuansach brzmieniowych (ja o nich wspomniałem chyba tylko raz),
    a o tym, jak ruch klawisza przetworzyć na sygnały, żeby można było go odtworzyć z tych sygnałów.

    Jeśli matryca i pomiar czasu, to pytanie, jak to zrobić, żeby użycie matrycy nie generowało błędów?
    Stosowanie "portexpanderów I2C" to, mam wrażenie, recepta na uzyskanie dodatkowych błędów...

    Czujnik piezo nadaje się do wykrywania uderzenia, nie nacisku - może sprawdź jego parametry?
    Poza tym, po co pomiar nacisku klawisza, jeśli to ma działać jak pianino? Jeśli miałoby działać
    jako jakiś inny instrument, w którym ważna jest nie siła uderzenia w klawisz, a siła nacisku już
    po jego wciśnięciu, czy głębokość wciśnięcia, to klawiatura pianina ma nie taką mechanikę.

    Jako czujnik nacisku (jeśli taki miałby być użyty) mogłaby być kulka z przewodzącej gumy, która
    by łączyła styki - im silniejszy nacisk, tym bardziej kulka się rozpłaszcza i większą powierzchnią
    łączy styki, więc przepuszcza większy prąd. I ten prąd można przetworzyć przy użyciu ADC.

    Ale to nie pod młoteczki, bo w pianinie mechanizm jest taki, że nacisk na klawisz przetwarza się
    na prędkość ruchu, i potem siłę uderzenia młoteczka - a potem jego nacisk będzie słabiutki.

    0
  • #23 24 Lut 2010 08:22
    viayner
    Poziom 34  

    Witam,
    Zgadzam sie ze odbiegamy od sedna i za to przepraszam z mojej strony tworce postu.
    Klawiatura mloteczkowa ma te przewage ze uklad dzwigni przetwarza minimalne wcisniecie klawisza na dosc "duzy" ruch mloteczka. Wlasnie ruch mloteczka proponuje wykorzystac do tworzenia komunikatow NoteOn i NoteOff jak i Velocity.
    Zgadzam sie elementy piezo sa czujnikami dynamicznymi ale nadal mozna by pokusic sie o wykorzystanie ich jako analizator komendy AT - umieszczony tak aby klawisz czy jakis element jego mechaniki oddzialywal na czujnik w koncowej fazie docisku klawisza. Rozwiazanie to ma te wade ze do ponownego wyslania komendy AT bedzie wymagane lekkie pusczenie i ponowny docisk klawisza.
    Wracajac do anlizy dynamiki, negowany uklad 2 stykow jest jak najbardziej powszechny i nie najdrozszy. Nie wymaga az tak duzej mocy obliczeniowej mikrokontrolera jak by sie wydawalo, no bo jak by to porownac do instrumentow ktore wykorzystuja do obslugi klawiatury intelowski 8035 obsluguja velocity i AT. 8035 mial zegar rzedu 6MHz a wiec w porownaniu z dzisiejszymi uC to raczej slimaczek. Z drugiej strony analiza velocity nie musi byc az tak dokladna, prosze sie zastanowic czy zauwazymy roznice wcisniecia klawisza/glosnosci dzwieku przy velocity przykladowo 97 i 98 ?
    Uklad z expanderami tez w jakims instrumencie widzialem, z ciekawosci odszukam go do porownan.
    Jednak wybor nalezy do autora postu.
    Pozdrawiam.

    0
  • #24 24 Lut 2010 10:08
    WWektor
    Poziom 12  

    Po pierwsze nie możemy wykorzystać młoteczków do AT, bo młoteczki po uderzeniu cofają się jakieś 4cm żeby nie tłumić strun, a przysunięcie piezo tak blisko do młoteczka żeby wywierał nacisk zaburzy całe działanie mechaniki i odczucie na klawiszach będzie inne niż w normalnej klawiaturze. Wydaje mi się, że mierzenie samej dynamiki już stwarza na tyle dużo problemów mechanicznych że na razie nie chce się wdawać w AfterTouch. Próbowałem ze stykami mechanicznymi i niestety koncepcja poległa, drgania styków są zbyt duże, wszystko jest niepewne i nie ma jednoznacznego punktu załączenia. Styki wykonałem jako szczotki (miotełki sprężyste przylutowane do kawałka laminatu, gdy młoteczek się opierał o sczotkę to zwierał ją do pada na laminacie). Pozostaje mi sprawdzić optykę (led + fototranzystor) Może jeden led obsłuży kilka młoteczków, albo nawet patent z linią laserową z poziomicy rzuconą na fototranzystory przez końce młoteczków. Muszę popróbować. Fototranzystor 940nm kąt 30st i 30V to koszt około 30gr za sztukę, to nie jest jakiś majątek, do tego zastosować diodę laserową z nagrywarki CD, będzie miała podobną długość fali i mam nadzieje wystarczającą moc na wszystkie młoteczki. Pozostaje problem specjalnej soczewki rozpraszającej w linię :/

    0
  • #25 25 Lut 2010 09:42
    viayner
    Poziom 34  

    Witam,
    Przepraszam ale pomysl z miotelka z drucikow to nie najlepsze rozwiazanie, jezeli juz to jakies hermetyczne miroprzelaczniki - takie sa stosowane fabrycznie. Do tego procedura tlumienia drgan stykow - programowa.
    Co do ukladow optycznych to porponuje uklad w stylu CNY70 gdzie w jednej obudowie masz nadajnik i odbiornik w takim przypadku mozna by sie pokusic o przyklejenie na ruchomym elemencie klawisza nalepki w stylu czarne-biale-czarne-biale-czarne i wykrywac przejscia H/L czy odwrotne - i masz dynamike. Jeden uklad optyczny zastapi 2 przelaczniki. Ale jak nie bedziesz utrzymywal klawiatury w czystosci to jakis duzy okruch czy kurz i beda bledy.
    Pomysl z laserem czy wykozystaniem ukladu na kilka mloteczkow nie bardzo mi sie widzi poniewaz co bedzie z przeslanianiem przez klawisz polozony wczesniej ?
    Wracajac do ukladu optycznego to gdzies widzialam czujniki optyczne odbiciowe z wbudowanym ukladem formujacym impulsy, to by uproscilo sprawe ale koszty moga byc wyzsze.
    Pozdrawiam

    0
  • #26 25 Lut 2010 19:09
    _jta_
    Specjalista elektronik

    Można mierzyć optycznie prędkość ruchu młoteczka (z rozpoznawaniem zwrotu), jeśli nakleimy na nim jakieś nalepki
    (np. z paskami czarno-białymi), używając do tego dwóch fotodiód (albo raczej fototranzystorów) i LED-a do oświetlenia;
    asymetryczny układ pasków pozwoli zrobić to przy użyciu jednej fotodiody, ale interpretacja sygnału będzie trudniejsza.

    Problemem może być duża prędkość ruchu, i odpowiednio duże wymagania co do szybkości przetwarzania sygnału.

    Przydałaby się konkretna informacja o prędkościach ruchu młoteczków - żeby ocenić, jakie te wymagania będą.

    Inna możliwość to czujniki uderzenia młoteczka i jego powrotu zrobione z piezoelementów.

    I tak czy siak trzeba wiedzieć, jakie sygnały (napięcia, szybkość zmian) trzeba będzie przetwarzać - trzeba to zmierzyć.

    0
  • #27 09 Kwi 2010 14:12
    WWektor
    Poziom 12  

    Na razie temat chwilowo wstrzymany, zostałem tatusiem i muszę się oddać innym obowiązkom :P
    Co do klawiatury to po kilku jeszcze testach, skłaniam się coraz bardziej do zakupienia optyki i mierzenia oderwania młoteczka właśnie optyką i obliczania czasu.
    Do tematu mam nadzieje wrócę w najbliższym czasie :)

    0
  • #28 09 Kwi 2010 16:22
    _jta_
    Specjalista elektronik

    A ustaliłeś, jakie czasy trzeba będzie mierzyć, czy nie będą za krótkie?

    Co do optyki, to LED IR pewnie da się kupić nawet taniej, niż fototranzystor
    - nie ma co kombinować z rozprowadzaniem światła z LED-a laserowego.

    Wymyśliłem jeszcze jeden sposób: czujnik magnetyczny, wykrywający
    położenie blaszki - trzeba by jakąś przyczepić do każdego młoteczka.

    0