Sensor Taster Modul am Multi Function Shield

Das Multi Function Shield, das ich ja bereits vorgestellt habe und das mittlerweile ja auch um einen Drehgeber erweitert wurde, bietet mit der Möglichkeit zur einfachen Anzeige von Daten auf seinem 4-fach-7-Segment-Display und den freien Anschlusspins eine gute Grundlage, Sensoren ausprobieren.

In meiner 37-in-one-Sensoren-Bulk-Sammlung findet sich auch ein Touch-Sensor-Modul, das KY-036

Hardware: Touch Sensor Modul KY-036


Touchsensoren, auch Näherungsschalter erkennen kapazitive Änderungen, die zum Beispiel entstehen, wenn man sie mit dem Finger berührt bzw. sich nur daran annähret. Sie heißen darum auch berührungslose Schalter. Sie haben keine mechanische Teile und können auch hinter Glas oder anderen nichtleitenden Materialen verbaut werden. Sie gelten darum als besonders robust und zerstörungssicher.

Sie sind allerdings empfindliche gegen elektrische Entladungen. Hochspannungen können sie beschädigen. Verunreinigungen die Funktion stören. Außerdem fehlt ein taktiles Feedbach, also ein Druckpunkt, der dem Drückenden darüber Aufschluss gibt, dass die Taste gedrückt wurde. Darum wird ein Druck auf eine Sensortaste meist mit einem akustischen Signal, etwa einem kurzen Piepton quittiert.

Die Sensor-Leitung, an dem Modul KY-036 ist dies der um den Transistor gebogene Draht, kann verlängert werden und mit einer metallischen Oberfläche verbunden werden, die dann berührt werden muss. So lassen sich auch großflächigere, und gleichtzeitig flache Berührungsfelder realisieren.

Eine Weiterentwicklung des kapazitiven Touchsensors sind Touchscreens, wie sie in Smartphones und Tablets zum Einsatz kommen. Hier befindet sich eine dünne, durchsichtige Folie mit eingelassenen kapazitiven Sensoren vor dem Anzeige-Panel. Mit der entsprechenden Software kann so auf angezeigte Symbole getippt werden, was eine intuitive Bedienung möglich macht.


Die Anschlussbelegung ist hier (von oben nach unten, Vorderseite oben, Pins rechts): An Analog Out kann die analoge Spannug im Bereich von 0 bis 1023 gemessen werden, wobei der Wert gegen 0 geht, sobald der Kontakt am schwarzen Bauteil an der Spitze des Sensors berührt wird. Aus Gründen der logischen Nachvollziehbarkeit wird dieser Wert durch das Programm umgekehrt, so dass voller Ausschlag Berührung bedeutet und kein Ausschlag Ruhe / keine Berührung. Im Normalzustand (keine Berührung) liegen die Werte, wie auf dem oberen Diagramm sichtbar zwischen 0 und 6.


Sobald der Kontakt berührt wird, ergibt sich das auf dem unteren Diagramm gezeigte Bild: Die Ausschläge bewegen sich bis über 800, wobei die Werte nicht stabil sind, sondern pulsieren.

Mit dem unten aufgeführten Programm kann man die Kurve über die Arduino IDE über den Serial Plotter anzeigen lassen und nachvollziehen.

Als Grenzwert ist dort der Wert 700 gesetzt, ab dem ein akustisches Signal auf dem Multi Function Shield ausgegeben wird. Dieses wird nicht gleichbleibend hoch und laut zu hören sein, sondern, je nach Kontakt, flackern. Dieses Flackern sollte sich auch an LED 1 widerspiegeln, die den Zustand von DO anzeigt.

In das Programm ist eine Glättung eingebaut, die das Auf und Ab herausfiltert und so eine zuverlässigeren Ein-/Aus-Zustand errechnet. Dieser wird an LED 2 und auf dem 7-Segment-Display angezeigt. Während LED 1 flackert, sollte LED 2 ruhig leuchten.

Mit dem blauen Potientiometer auf dem Modul kann man die Vergleichsspannung einstellen, die der verbaute LM393-Komparator als Vergleichswert benutzt, um den Digitalen Ausgang DO durchzuschalten oder nicht. Der Zustand von DO wird an LED 1 angezeigt und sollte mit der LED L2 auf dem Modul übereinstimmen. Außerdem sollte das Vibrato des Tons dazu passen. Evtl. ist das Poti entsprechend zu verstellen.

Mit der boolschen Variable isOn kann im weiteren Programmverlauf dann der Zustand für eigene Zwecke benutzt werden.

Hier eine kleine Demonstration des Programmes als Video:



So 100%ig zuverlässig scheint das mit der kapazitiven Messung dann doch nicht funktionieren. Kurz darauf habe ich bemerkt, dass die Fehlinterpretationen irgendwie mit der Schreibtischlampe zusammen hängen, die am selben Stromnetz hängt wie das Netzteil, dass den Arduino (5V) speist.



Wenn ich den Arduino über einen Akkupack mit 7.2V speise, dann tritt das geisterhafte Phänomen nicht mehr auf, sondern alles funktioniert wie es soll.



Trotzdem zeigt das soeben Erfahrene, dass man doch auf einiges achten muss, damit ein Sensortaster gut funktioniert. Vielleicht ist ein simpler, normaler, taktiler Taster doch die bessere Wahl für normale Anwendungen.

Das passende Programm stellt sich folgendermaßen dar:

Source-Code

//////////////////////////////////////////////////////// // (C) 2019 by Oliver Kuhlemann // // Bei Verwendung freue ich mich über Namensnennung, // // Quellenangabe und Verlinkung // // Quelle: http://cool-web.de/arduino/ // //////////////////////////////////////////////////////// #include <TimerOne.h> // für Timings und Interrupts #include <MultiFuncShield.h> // API für das Multi Function Shield #define PinData 5 // wo ist Digital Out angeschlossen? #define PinAnalog A5 // wo ist Analog Out angeschlossen? void setup() { Timer1.initialize(); MFS.initialize(&Timer1); // initialize multi-function shield library pinMode (PinData, INPUT_PULLUP); Serial.begin (115200); } void loop() { MFS.beep(1, 5, 2); // bereit byte state=HIGH; int ana=0; int isOn=false; long lastOn=0; while (1) { state=digitalRead(PinData); ana=1023-analogRead(PinAnalog); Serial.println(ana); digitalWrite(3, !(ana > 700)); if (ana > 700) { lastOn=millis(); isOn=true; } else { isOn=(millis()-lastOn) < 20; } MFS.writeLeds(LED_1, state); MFS.writeLeds(LED_2, isOn); MFS.write (isOn?"ON":"OFF"); delay(1); } //end while 1 } //end loop()