www.mikrocontroller.net

Forum: Projekte & Code kapazitiver Touch Sensor - Slider - Wheel


Autor: Martin J. (bluematrix) Benutzerseite
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Dieser Thread bezieht sich auf den 
Beitrag "qtouch - sekt oder selters"

Stichworte: Touch Sensor - Touch Slider - Touch Fader

Funktionsprinzip
------------------------------------------------------------
Die beschriebene Methode ermittelt die Berührung nicht über eine 
Kapazitätsmessung sondern über eine Charge-Transfer-Messung detektiert.

Es gibt 2 Kondensatoren die als Speicher für Ladungen dienen. den 
Kondensator Cs als Speicher und die "Touch" Electrode als Kondensator 
gegen Erde.

Am Anfang werden beide entladen, um die Kondensatoren in einen 
definierten Zustand zu bringen. Das bedeutet, dass PB1 und PC1 als 
Ausgänge und auf LOW geschaltet werden. Etwas warten damit Entladung 
auch vollständig erfolgt. Danach werden in einer Schleife folgende Punkt 
abgearbeitet:

 1. Der Touch Kondensator wird über PB1 aufgeladen (nur wenige pf).
    Dabei ist der Port PC1 ist als Eingang geschaltet damit in den Cs
    kein Stromfließen kann.
 2. Pin PB1 wird als Eingang konfiguriert und PC1 als Ausgang mit 0V.
    Jetzt wandert die Ladung aus dem Touch Kondensatorin Cs (welcher
    viel grösser ist und sich nur gering auflädt)
 3. Wenn die Spannung am Cs ausreicht um vom AVR als 1 gelesenzu werden,
    wird die Schleife beendet und durch geführte Schleifenanzahl
    ausgeben. Der Zählerstand ist ein Maß für die benötigten Ladezyklen.
    Wenn nicht beginnt die Schleife von vorne.

Der Endstand des Zählers verändert sich, wenn mann mit dem Finger den 
Touchsensor berührt.

So zusagen wird durch den kleineren Touch-Kondensator schrittweise der 
große Kondensator Cs aufgeladen. Die Anzahl der benötigten Ladezyklen 
hängt von der "Größe" des Touch Kondensator ab. Und die wiederum von 
dessen Umgebung (Finger).

Stand der Dinge
------------------------------------------------------------
 - Aufbau Widerstand 1kOhm und Kondensator 33nF
 - Messmethode funktioniert bestens
 - Messungen sind zuverlässig
 - autokallibrierung funktioniert

-> testprogramm mit Bargraph siehe Anhang.

Das alles gibt es auch nochmal zusammengefasst hier: 
http://www.jtronics.de/elektronik-avr/kapazitives-...

Ein Demonstrationsvideo gibt es auf Youtube: 
Youtube-Video "Atmega Touch Pad Sensor"

noch zu tun
------------------------------------------------------------
 - Auswertung Scrollrad
 - Auswertung Fader / Slider
 - günstiges Touch Layout mit Target oder Eagel erzeugen

Vielleicht wird im Lauf der Zeit eine gute Bibliothek daraus ;-)

Grüße Martin

: Verschoben durch User
Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat keiner eine Idee wie man solch ein Scrollrad, bestehend aus 9 
Touchfelden auswerten könnte?

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sollte eigentlich kein Hexenwerk sein, fang einfach mal an...

Übrigens, wenn ich Deine Beschreibung oben zum Verfahren lese, dann 
bekomme ich das Gefühl, dass Du noch nicht so ganz verstanden hast wie 
das wirklich funktioniert.
Kann das sein?

Autor: Andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
warum nehmt ihr nicht die QTouch LIb von Atmel?
Da ist alles drin..

Autor: bix (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin J. schrieb:
> hat keiner eine Idee wie man solch ein Scrollrad, bestehend aus 9
> Touchfelden auswerten könnte?

Du brauchst zum Scrollen ja nur den äußeren Ring mit 8 Tasten auswerten.

Ich würde folgendes versuchen:

Sobald eine Taste vom Scroll-Ring durch Annäherung aktiviert wird:

 -> Taste merken

Dann eine Scheife:

  repeat
    Wenn rechte Taste von der zuletzt aktiven gedrückt
      -> Scroll-Zähler erhöhen
      -> neue Taste merken
    Wenn linke Taste von der zuletzt aktiven gedrückt
      -> Scroll-Zähler erniedrigen
      -> neue Taste merken
    Wenn andere Taste als die nächste Taste rechts / links
      -> Abbruch der Schleife (Bedienfehler, Fehlerkennung)
  until "alle Ringtasten inaktiv"

Man kann das ganze noch weiter ausbauen bzw- verfeinern, da man durch 
die Zählerstände der einzelnen Tasten sicherlich auch Zwischenpositionen 
des Fingers erkennen kann.

Dass wäre dann eine Erweiterung, nachdem man die erste Version 
hinbekommen hat.

Frage:

Wo hast Du auf dem Touchpad Ground angeschlossen?

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Servus,

ist zwar für PIC (bei Microchip heißt das mTouch) - die Appnotes sind 
Gold wert:

http://www.microchip.com/en_US/technology/mTouchBu...

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand schon etwas mit den tastern umgesetzt?

Autokallibrierung:
In dem Programmcode ist ein Beispiel für die gleitende Berechnung der 
Autokallibrierung, leider muss ich feststellen, dass diese noch macken 
hat.
Hat jemand noch eine idee das besser zu lösen?

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei mir lief es ebenfalls nicht schlecht, aber auch nicht so top. 
Bei einem gewissen Fingerabstand toggelte der Zustand manchmal wie wild 
hin und her. Ich konnte es dann eliminieren, indem ich in der Auswertung 
eine Hysterese einbaute.
War die "Taste" also gedrückt, wird sie erst wieder als losgelassen 
ausgewertet, wenn der Zählerstand den Schwellwert vom gedrückten Zustand 
minus einer Hysterese für das Loslassen unterschritten hat.

Hast Du auch diesen Effekt oder was ist bei Dir das Problem?

Autor: Martin J. (bluematrix) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bei mir ist es auch so ... wie meinst du das mit der hysterese?
kannst du den code mal posten?

Autor: johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kapier ich nicht, warum Ihr das Rad 2x erfinden müsst: Die TouchLib von 
Atmel funktioniert doch wunderbar und da sind Slider, Wheels usw schon 
mitdrin. Warum also mit Filtern und Hysteresen rumwursteln, wenn alles 
schon fertig implementiert ist???

Autor: Unwissender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

tut mir Leid, dass ich den alten Thread nochmal aufwärme,
aber ich hab die Sache elektrisch noch nicht richtig verstanden.

Wie das mit der Software- Abfrage funktioniert hab ich kapiert, nur das 
mit der Ladungsverschiebung zwischen den zwei C's nicht. Wie fließen da 
die Ströme? Wie kommt die Ladung des Touch- Kondensators in den Cs?

Ich kapier es nicht.

Danke im Voraus.

Autor: Markus .... (kmarkus)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du einen Slider oder ein Wheel auswerten möchtest, gibt es 
prinzipiell zwei Möglichkeiten:
1. Interpolation (rechen-aufwändiger)
2. Wie oben beschrieben, auswerten welches Feld als nächstes relativ zum 
letzten berührt wurde.

Bei der interpolation solltest du dann noch eine schwerpunktberechnung 
machen (lineare interpolation) oder über die sich ergebende gleichung 
differenzieren (polynominterpolation).

Zur linearen Interpolation gibt's diese Formel:
x0,x1,y0,y1 sind zwei bekannte Messwerte und deren Position. x ist ein 
Wert zwischen x0 und x1.

Beispiel:

[6][10][4]

du hast 3 Sensorflächen und möchtest 3 Werte zwischen den Feldern 
interpolieren. Du setzt dann in die Formel ein:

Setzt du das fort kommt das raus:

[6][7][9][10][8][6][4]

Darüber lässt du dann die Schwerpunktberechnung laufen:

i ist die Position im Array+1.

x = (6+7*2+9*3+10*4+8*5+6*6+4*7)/(6+7+9+10+8+6+4) = 3,82

Also liegt deine Berührung zwischen 3 und 4 mit mehr Tendenz zu 4.
Ist dir das nicht genau genug (du solltest es erstmal ausprobieren), 
nutzt du die Polynominterpolation. Dabei wird aber ein Haufen 
Rechen-arbeit abfallen.

Sieh dir am besten den Wikipedia-Artikel an der ist recht gut.

http://de.wikipedia.org/wiki/Polynominterpolation

Autor: Karsten Brandt (karstenbrandt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich bin über diesen interessanten Beitrag gestolpert. Ich benutzte das 
IC AT42QT2160 von Atmel. Mit diesem möchte ich ein "endlos" Wheel 
realisieren. Das Wheel ist auf der Platine geätzt und besteht aus 24 
Sensoren. Das Wheel wird mit 8 X-Leitungen und 1 Y-Leitung 
angeschlossen. Betrieben wird das Wheel als QMatrix, d.h. ein Sensor 
besteht aus zwei Elektroden. Bei 24 Sensoren und 8 X-Kanälen soll 
zwischen den einzelnen Kanälen resitiv interpoliert werden.
So halb funktioniert das Wheel auch. Halb deswegen, weil der Übergang 
von 360° auf 0° nicht korrekt funktioniert, d.h. eine neue Drehung wird 
nicht erkannt. Beim Übergang (besser Überlauf) springt die Wheel 
ERkennung wild hin und her. Kann das QT2160 überhaupt interpolieren? In 
dem Datenblatt habe dazu nichts gefunden.
Hat schon jemand ein (endlos) Wheel mit dem AT42QT2160 realisiert?

Da das mit dem Wheel nicht so klappt, ist wohl die alternative sich 
einen Matrix Touch-Controller selber zu bauen. Das sollte mit einem 
Atmel-Controller (z.B. ATmega 88P  o.ä. ) und der QTouch-Library zu 
realisieren sein. Die Dokumentation zur Library habe natürlich 
durchgelesen. Doch leider findet sich kein Hinweis darauf, ob und wie 
resistiv interpolierte Wheels unterstützt werden. Auch ist die Frage, ob 
ein Überlauf von 359° auf 0° richtig erkannt wird.
Hat jemand damit Erfahrung?

Für einen Tipp wäre ich echt dankbar.

Gruß

Karsten

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ob du interpolation hast oder nicht lässt sich schnell prüfen:  360/8 = 
45. Solltest du Werte in 8er-Schritten bekommen oder eben immer 45° 
Schritte bekommst wird nicht interpoliert, andernfalls schon.

Warum willst du mit eine QTouch-Controller ein resistives Wheel 
auswerten?

Wenn du mit QTouch oder QMatrix arbeitest, hast du nichts mit 
interpolation am Hut. Wenn überhaupt macht das Atmels Bibliothek oder 
der Touch-Controller selbst.

Autor: Karsten Brandt (karstenbrandt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Warum willst du mit eine QTouch-Controller ein resistives Wheel
>auswerten?

Weil mir bisher die Möglichkeit der Realisierung mit einem AVR nicht 
bekannt war und in ATMEL's Produktporfolio der AT42QT2160 unter 
Slider/Wheel steht. Mittlerweile bin ich auch schlauer, nachdem ich dem 
Atmel-Support ne Mail geschrieben habe. Der hat zugegeben, dass der 
Controller QT2160 kein resistives unterstützt und es auch keinen 
Baustein gibt, der das kann. Empfehlung von Support: die QT-Touch 
Library verwenden.

>Wenn du mit QTouch oder QMatrix arbeitest, hast du nichts mit
>interpolation am Hut. Wenn überhaupt macht das Atmels Bibliothek oder
>der Touch-Controller selbst.

Wie und ob die QTouch-Library eine Interpolation macht ist von Support 
nicht zu erfahren. Lediglich der Überlauf von 360 auf 0 wird von der 
Bibliothek erkannt.
ATMEL bietet in der Application-Note AVR254 genau das an, was ich 
benötige. Leider gibt es Softwaretechnisch nur ein .hex-File zum 
Proggen. Mein Wheel hat 8 Kanäle (8 x-Leitungen). Ich müsste die 
Software also entsprechend anpassen. Leider rückt ATMEL den c-Code nicht 
raus. Ein Beispielprojekt mit code wäre nicht schlecht. Leider scheint 
es im ganzen WEB kein Beispiel für ein Qmatrix-Wheel zu geben.
Das Manual der QTouch-Library habe ich gelesen. Bin schon etwas 
schlauer. Aber ein funktionierendes Beispiel macht doch vieles leichter.

Autor: micha (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wollt nur mal nachfragen, ob es jemand mit einem Spiegel dazwischen 
versucht hat ? Oder man es wegen der Verspiegelung (metallisch -Schirm) 
gleich vergessen kann ?

Thanx.

Micha

Autor: Karsten Brandt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Q-Matrix:
Bei Q-Matrix wird das Feld zwischen zwei Elektroden aufgebaut, die sich 
in der Regel auf einer Platine befinden. Der Finger stört das Feld. 
Diese Störung wird detektiert.Daher wird das mit dem Spiegel wird 
wahrscheinlich nicht funktionieren, da Metall die Feldlinien leitet, 
bzw. einen Abschirmeffekt bewirkt.
Q-Touch:
Bei Q-Touch befindet sich nur eine Elektrode auf der Platine. Die 
Gegenelektrode der Kapazität bildet der FInger. Hier könnte der Spiegel 
als Elektrode dienen. Bei Berührung sollte eine Potentialverschiebung 
stattfinden, die gemessen wird. Problematisch wird das allerdings, wenn 
die verspiegelte Fläche über mehrere Elektroden auf der Platine reicht.

Karsten

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich bin Glaser und habe eigentlich von Elektronik keine Ahnung.
Ich möchte auf der Rückseite einer Glasscheibe einen "kap. Sensor" 
aufdrucken.
Es gibt dafür keramische Farben, die eingebrannt werden und Strom 
leiten.
Kann  mir jemand helfen, wie das aussehen muss?

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die Farbe muss du dann halt kontaktieren mit leitfähigem Kleber oder so 
und dann an einen Touchcontroller oder uC anschließen. Aber wenn du 
davon keine Ahnung hast musst du dann jemand beauftragen, der dir die 
Elektronik erstellt.

Wie dick ist denn die Glasscheibe?

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Scheibestärke kann variieren.
ich hatte mir das so vorgestellt, dass man den Sensor aufdruckt und die 
Elektronik dann entsprechend durch einen Stecker verbindet.
Weiß nicht, ob das möglich ist.

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja aber irgendwie muss man die Flächen ja kontaktieren. Wie willst du da 
ein Stecker dran machen?

ab 5mm wird es schwierig. Je nachdem wie groß auch die Tasten sind.

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wir drucken bei uns sogenannte "Alarmschleifen" auf Glas.
An diesen werden Kabel angelötet.
Hast du eine Idee wie das Druckbild aussehen muss.
Ich habe gehört, dass Platinen gedruckt werden(Siebdruck)

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ob Platinen professionell auch gedruckt werden, weiß ich nicht. Ich 
kenne nur ätzen.

Du meinst das Druckbild auf der Glasscheibe? Wenn die Glasscheibe <= 5mm 
ist reicht für Buttons ein Kreis mit ~13mm Durchmesser. Die Kabel der 
einzelnen Buttons sollten halt dann nicht gebündelt oder längere Zeit 
parallel verlaufen. Also möglichst kurze Kabel und Platine so nah wie 
möglich.

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kannst du mir helfen, soetwas zu realisieren?
hast du ne e-mail oder so?

Autor: Martin S. (drunkenmunky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
können schon, nur ob ich dazu in nächster Zeit genug Zeit dafür habe 
weiß ich nicht...

Was willst du dann mit den Signalen ansteuern?
Wäre dann also ne Platine erstellen, herstellen und programmieren?

Autor: Heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kannst du mir schreiben?
glasveredler@web.de

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.