J'essaie de construire un contrôleur de type MIDI qui a un manche comme une guitare. Sur ce cou, il y a une énorme matrice de capteurs de pression. Le contrôleur émule 3 chaînes.
La façon dont cela fonctionne est: Il y a 3 longues bandes de ruban de cuivre double face (0,5 cm de largeur, aussi long que le cou) qui sont connectées à l'alimentation (3,3 V ou 5 V probablement, peu importe pour l'instant). Sur ces bandes se trouve une couche de Velostat, qui change la résistivité en fonction de la pression. Au sommet du vélostat se trouve une autre couche de rangées ou de cellules de ruban de cuivre, connectée à quelque chose, qui crache une lecture de la tension à travers la couche de vélostat. Comme le cou mesure environ 40 cm de long, il y aura au moins 80 rangées.
Si vous imaginez les 3 bandes inférieures de ruban de cuivre comme des colonnes d'un graphique le long du cou, les capteurs seront soit les cellules ou les rangées, selon la méthode de mesure (je pensais que l'on pourrait également multiplexer les colonnes, puis il peut y avoir des rangées.) Il y a quelques conditions spéciales qui pourraient faciliter cela cependant: comme il s'agit d'un contrôleur de type guitare, toutes les interactions ne doivent pas être mesurées! Seule la touche la plus proche du corps du contrôleur importe. Une résolution de 8 bits doit également être suffisamment précise. 255 niveaux de pression sont probablement plus que nécessaire de toute façon.
Maintenant, les morceaux difficiles:
La mesure doit être suffisamment en temps réel pour détecter les coups de bélier, etc. (aucune idée de la hauteur de la fréquence d'échantillonnage - estimée à plusieurs kHz pour une bonne mesure et jouabilité) et la sortie numérique du contrôleur doit être soit MIDI (sur 3 canaux séparés - un par chaîne) ou un signal numérique qui peut être traité avec un Raspberry Pi.
Maintenant que mes connaissances sont vraiment limitées, je ne pouvais pas penser aux bons outils pour le travail. Ce que je sais cependant, c'est que c'est possible. Il y a un contrôleur similaire mais différent qui utilise une technique très similaire (que j'ai pratiquement inversée jusqu'à ce que je remarque, qu'ils ont un brevet et que les informations sur la façon dont ils le font ne sont pas aussi obscures que je le pensais), on l'appelle le ROLI Côte.
TL; DR:
environ 240 capteurs
peut être séparé en groupes de 80 alimentés par la même ligne
c'est une application en temps réel, j'ai besoin d'acquérir la pression de chaque capteur quand il est touché (certaines conditions s'appliquent, voir ci-dessus)
Merci d'avance, je sais que c'est beaucoup à lire. Je suis reconnaissant pour toute suggestion et serais très heureux si vous pouviez m'aider à accomplir le terrible gâchis que je me suis fixé pour objectif de produire!
Les choses auxquelles j'ai pensé jusqu'à présent:
Multiplexer des lignes et des colonnes, lire chaque cellule avec un ADC MCP3008 ou plus et chaîner des ATmegas (en guirlande ou en arbre) qui ne poussent que l'interaction la plus basse en termes de position jusqu'au signal final, mais d'après mes calculs, cela pourrait éventuellement être goulot d'étranglement par les frais généraux de communication. De plus, un modèle antérieur comprenait des potentiomètres à ruban, que j'ai rejetés, car la conception était mauvaise (plusieurs tentatives, pas assez cool).
MODIFIER / METTRE À JOUR:
Merci pour les bonnes suggestions jusqu'à présent! Grâce à eux, je peux maintenant exprimer mon problème beaucoup plus clairement:
J'ai une matrice de 80 lignes * 3 colonnes de capteurs de pression. Lorsqu'un humain interagit avec la matrice de capteurs, plusieurs capteurs à proximité captent le toucher, mais uniquement le long d'une colonne. Les colonnes sont séparées mécaniquement. Les capteurs ont une résistance entre 100 Ohm et 1 kOhm. Tous ces capteurs doivent être lus avec une profondeur de 8 bits, traités et les résultats doivent être envoyés avec une fréquence d'au moins 1 kHz. Ainsi, une seule lecture / traitement doit prendre moins d'une milliseconde. La sortie finale par colonne doit être: 4 octets pour un float32 et 1 octet pour un uint8. Le float32 indiquera la position moyenne de la première interaction le long de la colonne. Une interaction est définie comme un groupe consécutif de capteurs avec une pression supérieure à un certain seuil. C'est là que le traitement entre dans le mix: la colonne sera parcourue vers le bas jusqu'à ce qu'une lecture dépasse un seuil. Cela comptera alors comme le début d'une interaction. La pression et la position de chaque capteur sont mémorisées jusqu'au premier capteur, qui tombe en dessous du seuil avec un maximum de (probablement) 4 capteurs consécutifs. De tous les capteurs de l'interaction enregistrée, seuls deux capteurs seront traités - celui qui lit la pression la plus élevée (résistance la plus basse) et la plus élevée directement au-dessus ou en dessous. La position en virgule flottante est calculée en faisant la moyenne des deux positions de capteur pondérées par leurs pressions. La pression globale de l'interaction sera simplement l'addition des deux pressions serrées entre 0 et 255 (ajoutez les deux pressions de l'unité8 en uint16 et divisez par 2 sans arrondir, jetez les bits inutiles - cela devrait être rapide). Cela doit se produire pour chaque colonne. Le résultat de la taille de 15 octets sera ensuite envoyé via SPI à un petit ordinateur (Raspberry Pi B3) qui fait office de synthétiseur. Je ne suis pas fixé sur le mode de transmission. Si SPI n'est pas le bon outil pour le travail, je suis prêt à prendre n'importe quelle méthode de communication qu'un Raspberry Pi peut gérer. Puisqu'il s'agit d'une application musicale-interactive, la latence est cruciale.
Mes questions exactes sont les suivantes: cela peut-il être résolu avec un seul microcontrôleur sans casser la banque? Je ne peux pas me permettre d'acheter plusieurs centaines de dollars de circuits intégrés pour un projet de loisir. Quel matériel recommanderiez-vous? Y a-t-il des mises en garde non évidentes dont je dois me méfier?
L'approche que j'ai tirée des réponses jusqu'à présent consistait à alimenter chaque colonne individuellement, puis à lire les lignes avec 5 ADC à 16 canaux (ADS7961) connectés à un Arduino sur SPI. Je crains que ce ne soit pas l'approche la plus facile / la moins chère ou pas assez rapide pour atteindre un taux> 1 kHz.
Avertissement: je suis normalement un chimiste théoricien et un terrible amateur en matière de génie électrique, tout ce que je sais est autodidacte et sans aucune formation professionnelle (ce qui est à mon tour la raison pour laquelle je cherche de l'aide auprès de personnes plus compétentes). Mais je connais bien le logiciel. Tout ce qui concerne le logiciel, je le découvrirai avec assez de temps. De plus, je suis allemand, alors veuillez excuser les défauts de grammaire occasionnels.