In diesem Beitrag möchte ich dir zeigen, wie du einen kapazitiven Touch Sensor am ESP32 in der Arduino IDE programmiert.
Den hier verwendeten Touch Sensor habe ich dir bereits für den Arduino in dem Beitrag Arduino Lektion 92: kapazitiver Touch Sensor vorgestellt.
Der Touch Sensor ist nicht viel größer als eine 1-Cent-Münze und kann sogar durch eine dünne Schicht Holz / Pappe bedient werden.
Benötigte Ressourcen für dieses Projekt
Wenn du die kleine Schaltung nachbauen möchtest, dann benötigst du:
- einen ESP32*,
- ein Micro-USB Datenkabel*,
- ein oder mehrere kapazitive Touch Sensoren (TTP223)*,
- 5 mm, LEDs*,
- 220 Ohm Vorwiderstände*,
- diverse Breadboardkabel*,
- ein 400 Pin Breadboard*
Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!
Aufbau der Schaltung
In meiner Schaltung verwende ich drei kapazitive Touch Sensoren, welche wie folgt angeschlossen sind.
Im nachfolgenden YouTube-Video habe ich dir den Aufbau und die Programmierung in der Arduino IDE ausführlich erläutert.
Programmieren in der Arduino IDE
Im Programm legen wir zunächst die Felder für die LEDs sowie die kapazitiven Touch-Sensoren an.
#define ledRed 14 #define ledYellow 27 #define ledGreen 16 #define cts1 5 #define cts2 13 #define cts3 12
Damit wir die verbauten LEDs toggeln können, müssen wir uns den Status merken, hierzu nutze ich drei Felder vom Typ Integer.
int ledRedState = 0; int ledYellowState = 0; int ledGreenState = 0;
Da die Sensoren sehr empfindlich sind, müssen wir, nachdem ein Kontakt erkannt wurde, eine kleine Pause einlegen, dieses nennt man auch entprellen. Der Wert hierfür wird in einer Konstanten abgelegt.
const int PAUSE = 350;
In der Funktion setup werden die Pins des ESP32 definiert, die Pins der LEDs als Ausgang und die der Sensoren als Eingang.
void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(ledGreen, OUTPUT); pinMode(cts1,INPUT); pinMode(cts2,INPUT); pinMode(cts3,INPUT); }
In der Funktion loop wird fortlaufend geprüft, ob eines der Sensoren betätigt wurde, wenn dieses so ist, dann wird das Feld umgekehrt und der LED zugewiesen. Danach legen wir eine kleine Pause ein.
if(digitalRead(cts1) ==HIGH){ ledYellowState = !ledYellowState; digitalWrite(ledYellow, ledYellowState); delay(PAUSE); }
Das fertige Programm:
#define ledRed 14 #define ledYellow 27 #define ledGreen 16 int ledRedState = 0; int ledYellowState = 0; int ledGreenState = 0; #define cts1 5 #define cts2 13 #define cts3 12 const int PAUSE = 350; void setup() { pinMode(ledRed, OUTPUT); pinMode(ledYellow, OUTPUT); pinMode(ledGreen, OUTPUT); pinMode(cts1,INPUT); pinMode(cts2,INPUT); pinMode(cts3,INPUT); } void loop() { if(digitalRead(cts1) ==HIGH){ ledYellowState = !ledYellowState; digitalWrite(ledYellow, ledYellowState); delay(PAUSE); } if(digitalRead(cts2) ==HIGH){ ledRedState = !ledRedState; digitalWrite(ledRed, ledRedState); delay(PAUSE); } if(digitalRead(cts3) ==HIGH){ ledGreenState = !ledGreenState; digitalWrite(ledGreen, ledGreenState); delay(PAUSE); } }
Geht ganz ohne ext. Hardware: https://randomnerdtutorials.com/esp32-touch-pins-arduino-ide/