Я намагаюся створити MIDI-подібний контролер, який має шию, як гітара. На цій шиї є величезна матриця датчиків тиску. Контролер буде імітувати 3 рядки.
Як це працює: Три довгі смужки двосторонньої мідної стрічки (шириною 0,5 см, як шийка), які підключені до живлення (3,3 В або 5 В, мабуть, наразі не має значення). На цих смугах розташований шар Велостату, який змінює опір на основі тиску. Зверху на веластаті буде ще один шар рядків або комірок мідної стрічки, з'єднаних із чимось, що виплює показання напруги через шар велостату. Оскільки шия завдовжки близько 40 см, буде не менше 80 рядів.
Якщо ви уявляєте нижню 3 смужки мідної стрічки як стовпчики діаграми вздовж горловини, датчиками будуть або клітини, або рядки, залежно від методу вимірювання (я думав, що можна було б також мультиплексувати стовпчики, тоді Там можуть бути рядки.) Існує кілька спеціальних умов, які можуть полегшити це: Оскільки це контролер, подібний до гітари, не кожну взаємодію потрібно вимірювати! Має значення лише дотик, найближчий до корпусу контролера. Також роздільна здатність 8 біт повинна бути достатньо точною. 255 рівнів тиску, ймовірно, більше, ніж потрібно в будь-якому випадку.
Тепер складні шматочки:
Вимірювання повинно бути в режимі реального часу - y достатньо для виявлення забивання тощо (навіть не уявляючи, наскільки високою є вибіркова швидкість - оцінюється в кілька кГц для хорошої міри та відтворюваності), а цифровий вихід контролера повинен бути або MIDI (на 3 окремих канали - по одному на рядок) або цифровий сигнал, який можна обробити за допомогою Raspberry Pi.
Оскільки мої знання справді обмежені, я не міг придумати правильних інструментів для роботи. Що я все-таки знаю: це можливо. Існує аналогічний, але різний контролер, який використовує дуже схожу техніку (яку я практично інженерно розробляв, поки не помітив, що у них є патент, а інформація про те, як вони це роблять, не така таємнича, як я думала), це називається ROLI Морське узбережжя.
TL; DR:
приблизно 240 датчиків
можна розділити на групи по 80, які живляться за тією ж лінією
це програма в реальному часі, мені потрібно тиснути з кожного датчика під час дотику (деякі умови застосовуються, див. вище)
Заздалегідь дякую, я знаю, що це багато що читати. Я вдячний за будь-яку пропозицію і буду дуже радий, якби ви могли допомогти мені здійснити жахливий безлад, який я мав на меті створити!
Речі, про які я думав поки що:
Мультиплексування рядків і стовпців, зчитування кожної комірки з MCP3008 або більшою АЦП та ланцюжок (ланцюжок ромашки або дерево типу) ATmegas, які підштовхують лише нижчу взаємодію до позитивного кінцевого сигналу, але з моїх підрахунків, які, можливо, можуть бути обмежені спілкування накладні. Також більш рання модель включала стрічкові потенціометри, які я відкинув, тому що конструкція була поганою (кілька спроб, не було досить круто).
Редагування / оновлення:
Дякуємо за хороші пропозиції поки! Завдяки їм я можу набагато чіткіше викласти свою проблему:
У мене є матриця на 80 рядків * 3 колонки датчиків тиску. Коли людина взаємодіє з матрицею датчиків, декілька датчиків, що знаходяться в безпосередній близькості, підхоплять дотик, але лише уздовж стовпчика. Стовпи розділені механічно. Датчики мають опір між 100 Ом і 1 кОм. Усі ці датчики потрібно зчитувати з глибиною 8 біт, обробляти і результати надсилати зі швидкістю не менше 1 кГц. Тому одне читання / обробка потребує менше мілісекунди. Кінцевий вихід на стовпець повинен бути: 4 байти для float32 та 1 байт для uint8. Float32 буде вказувати усереднене положення першої взаємодії вздовж стовпця. Взаємодія визначається як послідовне скупчення датчиків з тиском вище певного порогу. Ось де обробка потрапляє в суміш: стовпець буде просуватися вниз, поки читання не переступить поріг. Потім це буде вважатися початком взаємодії. Тиск і положення кожного датчика запам'ятовуються до тих пір, поки перший датчик не впаде нижче порогового значення, максимум (4) датчиків. З усіх датчиків записаної взаємодії буде оброблено лише два датчика - той, який зчитує найвищий тиск (найнижчий опір) і найвищий безпосередньо над або під ним. Положення з плаваючою точкою обчислюється шляхом усереднення двох положень датчиків, зважених за їх тисками. Загальний тиск взаємодії буде лише додаванням обох тиску, затиснутих між 0 і 255 (додати обидва тиску одиниці8 на утиль16 і розділити на 2 без округлення, відкинути непотрібні біти - це повинно бути швидким). Це має відбуватися для кожного стовпця. Результат розміром 15 байт буде відправлений через SPI на невеликий комп'ютер (Raspberry Pi B3), який виконує функції синтезатора. Я не налаштований на спосіб передачі. Якщо SPI не є правильним інструментом для роботи, я готовий скористатися будь-яким способом комунікації, з яким Raspberry Pi може працювати. Оскільки це музично-інтерактивна програма, затримка має вирішальне значення.
Мої точні питання: Чи можна це вирішити за допомогою одного мікроконтролера, не порушуючи банк? Я не можу дозволити собі придбати ІС на кілька сотень доларів для хобі-проекту. Яке обладнання ви б рекомендували? Чи є неочевидні застереження, з якими я повинен бути обережним?
Підхід, який я отримав з відповідей до цього часу, полягав у тому, щоб живити кожен стовпчик окремо, а потім зачитувати рядки з 5 16-канальними АЦП (ADS7961), підключеними до Arduino через SPI. Я переживаю, що це може бути не найпростішим / найдешевшим підходом або недостатньо швидким для досягнення швидкості> 1 кГц.
Відмова: Я, як правило, хімік-теоретик і жахливий любитель, що стосується електротехніки, все, що я знаю, - самоучка і без будь-якого професійного досвіду (що, в свою чергу, є причиною, коли я шукаю допомоги у більш обізнаних людей). Я все-таки знаю свій шлях навколо програмного забезпечення. Все, що стосується програмного забезпечення, я розберу з достатньою кількістю часу. Також я німець, тому, будь ласка, виправдайте випадкові недоліки граматики.