Ich versuche einen MIDI-ähnlichen Controller zu bauen, der einen Hals wie eine Gitarre hat. An diesem Hals befindet sich eine riesige Matrix von Drucksensoren. Der Controller emuliert 3 Strings.
Das funktioniert folgendermaßen: Es gibt 3 lange Streifen aus doppelseitigem Kupferband (0,5 cm breit, so lang wie der Hals), die an die Stromversorgung angeschlossen sind (3,3 V oder 5 V, wahrscheinlich, spielt für den Moment keine Rolle). Auf diesen Streifen befindet sich eine Velostatschicht, die den spezifischen Widerstand abhängig vom Druck ändert. Auf dem Velostat befindet sich eine weitere Schicht aus Reihen oder Zellen aus Kupferband, die mit etwas verbunden ist, das einen Spannungswert über die Velostatschicht ausgibt. Da der Hals ca. 40 cm lang ist, gibt es mindestens 80 Reihen.
Wenn Sie sich die unteren 3 Kupferstreifen als Spalten eines Diagramms entlang des Halses vorstellen, sind die Sensoren je nach Messmethode entweder Zellen oder Zeilen (ich dachte, man könnte die Spalten dann auch multiplexen) es könnte Reihen geben.) Es gibt jedoch einige spezielle Bedingungen, die dies erleichtern könnten: Da es sich um einen gitarrenähnlichen Controller handelt, muss nicht jede Interaktion gemessen werden! Es kommt nur auf die Berührung an, die dem Körper des Controllers am nächsten liegt. Auch eine Auflösung von 8 Bit sollte genau genug sein. 255 Druckstufen sind wahrscheinlich mehr als nötig.
Nun die schwierigen Teile:
Die Messung muss Echtzeit-Y-genug sein, um Hammer-Ons usw. zu erkennen (keine Ahnung, wie hoch die Abtastrate sein muss - geschätzt auf mehrere kHz für eine gute Messung und Abspielbarkeit), und der digitale Ausgang des Controllers sollte auch so sein MIDI (auf 3 separaten Kanälen - einer pro Saite) oder ein digitales Signal, das mit einem Raspberry Pi verarbeitet werden kann.
Jetzt, da mein Wissen wirklich begrenzt ist, konnte ich mir nicht die richtigen Werkzeuge für den Job vorstellen. Was ich jedoch weiß, ist: Es ist möglich. Es gibt einen ähnlichen, aber unterschiedlichen Controller, der eine sehr ähnliche Technik verwendet (die ich praktisch rückgängig gemacht habe, bis ich bemerkte, dass sie ein Patent haben und die Informationen darüber, wie sie es tun, nicht so geheimnisvoll sind, wie ich dachte). Man nennt ihn ROLI Küste.
TL; DR:
ungefähr 240 Sensoren
kann in 80er Gruppen aufgeteilt werden, die über dieselbe Leitung mit Strom versorgt werden
Dies ist eine Echtzeitanwendung. Ich muss den Druck von jedem Sensor erfassen, wenn er berührt wird (einige Bedingungen gelten, siehe oben).
Vielen Dank im Voraus, ich weiß, dass es viel zu lesen gibt. Ich bin dankbar für jeden Vorschlag und würde mich sehr freuen, wenn Sie mir dabei helfen könnten, das schreckliche Durcheinander zu schaffen, das ich anrichten wollte!
Dinge, an die ich bisher gedacht habe:
Multiplexen von Zeilen und Spalten, Lesen jeder Zelle mit einem MCP3008 oder einem größeren ADC und Verketten von (verketteten oder baumartigen) AT-Megas, die nur die positionsmäßig niedrigste Wechselwirkung zum endgültigen Signal führen, aber nach meinen Berechnungen, die möglicherweise durch einen Engpass verursacht werden könnten der Kommunikationsaufwand. Ein früheres Modell enthielt auch Farbbandpotentiometer, die ich verworfen habe, weil das Design schlecht war (mehrere Versuche waren nicht cool genug).
EDIT / UPDATE:
Vielen Dank für die guten Vorschläge! Dank ihnen kann ich mein Problem jetzt viel klarer formulieren:
Ich habe eine Matrix von 80 Zeilen * 3 Spalten mit Drucksensoren. Wenn ein Mensch mit der Sensormatrix interagiert, nehmen mehrere Sensoren in der Nähe die Berührung auf, jedoch nur entlang einer Säule. Die Säulen sind mechanisch getrennt. Die Sensoren haben einen Widerstand zwischen 100 Ohm und 1 kOhm. Alle diese Sensoren müssen mit einer Tiefe von 8 Bit gelesen, verarbeitet und die Ergebnisse mit einer Rate von mindestens 1 kHz gesendet werden. Ein einzelnes Lesen / Verarbeiten benötigt also weniger als eine Millisekunde. Die endgültige Ausgabe pro Spalte muss sein: 4 Byte für ein float32 und 1 Byte für ein uint8. Der float32 zeigt die gemittelte Position der ersten Interaktion entlang der Spalte an. Eine Interaktion ist definiert als eine aufeinanderfolgende Ansammlung von Sensoren mit einem Druck über einer bestimmten Schwelle. Hier kommt die Verarbeitung ins Spiel: Die Spalte wird nach unten durchlaufen, bis ein Messwert einen Schwellenwert überschreitet. Dies gilt dann als Beginn einer Interaktion. Der Druck und die Position jedes Sensors werden bis zum ersten Sensor gespeichert, der mit maximal (wahrscheinlich) 4 aufeinanderfolgenden Sensoren die Schwelle unterschreitet. Von allen Sensoren der aufgezeichneten Interaktion werden nur zwei Sensoren verarbeitet - der mit dem höchsten Druck (niedrigster Widerstand) und der mit dem höchsten direkt darüber oder darunter. Die Gleitkommaposition wird berechnet, indem die beiden Sensorpositionen gemittelt werden, gewichtet durch ihre Drücke. Der Gesamtdruck der Wechselwirkung ist nur die Addition beider Drücke zwischen 0 und 255 (beide Drücke der Einheit 8 zu einer Einheit 16 addieren und ohne Rundung durch 2 teilen, die nicht benötigten Bits verwerfen - dies sollte schnell sein). Dies muss für jede Spalte geschehen. Das Ergebnis der Größe von 15 Bytes wird dann über SPI an einen kleinen Computer (Raspberry Pi B3) gesendet, der als Synthesizer fungiert. Ich bin nicht auf die Übertragungsart eingestellt. Wenn SPI nicht das richtige Werkzeug für den Job ist, bin ich bereit, jede Kommunikationsmethode zu wählen, die ein Raspberry Pi beherrscht. Da es sich um eine musikalisch-interaktive Anwendung handelt, ist die Latenz von entscheidender Bedeutung.
Meine genauen Fragen sind: Kann dies mit einem einzigen Mikrocontroller gelöst werden, ohne die Bank zu sprengen? Ich kann es mir nicht leisten, ICs im Wert von mehreren hundert Dollar für ein Hobbyprojekt zu kaufen. Welche Hardware würdest du empfehlen? Gibt es nicht offensichtliche Vorbehalte, vor denen ich mich hüten muss?
Der Ansatz, den ich aus den bisherigen Antworten ableitete, bestand darin, jede Spalte einzeln mit Strom zu versorgen und dann die Zeilen mit 5 16-Kanal-ADCs (ADS7961) auszulesen, die über SPI mit einem Arduino verbunden waren. Ich mache mir Sorgen, dass dies möglicherweise nicht der einfachste / billigste Ansatz ist oder nicht schnell genug, um eine Rate von> 1 kHz zu erreichen.
Haftungsausschluss: Ich bin normalerweise ein theoretischer Chemiker und ein schrecklicher Amateur in Sachen Elektrotechnik. Alles, was ich weiß, ist autodidaktisch und ohne beruflichen Hintergrund (was wiederum der Grund ist, warum ich Hilfe von erfahreneren Leuten suche). Ich kenne mich mit Software aus. Alles, was Software betrifft, werde ich mit genügend Zeit herausfinden. Ich bin auch Deutscher, bitte entschuldigen Sie gelegentliche Grammatikfehler.