2D-Touchfeld

Aus C3MAWiki
Wechseln zu: Navigation, Suche
An diesem Projekt wurde bereits gearbeitet, momentan kann sich jedoch aufgrund eines Mangels an Zeit, Lust oder Geld niemand damit beschäftigen. Wenn du das Projekt übernehmen möchtest oder Fragen dazu hast, wende dich an Pensoffsky.


Info

Dieses Projekt widmet sich der Entwicklung eines lowcost 2d-Touchfelds. Damit soll man fast jede solide Oberfläche in ein Eingabefeld verwandeln können. Das ganze basiert auf der Bestimmung der Position von Vibrationen mit Hilfe von Piezo-Sensoren. Man klebt z.B. 3 sensoren auf einen tisch, dann tippt man irgendwo zwischen den sensoren mit dem Finger und berechnet mit den Laufzeitunterschieden der Vibrationen die Position.

Die Idee stammt von diesem Projekt: Slashdot-Artikel


Aufbau

Drei Sensoren nehmmen die Vibrationen auf. Ein Operationsverstärker pro Sensor verstärkt die Signale. Ein AVR wertet diese Signale aus und überträgt die Laufzeitunterschiede an ein Programm im Zieldevice.

Lokalisations-Software

Benutzt wird das sogenannte Hyperbelverfahren, für welches mindestens 3 Sensoren notwendig sind. Um je 2 der Mikrophone wird eine Hyperbel errechnet. Auf diesen Hyperbeln liegen alle Punkte die von den betroffenen Mikrophonen den selben (gemessenen) Laufzeit-Unterschied voneinander haben.

Soweit ist schon alles objektorientiert in JavaCode implementiert, muss aber wohl in C / Bascom 'übersetzt' werden, da eine Ausgabe aller Messwerte über die RS232 (serielle) Schnittstelle viel zu langsam ist!

Im Endeffekt werden wohl nur die "Klicks" relativ zu den Mikrophonen an das Zieldevice weitergeleitet. Wer sich gut mit Lösungen von etwas komplexeren Gleichungen auskennt, darf sich gerne melden :)

Es gilt nun noch den Schnittpunkt der Hyperbeln auszurechnen, also (gleichzusetzen oder ähnliches und) nach x aufzulösen ( a, b, p sind bekannt):

  • Hyp1: y = sqrt(-a + b² (x-p)²)
  • Hyp2: y = sqrt((x² +a) / b²) + p

Lösung

(sagt Derive)

x = (√((b + 1)·(b - 1)·(a·(b^2 + 1)^2 + b^2·p^2·(b^2 - 1))) - b^2·p·(b^2 - 1))/((b + 1)·(1 - b)·(b^2 + 1)) ∨

x = (√((b + 1)·(b - 1)·(a·(b^2 + 1)^2 + b^2·p^2·(b^2 - 1))) + b^2·p·(b^2 - 1))/((b + 1)·(b - 1)·(b^2 + 1)) ∨

x = (√(a·(b + 1)·(b - 1) + b^2·p^2) - b^2·p)/((b + 1)·(1 - b)) ∨

x = (√(a·(b + 1)·(b - 1) + b^2·p^2) + b^2·p)/((b + 1)·(b - 1))

Formel als Bild (klick me): 400px


Status Hardware:

  • Sensoren wurden gekauft.
  • Prototyp einer Operationsverstärkerschaltung existiert und wartet darauf vervielfertigt zu werden.

Beteiligte User:

Status Software Controller:

  • Die Auslieferung der Messwerte hat begonnen :)

'touchsensor versuch 1

$regfile = "m32def.dat" $baud = 9600 $crystal = 2000000

'long ist nicht wirklich gut in nem controller 'aber egal erstmal Dim Aktiv As Long Dim Inaktiv As Long

'das adc zeugs einstellen Config Adc = Single , Prescaler = Auto Start Adc Dim W As Word , Channel As Byte Channel = 0


'gibt die anzahl der messungen während eines peaks 'und der pause danach aus Do

  W = Getadc(0)
  If W > 4 Then
     Do
        W = Getadc(0)
        Incr Aktiv
     Loop Until W < 4
     Print "a" ; Aktiv
     Aktiv = 0
  Else
     Do
        W = Getadc(0)
        Incr Inaktiv
     Loop Until W > 4
     Print "i" ; Inaktiv
     Inaktiv = 0
  End If

Loop End

'beispiel output 'i3300 'lange pause 'i9 'störungen? 'i5 'störungen? 'a30 'klopfen start 'a18 'i10 'a89 'a20 'a442 'a100 'a105 'i9 'a107 'i3 'a99 'i17 'a71 'i13 'a111 'a281 'i8 'a142 'klopfen ende 'i15313 'lange pause 'a57 'mausklick start 'a266 '...


Fortlaufende News:

  • 20.01.2007

Ein Klopfen mit einem Sensor kann sehr sicher festgestellt werden. Mit leichten Verbesserungen sollte die Hardwareseite keine Probleme mehr machen. Wir habe uns entschieden erstmal die Variante mit der Peak-Detection umzusetzen.

  • 12.01.2007

Den Testaufbau an einen Mega32 gehängt und ein wenig mim Bascom rumgespielt. Ich glaub der Chip hat ein Problem. Bei nem Takt über 2Mhz bekomm ich keine gescheite serielle Verbindung mehr hin.

  • 11.01.2007

Ersten Testaufbau für die Verstärkerschaltung(noch nicht mit dem "Wunsch-OpAmp") getestet, auf dem Messgerät sehen die Daten schon verwertbar aus. Getestet wurde bis jetzt nur in der Ebene und nicht an der Wand.

  • 09.01.2007

3 verschiedene Sensoren gekauft und erste vorsichtige Messungen durchgeführt.