Touch sensor

Kapazitativen touch sensor bauen

Wisser: Skruppy
Mitwisser:

Status: working, finished
Tags: software, elektro, AVR, C, Arduino

Hier die beschreibung eines gebastelten touch sensors.

HW

Simulation

In den Java Schaltungssimulator kann die Beschreibung des oberen Bildes per copy & paste im „Import“ Dialog geöffnet werden.

Durch abwechselndes gedrückt lassen der linken Taster kann der sample Kondensator (unterer) aufgepumpt werden. Dazu müssen die Schalten auf der rechten Seite offen sein. Mit den schalter auf de rechten Seite kann der sample Kondensator wieder entladen werden, indem beide Schalter geschlossen werden.

Es hilf wenn man sich die Spannung des unteren Kondensators im Scope anschaut.

Der obere Kondensator ist der touch panel ersatz.

Breadboard aufbau

Auf der linken Seite ist der HW sample Kondensator, mit zwei Widerständen an den Arduino angeschlossen. Die Widerstände mit 270 Ohm begrenzen den Strom auf ca. 18mA, damit der mC bei der anliegenden Wechselspannung nicht gegrillt (zu hoher Strom), wird. Der ATmega1280 würde pro Pin bis zu 40mA und insgesamt 200mA aushalten, aber das muss nicht ausgereizt werden.

An die Klemme, die mit GND und dem sample Kondensator verbunden ist, wird das touch panel angeschlossen.

Auf der rechten Seite ist ein Spannungsteiler, bei dem 4V in der Mitte vom Arduino abgegriffen werden. Ein Kondensator am Abgreifpunkt, der gegen GND geschalten ist, hält die Abgegriffene Spannung, die zum Messen als Referenzspannung verwendet wird, glatt und sauber von Störungen. Der 1k Ohm und der 4k Ohm Widerstand in Serie ergeben 5k Ohm (Rg = R1 + R2), wodurch bei der über beide Angelegten Spannung 1mA (I=U/R) flist. Es ist gewünscht das möglichst weng (aber auch nicht zu wenig) Strom fliest, da es nur die Spannung benötigt wird.

Real live

setup.jpeg

(PS: wer erkennt meinen Hightech-Elektro-Arbeitstisch :P )

Ganz oben auf dem breadboard sind noch ein paar nicht angeschlossene Komponenten, die nicht zum touch sensor gehören. Sie sind noch von nem anderen Projekt über. Das basteln des touch pads ist ne Sau arbeit! Es besteht aus zurechtgeschnittener Alufolie, einem Zusammengelötetem Drahtkamm, einer Kupferbüroklamer, an die ein Draht gelötet wurde um das Alu zu kontaktieren (man kann Alu nicht mit normalen Lötkolben belöten) und viel Tesafilm.

SW

Der Quelltext

Ausgabe

Der mC versucht über UART aka Serielle Schnittelle vom Arduino Kontakt mit seinen Entwicklern auf zu nehmen. Dabei dumpt er Messwerte und „blubbt“ bei einem erkannten click.

  245;   245;   248;     3;     0;     3
  243;   243;   248;     5;     0;     5
  242;   242;   248;     6;     0;     6
  241;   241;   248;     7;     0;     7
  239;   239;   248;     9;     0;     9
  237;   237;   248;    11;     0;    11
Blubb
  232;   232;   247;    15;     0;    15
  198;   198;   246;    48;     0;    48
  186;   186;   246;    60;     0;    60
  181;   181;   245;    64;     0;    64

Touch erkennung

Die berührungserkennung sollte ohne Kalibrierung und ohne fixe/experimentelle Werte aus kommen, damit ein Drift der Grundmesserte keinen nachteiligen Effekt hat. Der drift würde durch das erkennen von Peaks in der Mathematischen Ableitung der Messwerte ohne Auswirkung bleiben (Differenz des letzten mit dem aktuellen Messwert). Jedoch würde eine langsame Annäherung nicht erkannt, oder eine schnelle zu spät (je nach Zeit für einen Wert).

Um alle Probleme zu umgehen werden die Letzten x Messwerte in einem Ringspeicher gehalten (welcher einen belibig großen Zeitraum zum erkennen definiert). Die Ableitung wird durch die Differenz des höchsten Messwertes im gesamten Speicher und dem aktuellen Messwert ersetzt. Übersteigt die differenz einen zum Maximum proportionalen Swellwert, so wird ein „click“ erkannt.

Messauswertung

Zu sehen ist eisne berührung, dann ging ich leicht weg und wieder ran. Zum schluss dann wieder ganz weg. Um so kleiner der messwert, um so großer die hand …. äh oder um so näher die hand oder die fläche die näher kommt.

projects/touch.txt · Zuletzt geändert: 2012/02/18 23:12 von skruppy