closeThis post has been published 4 years 1 month 19 days ago and may be out of date. Please read it carefully, I'm not responsible for any mistakes.

Allgemeines

In diesem Artikel geht es um die Funktionsweise und Ansteuerung eines Touchscreens mit einem
Arduino, sowie eine Visualisierung am PC.
Zum Einstieg einmal, was ist ein Touchscreen? Häufig auf Displays zu finden, erleichtert er
die Bedienung des Gerätes erheblich, v.a. durch das Wegfallen von übermäßig vielen Tasten.
Doch man muss differenzieren, nicht das Display selbst registiert die Eingabe, sondern die
Schicht darüber, das heißt im Klartext, dass der Touchscreen ein unabhängiges System ist.
Grundsätzlich gibt es 2 Bauweisen, die eine Druckstelle auf einer Fläche lokalisieren können,
resistive und kapazitive Touchscreens. Doch wo ist der Unterschied?
Gibt es überhaupt einen signifikanten? Ja!
Nicht nur das Funktionsprinzip ist etwas verschieden, auch die Eigenschaften.

 

Vor-/Nachteile beider Bauweisen

Vorteile resistiver Touchscreens:

  • Günstig (Einfache Ansteuerung)
  • Mit Handschuhen/Stiften bedienbar

Nachteile resistiv:

  • Nicht multitouchfähig
  • gewisser Druck notwendig
  • Verschleiß, da mechanisch verformbar

Vorteile kapazitiver Touchscreens:

  • Sehr präzise
  • Multitouch und Gestenstererung
  • Keine optische Beeinträchtigung (nur Glas – meist keine Kunststoffe)

Nachteile kapazitiv:

  • Verhältnismäßig teurer
  • Nur mit leitfähigen Gegenständen bedienbar

 

Funktionsweise: Kapazitive Touchscreens

Wie der Begriff schon vermuten lässt, hat das Ganze etwas mit Kapazität zu tun.
Der Aufbau ist recht simpel. Standartmäßig sind zwei Platten (meist Glas; aber auch Kunststoff)
übereinandergelegt. Auf der einen Platte sind dünne, horizontal angeordnete leitfähige
Bahnen aufgebracht, auf der anderen vertikal. Die Enden werden meist direkt mit den Pins
eines Mikroprozessors verbunden.
Wie wird jetzt eine Berührung gemessen? Da die Bahnen leitfähig sind, haben sie eine
(wenn auch geringe) Kapazität. Zusätzlich wird jeweils an den Enden X1…X11 und Y1…Y9
eine Wechselspannung angelegt. Schließt man eine Wechselspannung an einen Kondensator an,
so wirkt er wie ein Widerstand und eine gewisse Menge Strom kann fließen, weil der Kondensator mit
jedem Zyklus Ge- und Entladen werden muss.
Weil diese aufgebrachte Energie ohne Wirkung verschoben wird, nennt man sie auch Blindenergie
und den daraus resultierenden Widerstand Blindwiderstand, dessen Wert mit steigender
Kapazität sinkt.
Wird also ein leitender Gegenstand in die Nähe einer Leitung gebracht, so steigt in dieser
die Kapazität (und Stromaufnahme), bzw die Spannung nimmt ab, was wichtig ist,
je nachdem was gemessen wird.

Jetzt will man nur noch wissen, wo genau die Berührung stattfindet.
Wie man im Bild erkennen kann, überschneiden sich die Bahnen in einem Raster,
die Schnittpunkte stellen die Messpunkte dar (hier grün markiert),
somit wirkt sich die Kapazitätszunahme eines nahen Körpers auf 2 Leitungen aus.
Man erhält also eine X- und Y-Koordinate.

 

Funktionsweise: Resistive Touchscreens

Auch hier lautet wieder die Devise: Der Begriff gibt den Hinweis.
Resistive Touchscreens, vom englischen ‘resistor’ für Widerstand abgeleitet,
funktionieren nach einem ähnlichen Prinzip.
Wie es euch vielleicht aufgefallen ist, habe ich oben “Berührung” geschrieben,
das hat durchaus einen ernstzunehmenden Sinn, denn für diese Art von Touchscreen reicht eine
bloße Brührung nicht mehr aus, es muss schon ein gewisser Druck vorhanden sein.
Der Grund hierfür ist der Aufbau. Wie auch bei der kapazitiven Bauweise sind zwei Ebenen
der Hauptbestandteil, nur gibt es in diesem Fall keine Bahnen, weil die komplette
Schicht leitfähig ist. Darüber hinaus muss eine Verformbarkeit gewährleistet sein, weswegen
keine Glasschichten zum Einsatz kommen, sondern meist Kunststoffvarianten.

Die X-Ebene hat 2 vertikal, die Y-Ebene 2 horizontal angeordnete Kontaktstreifen.
Die Ebenen selbst sind mit einem lichtdurchlässigem Halbleiter beschichtet, welcher die
Leitfähigkeit sicherstellt. Wird nun beispielsweise an einer Schicht an deren beiden Anschlüssen
der jeweiligen Streifen eine Spannung angelegt, so wirkt die Platte wie ein Spannungsteiler.
Stellt es euch am besten wie ein Potentiometer vor:
An der Seite, wo der Minus-Pol (GND) angeschlossen ist, ist logischerweise keine Spannung
zu messen.
An der anderen Seite (Plus-Pol), die maximal angelegte Spannung (VDD).
Zwischen den gegenüberliegenden Bahnen existiert ein linearer Spannungsverlauf
(0 –> VDD), was die parallelen, kleiner werdenden Linien darstellen sollen.

Je nachdem, wo sich der Druckpunkt nun befindet, berühren sich beide Ebenen.
Eine Ebene erzeugt den Spannungsverlauf, die andere dient zum Abnehmen der Spannung,
es kann also immer nur eine Koordinate gleichzeitig gemessen werden.
Je näher man dem VDD-Streifen kommt, desto höher ist die gemessene Spannung,
je weiter weg und näher dem GND-Streifen, desto niedriger.

Daraus ergibt sich folgendes Messschema:

 

Ansteuerung mit einem Arduino

Dieses Grundprinzip kann nun direkt im Programmcode implementiert werden.
Hierfür verwende ich einen 7″-Touchscreen, der Link zum Shop ist unten aufgeführt.
Eigentlich gibt es bei resistiven Touchscreen mehrere “Unterarten”, die sich in der Anzahl
der Anschlüsse unterscheiden, um das Ganze aber übersichtlich zu halten, bleibe ich bei
der Four-Wire-Variante, zumal es die häufigste ist:

Der Code an sich ist recht einfach gehalten, auf solche Sachen wie “delay()” sollte
natürlich bei größeren bzw. performancelastigeren Programmen verzichtet werden,
da es den kompletten Programmfluss anhält, sinnvoller wäre ein Timer.

 

Solange keine Berührung stattfindet, wird wird immer die VDD-Spannung gemessen, d.h. die
analoge Messung liefert den Wert 1023 zurück.
So kann man einfach festlegen, ob der Touchscreen aktiv gedrückt wurde oder nicht.
Da ein restistiver Touchscreen nicht in der Lage ist, solch extrem genaue Positionen
zu messen, werden die “Rohdaten” noch auf 1-64 in X-Richtung, bzw. 1-36 in Y-Richtung
heruntergerechnet, werden diese Bereiche überschritten, so liegt kein Druck vor,
was mit dem Setzen der Variablen auf ‘0’ signalisiert wird.
Die integrierte Led an Pin 13 (Ich verwende den Arduino Leonardo), leuchtet synchron mit
einem Kontakt.
Hinweis: Die Angaben in der map()-Funktion sind nicht pauschal, sondern je nach
Touchscreen unterschiedlich – es empfiehlt sich also vorher genau die Randbereiche
zu trimmen. :D
Zu guter letzt werden noch die Messwerte über den seriellen Port an die Außenwelt übermittelt.

 

Visualisierung: Messwertdarstellung am PC

Ich gebs ja zu…da reine Daten nicht sehr anschaulich und interessant sind, habe ich noch ein
kleines Projekt geschrieben, welches die Koordinaten etwas schöner darstellt.
Hierzu verwende ich Processing (Link unten) – meiner Meinung eines der besten Programme,
wenn es darum geht, grafische Simulationen und Animationen zu erstellen.
Die Bedienung ist denkbar einfach, auch Hilfe im Internet ist reichlich vorhanden.
Die Programmiersprache baut auf Java auf und ähnelt sehr stark der von Arduino,
kann ich also nur empfehlen.

GifTouch

Weiterführende Links

Processing: processing.org/

7″-Touchscreen: exp-tech.de/Displays/A13-TS7.html

[Total: 0    Average: 0/5]

Leave Comment

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.