Das Theremin ist ein elektrisches Musikinstrument welches durch Handbewegungen in der Nähe einer Antenne gesteuert wird. Erfunden wurde es 1919 vom russischen Physikprofessor Lev Sergejewitsch Termen (1896–1993), der sich im Westen später Leon Theremin nannte.
Das Orginal verwendete dazu Schwingkreise deren Frequenzen durch die Kapazität der Hand in der Nähe der Antenne verändert wurden.
Ein ganz ähnlichen Mechanismus kann auch mit dem Arduino nachgebildet werden. Ein Eingangspin wird über einen sehr hochohmigen Widerstand mit einem Ausgangspin verbunden. Wir der Ausgangspin umgeschaltet kann die Zeit gemessen werden die der Eingangspin benötigt um diesem Signal zu folgen. Je größer die Kapazität am Eingangspin, desto länger dauert dieser Vorgang.
Diese Messwerte sind jetzt ziemlich ungeeignet und müssen entsprechend nachbearbeitet werden.
- Zittern und Rauschen, verursacht durch Messfehler und Einstreuungen mittels eines Tiefpassfilters entfernen.
Das funktioniert indem wir das alte Signal mit 7 multiplizieren und dazu das neue hinzufügen und diese Summe dann wieder durch 8 teilen. Dadurch wird jeder neue Messwert nur zu einem 1/8 berücksichtigt und kleinere Ausrutscher verschwinden.
- Basispunkt finden.
Auch ohne das die Hand in der Nähe der Antenne ist, messen wir grössere Kapazitätzwerte. Wir speichern den kleinsten jemals gesehenen Wert und ziehen diesen später von unserem Messsignal ab. Auch hier verwenden wir einen digitalen Tiefpass, so dass sich das Instrument immer wieder an die veränderte Umwelt anpasst.
- Maximalwert finden.
Ähnlich wie im vorhergehenden Punkt suchen wir nun den größen jemals gemessenen Wert, dieser wird später dann auf den höchsten Ton den wir spielen wollen abgebildet. Damit der Tonumfang stimmt muss nach dem Einschalten ersteinmal die Hand bis ganz an die Antenne gebracht werden damit der größte Wert gemessen werden kann.
- Skalieren Mit der immer wieder sehr nützlichen Funktion map(wert,min,max,ziel_min,ziel_max) werden jetzt die Messerte in den Bereich gebracht der uns interessiert, zur Sicherheit wird dann mit constrain(wert,min,max) noch dafür gesorgt das dieser niemals ausserhalb dieser Grenzen liegt.
Für die Soundausgabe verwenden wir die gleiche Interruptroutine wie aus dem Brainwaveprojekt.
Damit der Quellcode compiliert werden kann muss die Bibliothek CapSense installiert werden!