Giant MIDI Piano

Projekt

Dieses "Giant Piano" habe ich mit endgültig kaputter Elektronik als weggeworfen gefunden. Statt der originalen Tonerzeugung habe ich es mit einem USB-MIDI-Interface basierend auf einem Raspberry Pi Pico Board versehen. Hier beschreibe ich wie.

Beschaltung

Das Produkt besteht aus ingesamt fünf Schichten. Von oben nach unten finden sich:

  • Eine glänzende Plastikfolie mit den aufgedruckten Tasten
  • Eine Folie mit aufgedruckten Leiterbahnen für eine Seite der Tastenkontakte
  • Eine dünner Schaumstoff mit eingestanztem Lochmuster im Bereich der Tasten
  • Eine weitere Folie mit aufgedruckten Leiterbahnen für die andere Seite der Kontakte
  • Eine etwas dickere Folie als Untergrund.

Die beiden elektrisch relevanten Folien enden in verschraubten Terminals die sie auf je eine Leiterplatte drücken an der dann die Kabel und Anschlüsse angelötet sind.

Als erste Maßnahme musste ich ermitteln wie die Tasten verdrahtet sind. Hinten aus der Folie, an der Stelle wo mal die Elektronikbox war, hängen vier Steckverbinder mit insgesamt 18 Anschlüssen heraus:

Eine unterhaltsame halbe Stunde mit dem Multimeter ergibt eine 4×14 Matrix mit ein paar Lücken an denen keine Kontakte eingebaut sind. Steht niemand auf der Matte sind die Kontakte offen, betritt man ein Feld geht der Widerstand auf 30kΩ bis 60kΩ zurück wenn die Folie durch die Löcher im Schaumstoff Kontakt herstellt. Dieser Wert schwankt je nachdem wie schwer die Person ist und wie gut man das Feld trifft.

Diese gemessene Matrix habe ich in eine Tabelle eingetragen:

Eine solche Tastaturmatrix wird üblicherweise ausgelesen indem man reihum eine der Zeilen (oder Spalten) aktiviert und an der jeweils anderen Dimension den Zustand ausliest. So ein Scan erfolgt dann schnell genug um zügig den Zustand aller Tasten zu ermitteln.

Im Circuitjs-Schaltbild habe ich links Schalter eingezeichnet mit denen sich jeweils eine einzelne Zeile auf logisch HIGH legen lässt während alle anderen hochohmig bleiben. Im Microcontroller-Code werden das 4 OUT-Pins. Oben lässt sich dann pro Zeile an 14 IN-Pins der Zustand von jeweils einer Teilmenge der Kontakte auslesen:

Würde man jedem Taster in diesem Klavier einen eigenen Eingabe-Pin widmen, wären das 38 Stück. Mit der Matrix reichen 18. Das Bild ist noch etwas verzerrt, denn dieselbe Anzahl Pins könnte als 4×14-Matrix sogar bis zu 56 Tasten bedienen, der Klaviermatte fehlen ja einige. Und selbst das ist noch nicht optimal. Für 38 Tasten würde eine 6×7-Matrix mit insgesamt 13 Pins nocheinmal 5 I/Os einsparen.

Ich vermute, dass die Schaltung so ist wie sie ist, da es möglicherweise Varianten dieses Instruments mit mehr oder weniger Funktionen gab.

Nachteile hat die so eine Schaltung natürlich auch. Erstens entsteht eine gewisse zusätzliche Latenz weil nicht jede Taste einzeln unmittelbar abgefragt werden kann, sondern eben immer die ganze Matrix gescannt werden muss. Aber selbst bescheidenste Microcontroller sind so viel schneller als tippende Menschen und mechanische Tasten, dass das in der Praxis kein Hindernis ist.

Schwerer wirkt ein Fehler der auftreten kann wenn mehrere Tasten gleichzeitig betätigt werden. Im Bild unten sind eine Taste aus ersten Reihe und zwei aus der letzten Reihe betätigt, markiert mit den großen roten Kreisen. Im Moment ist Reihe 1 im Scan aktiv.

Man kann erkennen, welchen verschlungenen Weg das Signal nimmt und daß eine zweite Spalte in Reihe 1 einen HIGH-Pegel meldet obwohl der dazugehörige Taster offen ist.

Dieses Phänomen nennt man "Ghosting" und richtige Tastaturen vermeiden es durch den Einbau je einer Diode an jeder Taste. Für das Giant Piano habe ich diese Option nicht, die Tasten sind ja weiche Folien und direkt als leitfähiger Aufdruck realisiert.

Implementation

Für den Controller fiel die Wahl auf einen Raspberry Pi Pico. Erstens wollte ich sowieso gerne einmal mit diesem Board spielen. Aber vor allem wird es von CircuitPython unterstützt und damit ist ein echter USB-MIDI-Betrieb trivial zu implementiern.

Es wird außerdem dem Pi Pico genaugenommen keine zusätzliche Hardware benötigt. Wären die Taster näher am Ideal würde ich Widerstände zur Strombegrenzung einbauen, aber die Folientasten haben im gedrückten Zustand immer noch einen Widerstand im Zigkiloohm-Bereich, da mache ich mir keine Sorgen.

Trotzdem habe ich ein Stück Streifenrasterplatine und zwei Pfosten- und Steckerleisten vorgesehen.

Aber da ein Mensch nur zwei Füße hat, ist das Problem in der Praxis wohl nicht so groß. Außer man heißt Tom Hanks.