Tragbares kapazitives Touch-Piano mit Arduino & MPR121 – Bauanleitung
Benötigte Hardware
- Arduino UNO
- Adafruit 12× Kapazitiv-Touch-Shield (MPR121) (12 Kanäle, I2C)
- Piezo-Summer (PS1240) oder Lautsprecher + Widerstand
- Kupferfolienband mit leitfähigem Kleber (für Tasten)
- ProtoStax Acryl-Gehäuse für Arduino (stapelbar, modular, Deckel = Tastenfeld)
- 22 AWG Hook-Up Wire Kit (12 Stück, farbcodiert)
Projektidee
Ein kompaktes, tragbares Klavier mit **12 kapazitiven Tasten** (eine Oktave: C–B) auf der Gehäuseoberseite. Der MPR121-Chip erkennt Berührungen zuverlässig. Der Arduino spielt Töne per tone()-Library über den Piezo. **„Geheime“ Tastenkombinationen** lösen vorprogrammierte Melodien aus. Das ProtoStax-Gehäuse schützt die Elektronik und dient gleichzeitig als Tastenfeld.
Aufbau-Schritte
1. Arduino im Gehäuse montieren
Uno in die Base Plate des ProtoStax-Gehäuses schrauben, Gummifüße anbringen. Offener Zugriff für Entwicklung; später Side Walls & Top Plate aufsetzen.
2. MPR121-Shield vorbereiten
- 12 Drähte (22 AWG) in die Lötaugen der 12 Eingänge löten (zwischen den Alligator-Clip-Löchern).
- Piezo-Summer: ein Bein an Pin 12, anderes an GND löten.
- Freie Drahtenden abisolieren, farbcodieren (6 Farben × 2 für 12 Eingänge).
3. Gehäuse & Tastenfeld fertigen
- MPR121-Shield auf Arduino stecken.
- Upper Bracing Elements & Side Walls in ProtoStax einrasten.
- **Top Plate modifizieren**: 12 Löcher (ca. 3 mm) per Laser oder Bohrer (Klebeband gegen Rissbildung) im Piano-Layout bohren.
- Drähte von unten durch die Löcher führen (Eingang 0 = linkste Taste … Eingang 11 = rechtste Taste).
- Drähte zurückschieben, nur Metallspitzen schauen heraus.
- Kupferfolienband in Piano-Tastenform schneiden (Vorlage s. unten), abziehen, **leitfähige Klebeseite auf Drahtspitze & Gehäuseoberfläche kleben**.
- Top Spacers & Schrauben befestigen – fertig.
4. Demo-Code & Bibliothek
- Library: Adafruit_MPR121 installieren (Library Manager).
- Demo-Sketch: GitHub Repo
Code-Highlights
Adafruit_MPR121 cap = Adafruit_MPR121();
uint16_t lasttouched = 0, currtouched = 0;
int scale[12] = {NOTE_C4, NOTE_CS4, NOTE_D4, NOTE_DS4, NOTE_E4, NOTE_F4,
NOTE_FS4, NOTE_G4, NOTE_GS4, NOTE_A4, NOTE_AS4, NOTE_B4};
void setup() {
cap.begin(0x5A); // Default I2C-Adresse
pinMode(TONE_PIN, OUTPUT);
}
void loop() {
currtouched = cap.touched();
for (uint8_t i = 0; i < 12; i++) {
// Taste gedrückt (steigende Flanke)
if ((currtouched & _BV(i)) && !(lasttouched & _BV(i))) {
tone(TONE_PIN, scale[i]); // Note an
}
// Taste losgelassen & keine andere gedrückt -> Note aus
if (!(currtouched & _BV(i)) && (lasttouched & _BV(i)) && !currtouched) {
noTone(TONE_PIN);
}
}
// Geheime Kombos (Bitmaske von currtouched)
if (currtouched == 0b100010001001) { // C E G B (Bits 0,3,7,11)
playTune(melody_twinkle, ...);
} else if (currtouched == 0b000001011101) { // C D E F G
playTune(melody_scale, ...);
} // ... weitere Combos
lasttouched = currtouched;
}
Vorprogrammierte Melodien (Geheimcodes)
- C E G B → „Twinkle Twinkle Little Star“
- C D E F G → Tonleiter rauf & runter
- C D A B → „Oh Susanna!“
- C C# A# B → „Frère Jacques“
Eigene Melodien hinzufügen
Struktur Note { int frequency; float duration; }. Noten als NOTE_C4, Dauer als NOTE_QUARTER etc. (aus pitches.h, noteDurations.h). Dotted Notes via DOTTED(NOTE_QUARTER). Einfach Array definieren & Combo-Bitmaske hinzufügen.
Weiterentwicklungsideen
- Eigene Jingles & Geheimcodes definieren.
- Zweiter Piezo + NewTone Library (nutzt Timer1) → 2-stimmige Polyphonie.
- Zusätzliche Hardware-Taster für **Oktav-Umschaltung** (Shift-Taste gedrückt + Taste = höhere/untere Oktave).
- MIDI-Output über USB (Arduino Leonardo/Micro) oder Serial-MIDI.
Vorlage & Schaltplan
- Piano-Tasten-Vorlage (zum Drucken & Bohren/Lasern der Top Plate)
- Schaltplan: MPR121 (I2C: A4/A5), Piezo an Pin 12, 12 Drähte zu Tasten.
Herstellungsprozess
- Das Klavier: Von antiken Wurzeln zur modernen Meisterschaft
- Mobile Toiletten: Geschichte, Design und Umweltauswirkungen
- Spielerklavier: Akustische Tradition trifft automatisierte Präzision
- Bluetooth-gesteuerter Arduino-Spybot bauen – Überwachungsroboter mit IP-Kamera
- FlickMote: Gestensteuerung per Ultraschall & IR für Smart Home (Arduino 101)
- DIY Arduino TV-B-Gone: Universelle TV-Aus-Fernbedienung
- Einen eigenen LED-Master-Clock mit Alarm bauen – aus 12 Metern Entfernung ablesbar
- Arduino Touch Breakout-Spiel: Klassisches Arcade auf 2,4″ TFT LCD
- MIDI-Keyboard zum smarten Klavierlehrer umbauen – Arduino, LEDs & MuseScore
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden