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ädt und errechnet damit seine
Kapazität. Obwohl diese recht klein ist, kann der Arduino 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.
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.
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.
Der folgende Sketch wertet den kapazitativen Berührungssensor aus und lässt 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);
}
zurück