In diesem Projekt baust du dir eine Orgel, die du spielst, indem du Überraschungseier berührst. Du benötigst hierfür nur ein paar Widerstände, Kabel und ein ganz besonders wichtiges „Bauteil“: deinen eigenen Körper. 🙂
Mithilfe der Bibliothek CapacitiveSensor misst du die elektrische Kapazität deines Körpers. Wenn du eines der Überraschungseier (bzw. dessen Aluminiumfolie) berührst, steigt der gemessene Wert und du kannst darauf basierend einen Ton abspielen. Dieses Projekt lässt dir viel Spielraum für Experimente: Du kannst verschiedene Widerstände verwenden und mit dem Schwellenwert der gemessenen Daten herumspielen. Mit der richtigen Kombination musst du die Überraschungseier nicht mal mehr berühren – dann näherst du nur deine Hand und die Arduino Orgel fängt an zu spielen.
Für dieses Projekt benötigst du:
- 5 Überraschungseier
- 5 Widerstände 1MΩ oder 10MΩ
- Lautsprecher oder Piezo-Summer*
- Arduino, Breadboard & Kabel
*Amazon Affiliate Links: Wenn du dort bestellst, erhalten wir eine kleine Provision.
Der Aufbau der Arduino Orgel
Deine Orgel kannst du in wenigen Minuten aufbauen. In dem folgenden Schaubild sind die 5 violetten Kabel für die Überraschungseier vorgesehen. Stecke ihre Enden einfach durch die Folie ins Ei – bei Bedarf kannst du sie mit etwas Kleber an der Aluminiumfolie fixieren. Du kannst natürlich auch jede andere Folie oder fünf Metallkörper verwenden, wenn du keine Überraschungseier zur Hand hast, oder sie schon aufgegessen hast. 🙂
Noch ein Hinweis: Wenn du einen Lautsprecher statt eines Piezo-Summers verwendest, benötigst du noch einen Widerstand im Bereich von 100Ω. Diesen steckst du zwischen Pin 11 und dem Lautsprecher, um zu verhindern, dass dein Arduino Schaden nimmt.
Der passende Sketch
Bevor du loslegen kannst, benötigst du die Bibliothek CapacitiveSensor von Paul Badger. Falls diese noch nicht bei dir installiert ist, kannst du das über den Bibliotheksverwalter in deiner Arduino IDE nachholen. Weitere Informationen zu dieser Bibliothek und ihrer Funktionen findest du im Arduino Playground (Englisch).
Zunächst bindest du die Bibliothek in deinem Sketch ein und definierst den Pin für den Lautsprecher und ein paar Variablen:
#include <CapacitiveSensor.h>
#define speaker 11
int sensitivity = 3000;
int threshold = 5000;
Die Variable sensitivity legt fest, wie viele Samples für die Messung verwendet werden. Theoretisch je mehr, desto besser – aber du solltest mit dem Wert etwas herumspielen, damit du die für deine „Orgeltasten“ passende Einstellung findest.
Das gilt auch für die Variable threshold. Hier legst du fest, welcher Messwert überschritten werden muss, damit ein Ton abgespielt wird. Die passende Einstellung findest du, indem du die Werte in deinem Seriellen Monitor beobachtest, während du die Arduino Orgel spielst.
Als nächstes definierst du die Pins, an denen deine Überraschungseier hängen:
CapacitiveSensor cs_2_4 = CapacitiveSensor(2, 4);
CapacitiveSensor cs_2_5 = CapacitiveSensor(2, 5);
CapacitiveSensor cs_2_6 = CapacitiveSensor(2, 6);
CapacitiveSensor cs_2_7 = CapacitiveSensor(2, 7);
CapacitiveSensor cs_2_8 = CapacitiveSensor(2, 8);
Wie du im schematischen Aufbau oben siehst, hängt jeden Überraschungsei am Digitalpin 2. Über diesen Pin wird die Messung gestartet. Jedes Ei hat jedoch seinen eigenen Pin für den Eingang der Messwerte – die Digitalpins 4 bis 8.
In der Funktion void setup() startest du nur den Seriellen Monitor mit einer Baudrate deiner Wahl.
Im Loop spielt die Musik
In der Funktion void loop() führst du zunächst für jedes Überraschungsei eine Messung durch. Die Zahl der Samples steht in der Variable sensitivity. Die Ergebnisse speicherst du in den Variablen sensor4 bis sensor8.
long sensor4 = cs_2_4.capacitiveSensor(sensitivity);
long sensor5 = cs_2_5.capacitiveSensor(sensitivity);
long sensor6 = cs_2_6.capacitiveSensor(sensitivity);
long sensor7 = cs_2_7.capacitiveSensor(sensitivity);
long sensor8 = cs_2_8.capacitiveSensor(sensitivity);
Diese 5 Sensorwerte gibst du im Seriellen Monitor (Code im gesamten Sketch unten) aus, damit du dort einen passenden Wert für die Variable threshold findest. Wenn du ein Überraschungsei berührst, schnellt der Wert nach oben, aber wie weit nach oben hängt vom Material ab und muss deshalb individuell von dir geprüft werden.
Hast du einen Wert gefunden, kannst du mit der Musik loslegen:
if (sensor4 > threshold) tone(speaker, 440); // A
if (sensor5 > threshold) tone(speaker, 523); // C
if (sensor6 > threshold) tone(speaker, 587); // D
if (sensor7 > threshold) tone(speaker, 659); // E
if (sensor8 > threshold) tone(speaker, 784); // G
Über die Funktion tone() spielst du eine bestimmte Frequenz über den Piezo-Summer ab. Im Prinzip stehen dir hier alle möglichen Töne zur Verfügung, in diesem Projekt verwenden wir jedoch die A-Moll Pentatonik – also die Töne A – C – D – E – G. Der Clou: Damit hört sich fast alles einigermaßen gut an, auch wenn du kein geübter Musiker bist. 🙂
Zuletzt brauchst du noch eine Abfrage, wann dein Piezo-Summer still sein soll – nämlich wenn du gerade kein Überraschungsei berührst. Auch hier kommt wieder die Variable threshold zum Einsatz.
if (sensor4 <= threshold & sensor5 <= threshold & sensor6 <= threshold & sensor7 <= threshold & sensor8 <= threshold) {
noTone(speaker);
}
Und das sollte es gewesen sein. Wie gesagt, das Finetuning deiner Arduino Orgel wird dich noch etwas Zeit kosten, aber dann kannst du loslegen!
Hier der gesamte Sketch:
/*
Arduino Organ by pollux labs, 2020
More procects and tutorials: https://polluxlabs.net
*/
// Import the CapacitiveSensor Library.
#include <CapacitiveSensor.h>
//Define speaker pin
#define speaker 11
//Set sensor sensitivity
int sensitivity = 3000;
//Set threshold for triggering a tone
int threshold = 5000;
// Set the Send Pin & Receive Pin.
CapacitiveSensor cs_2_4 = CapacitiveSensor(2, 4);
CapacitiveSensor cs_2_5 = CapacitiveSensor(2, 5);
CapacitiveSensor cs_2_6 = CapacitiveSensor(2, 6);
CapacitiveSensor cs_2_7 = CapacitiveSensor(2, 7);
CapacitiveSensor cs_2_8 = CapacitiveSensor(2, 8);
void setup()
{
Serial.begin(115200);
}
void loop()
{
// Set the sensitivity of the sensors
long sensor4 = cs_2_4.capacitiveSensor(sensitivity);
long sensor5 = cs_2_5.capacitiveSensor(sensitivity);
long sensor6 = cs_2_6.capacitiveSensor(sensitivity);
long sensor7 = cs_2_7.capacitiveSensor(sensitivity);
long sensor8 = cs_2_8.capacitiveSensor(sensitivity);
Serial.print(sensor4);
Serial.print("\t");
Serial.print(sensor5);
Serial.print("\t");
Serial.print(sensor6);
Serial.print("\t");
Serial.print(sensor7);
Serial.print("\t");
Serial.println(sensor8);
// When your hand touches the sensor, the speaker will produce a tone.
// Probably you'll have to experiment with the threshold.
if (sensor4 > threshold) tone(speaker, 440); // A
if (sensor5 > threshold) tone(speaker, 523); // C
if (sensor6 > threshold) tone(speaker, 587); // D
if (sensor7 > threshold) tone(speaker, 659); // E
if (sensor8 > threshold) tone(speaker, 784); // G
// When nothing is touched the speaker is quiet
if (sensor4 <= threshold & sensor5 <= threshold & sensor6 <= threshold & sensor7 <= threshold & sensor8 <= threshold) {
noTone(speaker);
}
delay(10);
}
Wie geht es weiter?
Wenn dich Musikmachen mit dem Arduino interessiert, probiere doch noch ein anderes Instrument aus: Ein Arduino Theremin, das ebenfalls die A-Moll Pentatonik verwendet.
Fehlen dir noch Bauteile? Dann wirf einen Blick in unsere Übersicht der besten Arduino Starter Kits.