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