ESP32 kapizativer Touchsensor als Button nutzen

Hi zusammen,

wie der Name schon sagt möchte ich zwei Tochbuttons in meinem Projekt verwenden.

Soweit so gut. Funktioniert im Grunde genommen auch.

Zu meinem Problem: Beim Auslesen der Buttons liegt der Standardwert ohne Berührung zwischen 55 und 60. Es kommt aber immer mal wieder vor, dass der Wert auch schonmal ganz kurz mit 0 zurückgegeben wird oder aber eine 23. Das wiederrum führt zu ungewollten Eingaben.

Grundsätzlich: Weiß jemand, warum da manchmal schwankende Werte rauskommen? Ich habe das Problem an einer anderen Stelle mit Ultraschallsensoren gehabt, wo auch Fehlmessungen zu unerwünschten Ergebnissen führten.

Deshalb suche ich nun eine Idee um mit wenig Aufwand diese Ausreißer rauszufiltern.

// ESP32 Touch Test
// Just test touch pin - Touch0 is T0 which is on GPIO 4.
int touchpad;
int touchvalue;

void setup()
{
  Serial.begin(115200);
  delay(1000); // give me time to bring up serial monitor
  Serial.println("ESP32 Touch Test");
}

void loop()
{

  touchpad = touchRead(T4);
  Serial.println(touchpad); 

  if (touchpad > 5 and touchpad < 15)
  {
    touchvalue = true;
  }
  else
  {
    touchvalue = false;
  }
}

Mit dem Beispielcode vom ESP32 kann man das ganz gut testen. Ich habe jetzt den delay der drin war rausgenommen, weil der in größeren Projekten eher nicht erwünscht ist. Vielleicht liegts aber auch daran, das die Abfragehäufigkeit zu Fehlerwerten führt. Ich habe das nun versucht mit der oben angegebenen If Einschränkung etwas zu verbessern. Ist auch besser geworden, es scheint mir aber immer noch etwas zu ungenau zu sein. Ich überlege ob es besser wäre aus 3-5 Messungen jeweils einen Durchschnitt zu bilden und wenn dieser eine Schelle unterschreitet den Button auf true zu schalten.

Andere ideen? Lösungsvorschläge oder Verbesserungen?

Vielen Dank!

... doch der code lässt sich compilen und ausführen. Ist nämlich ein Beispielsketch.
Bei mir geht er und tochRead gibts auch...

Entschuldige die Frage eines Unwissenden
Du möchtest ein Touch-Modul anschließen oder Du möchtest daß der ESP auf einen Eingang eine Touch-funktionalität hat?

Grüße Uwe

Genau das.

Da hatte ich mir mal mit einem Leonardo fast die Zähne ausgebissen bis ich erkannt habe daß der Offset schlecht berechnet wurde.

Ich habe keine Erfahrung mit dem ESP32. Würde Dir aber der Einfachheit raten 2 TTP223 Touch Module zu holen. Die kosten wenig und funktionieren gut.

Grüße Uwe

Okay danke für deine Einschätzung

Tatsächlich ist der ESP32 für die Nutzung von bis zu 10 GPIOs als kapazitive Touchbuttons vorbereitet. EIn Testprogramm dazu sieht wie folgt aus:

int touch_sensor_value=0;
void setup()
{
Serial.begin(115200);
Serial.println("Touch sensor tutorial ESP32");
}

void loop()
{

touch_sensor_value = touchRead(T0);
Serial.print("Touch0 value is = ");
Serial.println( touch_sensor_value);
delay(1000);
}

Belegt man den GPIO kapazitiv, indem man einen dort angeschlossenen Draht (oder eine damit verbundene leitende Fläche) mit einem Finger berührt, sinkt der ermittelte Wert ab. Über einen Vergleich gegen einen Schwellwert, kann man daraus eine binäre Entscheidung (Taste betätigt/nicht betätigt) ableiten.

Die Anwendung von Interrupts mit Touchpins habe ich noch nicht getestet, ist aber hier beschrieben:

https://github.com/espressif/arduino-esp32/issues/112

P.S.: Dort nicht unbedingt die ersten Sketche nutzen, sondern am besten ganz nach unten Scrollen ;-)

hab mir am esp32 touch input auch schon mal die zähne ausgebissen.

wenn der hardwaredesigner das nicht ordentlich implementiert hat scheints nicht zu gehn,
mit einfach einem kabel dran wars jedenfalls nicht wiederholbar hin zu bekommen.

Deshalb hat das Magazin Make wohl diese "weiche" Lösung gewählt :wink:

Wenn man den Begriff "Wackelpudding-Piano" googelt findet sich erstaunlicherweise ein kostenloser Pdf-Download des Magazins (keine Ahnung, wie das dort mit den Rechten gelöst ist :innocent: :cry:)