zurück

Kapazitativer Berührungssensor

12.01.2019

Ein sogenannter kapazitativer Berührungssensor benötigt zur Auslösung eines Kontaktes keinen bzw. kaum mechanischen Kraftaufwand durch den Auslöser (Mensch).
Die dafür verwendete Sensorplatte bildet zusammen mit dem menschlichen Körper einen Kondensator, welcher eine gewisse Menge elektrische Energie speichern kann. Die Kapazität dieses Kondensators ist abhängig, wie weit die Hand (bzw. der Finger) des Menschen von der Sensorplatte entfernt ist.
Der Arduino kann quasi die Zeit messen, in der sich dieser Kondensator aufläd und errechnet damit seine Kapazität. Obwohl diese recht klein ist, kann der Ardiuno dies recht genau messen.
Im folgenden Aufbau verwenden wir die Arduino-Library CapacitiveSensor. Weitere Informationen zu dieser Library gibt es auch auf der Seite von CapacitiveSensor.

Funktionsweise des Berührungssensors
Abb.: Funktionsweise des Berührungssensors

Verwendete Bauteile

Aufbau

Ein Stück Metallfolie wird mit zwei Verbindungen versehen: Der Eingang, welcher mit einem hohen Widerstand (100kΩ bis 50MΩ) zu einem Pin des Arduino verbunden wird (je höher dieser Widerstand, desto empfindlicher ist der Berührungssensor). Der Ausgang, welcher mit einem anderen Pin des Arduino angeschlossen wird. Wird schalten hier noch einen 1kΩ Widerstand dazwischen, damit der Pin keinen Schaden nehmen kann (z.B. durch statische Aufladung der Hände).
Mehrere Berührungssensoren können sich einen Eingang teilen, jedoch benötigt jeder einen eigenen Ausgangs-Pin am Arduino.
Um bestmögliche Ergebnisse zu erzielen sollte der GND-Pin des Arduino wirklich mit der Masse (Erdung) verbunden sein.

Aufbau mit einem Berührungssensor aus Aluminiumfolie
Abb.: Aufbau mit einem Berührungssensor aus Aluminiumfolie

Die "CapacitiveSensor"-Library funktioniert folgendermaßen: Zunächst wird ein Objekt mit dem Ein- und Ausgangs-Pin erstellt (PIN_TOUCH_SEND und PIN_TOUCH_RECEIVE). Beim Meßvorgang wird touchSensor.capacitiveSensor(numSamples) aufgerufen, wobei eine Erhöhung von numSamples zwar die Genauigkeit der Messung erhöht, jedoch auch die Messdauer verlängert. Es wird nach dem Messvorgang die vergangene Zeit zurückgeliefert. Negative Zahlen bedeuten, dass bei der Messung etwas falsch gelaufen ist.

Sketch

Der folgende Sketch wertet den kapazitätiven Berührungssensor aus und läßt eine LED leuchten, wenn ein gewisser Wert überschritten wird (=der Finger ist nah genug am Sensor oder berührt ihn).

#include <CapacitiveSensor.h>

#define PIN_LED           8
#define PIN_TOUCH_SEND    6
#define PIN_TOUCH_RECEIVE 7

CapacitiveSensor touchSensor = CapacitiveSensor(PIN_TOUCH_SEND, PIN_TOUCH_RECEIVE);

void setup()
{
    Serial.begin(9600);
    pinMode(PIN_LED, OUTPUT);
    touchSensor.set_CS_AutocaL_Millis(0xFFFFFFFF);
}

void loop()
{
    long start = millis();
    long total =  touchSensor.capacitiveSensor(30);

    // check on performance in milliseconds
    Serial.print(millis() - start);
    Serial.print("\t");

    // print sensor output 1
    Serial.println(total);

    if (total > 1000) {
        digitalWrite(PIN_LED, HIGH);
    } else {
        digitalWrite(PIN_LED, LOW);
    }

    delay(100);
}
Ausgabe auf der seriellen Konsole
Abb.: Ausgabe auf der seriellen Konsole