Estoy tratando de construir un controlador tipo MIDI que tenga el cuello como una guitarra. En ese cuello, hay una enorme matriz de sensores de presión. El controlador emulará 3 cadenas.
La forma en que esto funciona es: hay 3 tiras largas de cinta de cobre de doble cara (0.5 cm de ancho, hasta el cuello) que están conectadas a la alimentación (3.3V o 5V probablemente, no importa por ahora). En estas tiras hay una capa de Velostat, que cambia la resistividad en función de la presión. En la parte superior del velostat habrá otra capa de filas o celdas de cinta de cobre, conectada a algo, que escupe una lectura del voltaje a través de la capa del velostat. Como el cuello mide unos 40 cm de largo, habrá al menos 80 filas.
Si imagina las 3 tiras inferiores de cinta de cobre como columnas de un gráfico a lo largo del cuello, los sensores serán las celdas o las filas, dependiendo del método de medición (pensé que también podría multiplexar las columnas, entonces podría haber filas.) Sin embargo, hay algunas condiciones especiales que podrían facilitarlo: como se trata de un controlador similar a una guitarra, ¡no es necesario medir todas las interacciones! Solo importa el toque más cercano al cuerpo del controlador. También una resolución de 8 bits debe ser lo suficientemente precisa. 255 niveles de presión son probablemente más de lo que se necesita de todos modos.
Ahora los bits difíciles:
La medición debe ser en tiempo real y suficiente para detectar golpes de martillo, etc. (no tengo idea de cuán alta debe ser la frecuencia de muestreo, estimada en varios kHz para una buena medición y capacidad de reproducción) y la salida digital del controlador debe ser MIDI (en 3 canales separados, uno por cadena) o una señal digital que puede procesarse con una Raspberry Pi.
Ahora que mi conocimiento es realmente limitado, no puedo pensar en las herramientas adecuadas para el trabajo. Sin embargo, lo que sí sé es: es posible. Hay un controlador similar pero diferente que usa una técnica muy similar (que prácticamente realicé ingeniería inversa hasta que me di cuenta, que tienen una patente y la información sobre cómo lo hacen no es tan arcana como pensé), se llama ROLI Litoral.
TL; DR:
aproximadamente 240 sensores
se puede separar en grupos de 80 que funcionan con la misma línea
Esta es una aplicación en tiempo real, necesito adquirir presión de cada sensor a medida que se toca (se aplican algunas condiciones, ver arriba)
Gracias de antemano, sé que es mucho para leer. Agradezco cualquier sugerencia y me alegraría que me ayudaras a lograr el terrible desastre que me propuse producir.
Cosas que he pensado hasta ahora:
Multiplexando filas y columnas, leyendo cada celda con un ADC MCP3008 o más grande y encadenando ATmegas (en cadena o en forma de árbol) que solo empuja la interacción más baja en cuanto a la posición hasta la señal final, pero según mis cálculos, eso podría posiblemente ser atrapado por La comunicación sobrecarga. También un modelo anterior incluía potenciómetros de cinta, que he descartado, porque el diseño era malo (varios intentos, no fue lo suficientemente bueno).
EDITAR / ACTUALIZAR:
Gracias por las buenas sugerencias hasta ahora! Gracias a ellos ahora puedo expresar mi problema mucho más claramente:
Tengo una matriz de 80 filas * 3 columnas de sensores de presión. Cuando un humano está interactuando con la matriz de sensores, varios sensores cercanos detectarán el toque, pero solo a lo largo de una columna. Las columnas están separadas mecánicamente. Los sensores tienen una resistencia entre 100 Ohm y 1 kOhm. Todos estos sensores deben leerse con una profundidad de 8 bits, procesarse y los resultados deben enviarse con una velocidad de al menos 1 kHz. Por lo tanto, una sola lectura / procesamiento debe tomar menos de un milisegundo. El resultado final por columna debe ser: 4 bytes para un float32 y 1 byte para un uint8. El float32 indicará la posición promedio de la primera interacción a lo largo de la columna. Una interacción se define como un grupo consecutivo de sensores con una presión por encima de cierto umbral. Aquí es donde el procesamiento entra en la mezcla: la columna se desplazará hacia abajo hasta que una lectura sobrepase un umbral. Esto contará como el inicio de una interacción. La presión y la posición de cada sensor se memorizan hasta el primer sensor, que cae por debajo del umbral con un máximo de (probablemente) 4 sensores consecutivos. De todos los sensores de la interacción registrada, solo se procesarán dos sensores: el que lee la presión más alta (resistencia más baja) y el más alto directamente encima o debajo de ella. La posición del punto flotante se calcula promediando las dos posiciones del sensor ponderadas por sus presiones. La presión general de la interacción será solo la suma de ambas presiones fijadas entre 0 y 255 (agregue ambas presiones de la unidad 8 en un uint16 y divida por 2 sin redondear, descarte los bits innecesarios; esto debería ser rápido). Esto debe suceder para cada columna. El resultado del tamaño de 15 bytes se enviará a través de SPI a una computadora pequeña (Raspberry Pi B3) que actúa como sintetizador. No estoy establecido en el método de transmisión. Si SPI no es la herramienta adecuada para el trabajo, estoy dispuesto a tomar cualquier método de comunicación que un Raspberry Pi pueda manejar. Como se trata de una aplicación musical interactiva, la latencia es crucial.
Mis preguntas exactas son: ¿Se puede resolver esto con un solo microcontrolador sin romper el banco? No puedo permitirme comprar CI por valor de varios cientos de dólares para un proyecto de pasatiempo. ¿Qué hardware recomendarías? ¿Hay advertencias no obvias de las que debo tener cuidado?
El enfoque que obtuve de las respuestas hasta ahora era alimentar cada columna individualmente, luego leer las filas con 5 ADC de 16 canales (ADS7961) conectados a un Arduino a través de SPI. Me preocupa que este no sea el enfoque más fácil / más barato o que no sea lo suficientemente rápido como para alcanzar una velocidad de> 1 kHz.
Descargo de responsabilidad: normalmente soy un químico teórico y un terrible aficionado cuando se trata de ingeniería eléctrica, todo lo que sé es autodidacta y sin antecedentes profesionales (que es la razón por la que busco ayuda de personas más conocedoras). Sin embargo, conozco el software. Cualquier cosa relacionada con el software, lo descubriré con suficiente tiempo. Además, soy alemán, así que disculpe las fallas gramaticales ocasionales.