Musik mit den Touch-Pins des ESP32-Wroom

Lese­zeit: 4 Minu­ten

Lösung
Seite als PDF

Das Pro­gramm reagiert auf die Touch-Pins des ESP32-Wroom und spielt zu jeder Tas­te einen Ton der C-Dur Tonleiter.

So sieht es aus und hört es sich an:

Soll­te beim Spie­len der Kon­takt nicht sofort zustan­de kom­men, feuch­te dei­ne Fin­ger ein wenig an.

Der ESP32-Wroom ver­fügt über Touch-Pins. Sie reagie­ren auf die Ände­run­gen von elek­tri­scher Kapa­zi­tät. Je grö­ßer die Kapa­zi­tät, des­to klei­ner der Mess­wert. Da der mensch­li­che Kör­per auch eine Kapa­zi­tät dar­stellt, reagie­ren die Touch-Pins auf Berührung.

Bei­spiel Kabel am Touch-Pin 32:

void setup() 
{
  Serial.begin(9600);
  delay(1000);
}

void loop() 
{
  Serial.print("Wert: ");
  Serial.print(touchRead(32));
  if (touchRead(32) < 20) Serial.println(" -> Pin berührt");
  else Serial.println(" -> Pin nicht berührt");

  delay(1000);
}

Für die Rea­li­sie­rung wird neben dem ESP32-Wroom und dem Laut­spre­cher noch ein wenig Mate­ri­al benötigt:

  • 8 Kabel mit Kro­ko­dil­s­te­ckern an einem Ende und Ste­ckern am ande­ren Ende
  • sta­bi­le Pappe
  • selbst­kle­ben­de Kup­fer­fo­lie oder Alufolie
  • „dop­pel­tes“ Steckbrett

Der ESP32-Wroom ist lei­der nicht sehr „steck­brett­freund­lich“, daher habe ich das Steck­brett selbst erstellt: Ich habe jeweils die äuße­ren Leis­ten zwei­er Steck­bret­ter ent­fernt. In die übrig geblie­be­nen Mit­tel­tei­le lässt sich der ESP32-Wroom einstecken.

Die Anschlüs­se

Board instal­lie­ren

Das Pro­gramm ist sehr kurz:
Mit touch­Read() wird der Wert des jewei­li­gen Touch-Pins abge­fragt, der Schwell­wert des Touch-Pins wird auf 20 fest­ge­legt. Du musst ihn even­tu­ell anpassen.

Die Zuord­nung der Frequenzen:

Hier fin­dest du eine 🔗Über­sicht (exter­ner Link, abge­ru­fen am 10.9.2023) über alle Frequenzen.

NoteFre­quenzTouch-Pin
c'26232
d'29433
e'33027
f'34914
g'39212
a'44013
h'4944
c''5232
// Pin des Lautsprechers
# define Lautsprecher 17

// Länge des gespielten Tons
# define TonLaenge 500

// Schwellwert des Touch-Pins
# define Schwellwert 20

void setup() 
{
  // kein setup notwendig}
}

void loop() 
{
  if (touchRead(32) < Schwellwert) tone(Lautsprecher, 262, TonLaenge);  // T9
  if (touchRead(33) < Schwellwert) tone(Lautsprecher, 294, TonLaenge);  // T8
  if (touchRead(27) < Schwellwert) tone(Lautsprecher, 330, TonLaenge);  // T7
  if (touchRead(14) < Schwellwert) tone(Lautsprecher, 349, TonLaenge);  // T6
  if (touchRead(12) < Schwellwert) tone(Lautsprecher, 392, TonLaenge);  // T5
  if (touchRead(13) < Schwellwert) tone(Lautsprecher, 440, TonLaenge);  // T4
  if (touchRead(4) < Schwellwert) tone(Lautsprecher, 494, TonLaenge);   // T0
  if (touchRead(2) < Schwellwert) tone(Lautsprecher, 523, TonLaenge);   // T2

  // notwendiges delay, damit sich der Wert wieder normalisieren kann
  // evtl anpassen um doppelte Töne zu vermeiden
  delay(200);
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 2. Okt 2023 @ 11:27