Überblick
Wie auch schon beim Würfel-Controller bildet ein Arduino NANO den Kern dieses Kontrollers. Dieser bekommt seine Daten von einem Ultraschallsensor des Typs HC-SR04, bzw. von vier Sensoren dieser Art.
Die Sensoren messen über eine Laufzeitberechnung (ähnlich der Echoortung einer Fledermaus) den Abstand zu einem davor befindlichen Objekt. Diese Werte sind zunächst allerdings nicht sehr Aussagekräftig, können mithilfe der NewPing-Library aber zu Testzwecken in für Menschen verständliche Werte in Zentimeter umgewandelt werden.
Zu guter letzt werden mithilfe der Arduino MIDI Library entsprechende MIDI Signale erstellt und an den Rechner gesandt, wo sie die einzelnen Instrumente des Drum-Kits an bzw. aus schalten.
Wie das ganze in Aktion aussieht, wird hier demonstriert:
Programm & Verschaltung
In der folgenden Zeichnung wird vereinfacht die Verschaltung des Controllers gezeigt. Der Ultraschallsensor wird an Stromversorgung, Erdung, sowie zwei digitale Pins angeschlossen. Einer der digitalen Pins (TRIG, in diesem Fall D3) fungiert als output, regelt also wann der Sensor sendet. Der andere digitale Pin (ECHO, in diesem Fall D2) fungiert als input. Hier wird also ein Signal zurück zum Arduino NANO übertragen.
Im tatsächlichen Controller werden vier Ultraschallsensoren verwendet, es werden also insgesamt 8 digitale Pins belegt.

Im Code werden nun der Reihe nach alle Sensoren abgefragt. Sollte ein Objekt innerhalb der vordefinierten Reichweite (hier 50cm) erkannt werden, wird ein entsprechendes MIDI Signal gesandt, welches das entsprechende Instrument an bzw. aus schaltet. Zusätzlich muss eine Sende-Variable umgelegt werden, anhand der entschieden wird wann und ob ein weiteres Signal gesandt wird. Ansonsten würden permanent Signale gesandt werden, wenn die Hand für eine längere Zeit über den entsprechenden Sensor gehalten wird. Wenn der Sensor kein Objekt erkennt, wird diese Variable wieder aus geschaltet.
Im folgenden der Haupt-Programmcode, der danach noch genauer erklärt wird.
void loop()
{
for (int i = 0; i < SONAR_NUM; i++)
{
delay(30);
distance = sonar[i].ping_cm(); //Distanz in CM
if (distance > 0 && distance < 50)
{
switch (i + 1)
{
case 1:
if (!isSending1)
MIDI.sendNoteOn(i + 1, 127, 10);
isSending1 = true;
break;
case 2:
if (!isSending2)
MIDI.sendNoteOn(i + 1, 127, 10);
isSending2 = true;
break;
case 3:
if (!isSending3)
MIDI.sendNoteOn(i + 1, 127, 10);
isSending3 = true;
break;
case 4:
if (!isSending4)
MIDI.sendNoteOn(i + 1, 127, 10);
isSending4 = true;
break;
default:
break;
}
}
else
{
switch (i + 1)
{
case 1:
isSending1 = false;
break;
case 2:
isSending2 = false;
break;
case 3:
isSending3 = false;
break;
case 4:
isSending4 = false;
break;
default:
break;
}
}
}
}
Zunächst wird über das im Vorfeld erstellte Array der Sensoren iteriert. In der Schleife gibt es zunächst eine kurze Verzögerung, da sich die Sensoren sonst zu stark gegenseitig Beeinflussen. Danach wird der Kern des Programms, nämlich die Distanz nach oben (in cm) eingelesen.
Wird nun ein Objekt erkannt (hier innerhalb von max. 50cm) und damit die if-Bedingung erfüllt wird folgender Code ausgeführt.
switch (i + 1)
{
case 1:
if (!isSending1)
MIDI.sendNoteOn(i + 1, 127, 10);
isSending1 = true;
break;
Hier wird zunächst über eine Switch Verzweigung getestet welcher Sensor gerade abgefragt wird, hier Beispielhaft Sensor 1. Sendet der entsprechende Sensor noch nicht. („if (!isSending1)“), wird das MIDI Signal abgeschickt und die Variable isSending1 auf wahr gestellt – der Schalter sendet jetzt.
Wird die ursprüngliche if-Bedingung (ein Objekt wird innerhalb von 50cm erkannt) nicht erfüllt, wird stattdessen folgender Code ausgeführt.
switch (i + 1)
{
case 1:
isSending1 = false;
break;
Hier wird analog zum vorhergegangenen Code-Abschnitt wieder überprüft welcher Sensor gerade abgefragt wird und die entsprechende Sende-Variable auf falsch gestellt – der Schalter sendet nicht mehr.
Bilder des Prototyps
Probleme & Ausblicke
Wie sich durch intensives Testen herausgestellt hat, sind Ultraschallsensoren denkbar ungeeignet für unsere Zwecke. So beeinflussen sich diese auf engem Raum gegenseitig, was zu ungewollten Änderungen in der Musik führen kann. Außerdem sind die Messergebnisse recht ungenau, was einige Interaktionsmöglichkeiten schwierig macht oder gar ganz ausschließt,
Auf Grund dessen sind die Interaktionsmöglichkeiten momentan noch auf das an- und ausschalten von verschiedenen Instrumenten beschränkt. Mit entsprechenden Sensoren sind hier aber noch einige andere Möglichkeiten vorstellbar, wie z.B. das Regeln von Lautstärke, Frequenz, und vielem mehr.