Estou tentando construir um controlador tipo MIDI que tem um pescoço como uma guitarra. Nesse pescoço, há uma enorme matriz de sensores de pressão. O controlador emulará 3 strings.
A maneira como isso funciona é: Existem 3 tiras longas de fita de cobre de dupla face (0,5 cm de largura, desde que o pescoço) estão conectadas à energia (provavelmente 3,3V ou 5V, não importa por enquanto). Nestas tiras, há uma camada de Velostat, que altera a resistividade com base na pressão. No topo do velostat haverá outra camada de linhas ou células de fita de cobre, conectada a algo, que cospe uma leitura da tensão através da camada de velostat. Como o pescoço tem cerca de 40 cm de comprimento, haverá pelo menos 80 linhas.
Se você imaginar as três tiras inferiores da fita de cobre como colunas de um gráfico ao longo do pescoço, os sensores serão as células ou as linhas, dependendo do método de medição (pensei que seria possível multiplexar as colunas também, pode haver linhas.) Existem algumas condições especiais que podem facilitar isso: como esse é um controlador de guitarra, nem toda interação precisa ser medida! Apenas o toque mais próximo do corpo do controlador é importante. Também uma resolução de 8 bits deve ser precisa o suficiente. 255 níveis de pressão provavelmente são mais do que o necessário.
Agora os bits difíceis:
A medição precisa ser em tempo real y o suficiente para detectar interferências, etc. (não faz ideia do quanto a taxa de amostragem precisa - estimada em vários kHz para uma boa medição e jogabilidade) e a saída digital do controlador deve ser MIDI (em 3 canais separados - um por sequência) ou um sinal digital que pode ser processado com um Raspberry Pi.
Agora, como meu conhecimento é realmente limitado, não consegui pensar nas ferramentas certas para o trabalho. O que sei, porém, é: é possível. Existe um controlador semelhante, mas diferente, que usa uma técnica muito semelhante (que eu praticamente inverta a engenharia até que notei, que eles têm uma patente e as informações sobre como fazem isso não são tão misteriosas quanto eu pensava), é chamado de ROLI Seaboard.
TL; DR:
aproximadamente 240 sensores
pode ser separado em grupos de 80 que são alimentados pela mesma linha
como é uma aplicação em tempo real, preciso adquirir pressão de todos os sensores à medida que são tocados (algumas condições se aplicam, veja acima)
Agradecemos antecipadamente, eu sei que é muito para ler. Sou grato por qualquer sugestão e ficaria muito feliz se você pudesse me ajudar a realizar a terrível bagunça que me propus a produzir!
Coisas em que pensei até agora:
Multiplexação de linhas e colunas, lendo cada célula com um ADC MCP3008 ou superior e encadeando (cadeia daisy ou árvore) ATmegas, que apenas empurram a menor interação em termos de posição para o sinal final, mas, pelos meus cálculos, isso pode ser prejudicado por a sobrecarga de comunicação. Também um modelo anterior incluía potenciômetros de fita, que eu descartei, porque o design era ruim (várias tentativas, não era legal o suficiente).
EDIT / UPDATE:
Obrigado pelas boas sugestões até agora! Graças a eles, agora sou capaz de expressar meu problema com muito mais clareza:
Eu tenho uma matriz de 80 linhas * 3 colunas de sensores de pressão. Quando um humano está interagindo com a matriz do sensor, vários sensores próximos captam o toque, mas apenas ao longo de uma coluna. As colunas são separadas mecanicamente. Os sensores têm uma resistência entre 100 Ohm e 1 kOhm. Todos esses sensores precisam ser lidos com profundidade de 8 bits, processados e os resultados precisam ser enviados com uma taxa de pelo menos 1 kHz. Portanto, uma única leitura / processamento precisa levar menos de um milissegundo. A saída final por coluna precisa ser: 4 bytes para um float32 e 1 byte para um uint8. O float32 indicará a posição média da primeira interação ao longo da coluna. Uma interação é definida como um cluster consecutivo de sensores com uma pressão acima de um determinado limite. É aqui que o processamento entra na mistura: a coluna será deslocada para baixo até que uma leitura ultrapasse um limite. Isso contará como o início de uma interação. A pressão e a posição de cada sensor são memorizadas até o primeiro sensor, que fica abaixo do limite com um máximo de (provavelmente) 4 sensores consecutivos. De todos os sensores da interação gravada, apenas dois sensores serão processados - aquele que lê a pressão mais alta (menor resistência) e o mais alto diretamente acima ou abaixo dela. A posição do ponto flutuante é calculada calculando a média das duas posições do sensor ponderadas por suas pressões. A pressão geral da interação será apenas a adição de ambas as pressões presas entre 0 e 255 (adicione ambas as pressões da unidade8 em um uint16 e divida por 2 sem arredondamento, descarte os bits desnecessários - isso deve ser rápido). Isso precisa acontecer para todas as colunas. O resultado do tamanho de 15 bytes será enviado pelo SPI para um computador pequeno (Raspberry Pi B3) que atua como sintetizador. Eu não estou definido no método de transmissão. Se o SPI não for a ferramenta certa para o trabalho, estou disposto a adotar qualquer método de comunicação que um Raspberry Pi possa manipular. Como esse é um aplicativo interativo musical, a latência é crucial.
Minhas perguntas exatas são: Isso pode ser resolvido com um único microcontrolador sem gastar muito? Não posso me dar ao luxo de comprar várias centenas de dólares em ICs para um projeto de hobby. Qual hardware você recomendaria? Existem advertências não óbvias que eu preciso tomar cuidado?
A abordagem que deduzi das respostas até agora era alimentar cada coluna individualmente e, em seguida, ler as linhas com 5 ADCs de 16 canais (ADS7961) conectados a um Arduino sobre SPI. Estou preocupado que essa possa não ser a abordagem mais fácil / barata ou não seja rápida o suficiente para atingir uma taxa de> 1 kHz.
Isenção de responsabilidade: normalmente sou um químico teórico e um péssimo amador quando se trata de engenharia elétrica, tudo o que sei é autodidata e sem formação profissional (o que, por sua vez, é a razão pela qual estou buscando ajuda de pessoas mais conhecedoras). Eu sei o meu caminho em torno de software embora. Qualquer coisa relacionada a software, vou descobrir com tempo suficiente. Além disso, eu sou alemão, então desculpe falhas gramaticais ocasionais.