Taster durch touch-Sensoren / touch-Pins ersetzen?

Von Andreas H. / @aholzhammer gibt es unter Gallery – Hanimandl einen Prototypen, der ein großes Touch-TFT als Interface für den HaniMandl verwendet.

Da war ich mir nicht so sicher wie zuverlässig touch-Elemente sind, wenn es um kritische Dinge wie z.B. schnelles Abbrechen geht. Weiter müsste das Touch-TFT offen sein.

Andreas H. / @aholzhammer schätzt die TFTs prinzipiell als gut funktionierend ein. Aber da TFTs kaum abzudichten sind und die ggf. mit klebrigen Fingern auch nix taugen wurde das nicht weiter verfolgt.

Nun hat @PeterB in der Facebook-Gruppe Fotos gepostet in denen er die mechanischen Taster des HaniMandls mit diesen

https://www.amazon.de/YOUMILE-Touch-Switch-Taste-Selbstsperrmodul-30-Pin-Header-Dupont-Leitung/dp/B07TTH5ZH9/

kapazitiven Touch-Sensoren ersetzt hat. Das schaut dann so aus!

Das eingesetzte breakout verwendet einen TTP223. Zum breakout gibt unter ein Tutorial for TTP223 Touch Sensor Module ( Capacitive) : 5 Steps (with Pictures) - Instructables So weit ich das sehe ist der TTP223 nur für einen Kanal / “Taster” ausgelegt, es gibt aber auch den MPR121 mit 12 Kanälen, der aber anders (per I2C) angesprochen werden muss.

Für ein komplett abwaschbares könnte man den rotary theoretisch auch mit zwei Touch-Elementen realisieren. Ich denke aber der ist physikalisch schon noch deutlich intuitiver zu bedienen als zwei Taster oder touch-Sensoren.

Meine Frage, die sich anschließt: Bräuchten wir den TTP223 o.ä. überhaupt? Der ESP hat ja auch “touch pins”. Bisher habe ich nur Videos gesehen bei denen dafür die blanke Verdrahtung angefasst werden musste. Könnte man damit auch berührungslose “Taster” realisieren, d.h. ähnlich wie hier bei den FB-Totos mit Plastik / Gehäuse dazwischen?

Hier ESP32 With Capacitive Touch Button : 7 Steps - Instructables wird in der Demo zwar immer eiin Kabel gezeigt, das man direkt anfasst, in der Abbildung weiter unten gibte es aber auch eine “Protective Cover” über der Elektrode! Könnte also mir ESP32 only ohne die breakouts auch funktionieren!

protective-cover

Für mich hängt der Einsatz von touch-Interfaces tatsächlich an der Zuverlässigkeit der Sensoren. Fürs Einstellen sehe ich das noch unkritisch, aber sobald man mal doch abbrechen muss können nicht funktionierende Taster schon Sauerei anrichten. ;-)

Bei dem was die TTP223 kosten stellt sich die Frage ob man wirklich die ESP32 Pin`s benutzt.

Hi @PeterB, schön, dass du auch hierher gefunden hast! :-) Das stimmt, die Kosten sind es tatsächlich nicht!

Was ich so im Hinterkopf dabei hatten: Wenn wir eine Platine für den HaniMandl nutzen und dort z.B. den Heltec draufsetzen und Anschlussklemmen verlöten könnte man ggf. die touch pins direkt auf der Platine realisieren und dann auch ergonomisch anordnen und bräuchte keine weitere Verkabelung … das war eher der Hintergrund meiner Überlegung.

Eine sehr gute Erklärung zu den per solder jumper einstellbarten Betriebsmodi des TTP223 breakouts gibt es unter:

für die Menü/Hand/Automatik hab Ich noch einen Kippschalter auf der Seite angebracht…

Hmmm schwierig ohne Änderung im Programm… Du hast jetzt 2 Kontakte …Wenn an Pin 23 ein plus kommt ist Automatikbetrieb und wenn an Pin 22 ein Plus kommt bist im Setup, Wenn an beiden nichts kommt ist Manuell Betrieb ausgewählt…

Ich glaub am einfachsten wär es im Programm wenn es hochfährt zu definieren das er in Automatik-Modus geht und dann
Var1: mit einem Taster immer nur umschaltest .zwischen Auto/Manuell/Setup

oder Var2: je ein Taster für je ein Menü, dann würden wir aber noch einen Eingang benötigen

Jetzt wo du es sagst sehe ich ihn auch! :-)

Prototypischen Umsetzung: Hier ein paar Überlegungen und code-Schnipsel:

Taster

Als Replacement für die drei Taster Start (grün), Stop (rot) und Taster des rotary müssen die solder jumper A und B auf dem TTP223 breakout offen sein, das wäre dann das Verhalten eines Tasters, der normal offen ist.

Der Taster des rotary verhält sich ander als Start und Stop: high wenn nicht gedrück und low wenn gedrück. Hier haben wir drei Möglichkeiten:

  1. Wir schließen den solder jumper A beim touch-Modul ("touch to “off”) und imitieren so das Verhalten des ursprünglichen Tasters
  2. Wir ändern den code in Z. 134 #define SELECT_PEGEL LOW in HIGH und in Z. 1961 attachInterrupt(outputSW, isr1, FALLING); in RISING und ändern hardwaretechnisch am Modul nichts.
  3. Wir deaktivieren den Schalter komplett und greifen auf die alte Funktionalität (damals Poti ohne Taster) zurück und nutzen statt des rotary-Tasters die “Start” Taste. Dazu müssen wir Z. 104 auskommentieren: //#define USE_ROTARY_SW
    Mit diese Lösung sparen wir ein Hardwareteil und da der Stop-Button auch als Abbrechen-Button funktioniert, haben wir diese beiden UI-Elemente wieder näher beisammen. Der Nachteil ist aber, dass der Schnellzugriff auf Korrekturwert k und die Schnell-Glaswahl nicht mehr möglich ist!

Rotary

Für den rotary (nur Theorie), müsste noch einiges im code geändert werden) bräuchten wir neben dem Taster auch noch zwei touch sensoren für Wert erhöhen / rechts drehen und Wert erniedrigen / links drehen. Ebenfalls momentary touch normally open, d.h. auch A und B ohne solder bridge.

[draft, todo noch genauer beschreiben was im code geändert wurde]

  • isr3 für outputB definieren
    – attachInterrupt(outputB, isr3, CHANGE);
    – CHANGE auf RISING wechseln
    – void IRAM_ATTR isr3() {…
    – outputA und outputB damit entkoppeln
    – state change nicht mehr relevant, sondern nur noch high

3-fach Schalter

Variante A Den 3-fach Schalter könnte man ebenfalls mit 3 touch-Sensoren ersetzen. Dabei sollte beim Einschalten der Automatikmodus aktiv sein, daher einen Schalter (im Video “self locking”, B geschlossen), der bei initialer Stromzufuhr geschlossen ist, das wäre dann A und B geschlossen. Die beiden anderen Settings / Menü und manuell wären initial low, also A offen und B geschlossen. … oder man verwendet die gleiche Hardware-Konfiguration wie oben (Taster, normal offen, d.h. A und B offen), müsste aber etwas im code ändern.

Variante B Wenn wir auf den manuellen Modus in Zukunft verzichten wollen, könnte man auch mit nur einem Schalter (sic!, Terminologie “self locking” im Video, solder jumper B geschlossen) auskommen, der mit high Setup auswählt. Der wäre beim Einschalten low und würde damit indirekt den Automatikmodus triggern. Auf den pin switch_betrieb_pin könnte man dann verzichten. Änderungen im Code:

void loop()
{
  rotating = true;     // debounce Management
  
  // Betriebsmodus 
  if (digitalRead(switch_setup_pin) == HIGH)
    processSetup();      // Setup-Menue
  else {
    processAutomatik();  // Automatik-Betrieb 
  }

  // Automatik-Betrieb 
//  if (digitalRead(switch_betrieb_pin) == HIGH)
//    processAutomatik();

  // Handbetrieb 
//  if ((digitalRead(switch_betrieb_pin) == LOW)
//      && (digitalRead(switch_setup_pin) == LOW))
//    processHandbetrieb();
}

Hier der Prototyp im Test-Einsatz (ohne Servo).

Touch-Pins des ESP nutzen [draft]

todo Hardware

  • code Änderungen
    – digitalRead in touchRead ändern
    – da es kein digitaler input, sondern ein analoger ist, threshold festlegen